Настройка контроллера
Метод index()
вашего контроллера должен выглядеть примерно так. Он хранится по адресу controllers/Sitemap.cfc
.
function init() {
// Grab data about URLs from model or build an array of structs to pass to the view
urls = model("page").findAll(); // This line is just an example
// Call `renderWith()` to instruct Wheels that this requires a special content-type
renderWith(urls);
}
Настройка просмотра
Затем ваше представление в views/sitemap/index.xml.cfm
может сгенерировать необходимый XML:
<cfoutput>
<?xml version="1.0" encoding="UTF-8"?>
<urlset
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9
http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
#includePartial(partial="url.xml", query=urls)#
</urlset>
</cfoutput>
Затем вы можете реализовать партиал в views/sitemap/_url.xml.cfm
, представляющий один элемент в вашем запросе или массиве. Дайте мне знать, если вы используете что-то другое, кроме запроса, и я могу изменить мой пример выше.
<cfoutput>
<url>
<loc>#arguments.uri#</loc>
<loc>#arguments.updatedAt#</loc>
</url>
</cfoutput>
Имейте в виду, что когда вы используете такой партиал, столбцы запроса или ключи структуры помещаются в область arguments
, поэтому я ссылаюсь на arguments.uri
и arguments.updatedAt
в моем вымышленном примере.
Доступ через URL
В зависимости от возможностей перезаписи URL-адресов вашего сервера вам может потребоваться несколько способов, чтобы заставить URL-адрес делать то, что вы хотите.
Вы можете сделать что-то подобное в config/routes.cfm
(но я тестировал это только на Apache):
<cfset addRoute(pattern="sitemap.[format]", controller="sitemap", action="index")>
<cfset addRoute(pattern="sitemap", controller="sitemap", action="index")>
Затем вы можете загрузить URL-адрес в http://www.example.com/sitemap.xml
Если это не сработает, попробуйте следующее:
<cfset addRoute(pattern="sitemap.xml", controller="sitemap", action="index")>
<cfset addRoute(pattern="sitemap", controller="sitemap", action="index")>
Опять же, вы можете загрузить URL-адрес по адресу http://www.example.com/sitemap.xml
.
Наконец, если это не сработает, удалите лишние строки из config/routes.cfm
и загрузите этот URL-адрес (который определенно всегда будет работать независимо):
`http://www.example.com/sitemap?format=xml`.
person
Chris Peters
schedule
31.01.2012