Sitemap generator for multilanguage website

Thank you @anon77445132 :slight_smile:

I’ve now added support for both single and multi language situations

kirby()->routes(array(
    array(
        'pattern' => 'sitemap.xml',
        'action'  => function() {

            $sitemap = '<?xml version="1.0" encoding="utf-8"?>';
            $sitemap .= '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';
            if(!empty(site()->languages())) {
                foreach(site()->pages()->index() as $page){
                    foreach(site()->languages() as $language) {
                        $sitemap .= add_sitemap_url($page, $language);
                    }
                }
            } else {
                foreach(site()->pages()->index() as $page){
                    $sitemap .= add_sitemap_url($page);
                }
            }
            $sitemap .= '</urlset>';

            return new Response($sitemap, 'xml');

        }
    )
));

function add_sitemap_url($page, $language = null){

    $exclude = c::get('sitemap.exclude', array('error'));
    $important = c::get('sitemap.important', array('contact'));

    if(!in_array($page->uri(), $exclude) and $page->isVisible()){
        $url  = '<url>';
        $url .=     '<loc>' . ($language ? html($page->url($language->code())) : html($page->url())) . '</loc>';
        $url .=     '<lastmod>' . $page->modified('c') . '</lastmod>';
        $url .=     '<priority>' . (($page->isHomePage()||in_array($page->uri(), $important)) ? 1 : 0.6/$page->depth()) . '</priority>';
        $url .= '</url>';
        return $url;
    }
}