Настройка контроллера
Метод 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`.