Create a Sitemap
Create a snippet called sitemap with the filter set to none and having this code in the body:
<?php
function snippet_sitemap($parent)
{
$out = '';
$childs = $parent->children();
if (count($childs) > 0)
{
$out = '<ul>';
foreach ($childs as $child)
$out .= '<li>'.$child->link().snippet_sitemap($child).'</li>';
$out.= '</ul>';
}
return $out;
}
?>
<div id="sitemap">
<?php echo snippet_sitemap($this->find('/')); ?>
</div>
Create a page called “sitemap” by clicking on the green “plus” icon beside the Home page; the body of the page should simply be:
<?php $this->includeSnippet('sitemap'); ?>
Use your Normal template.
Note: set your Sitemap page to hidden if you don’t want it to appear in the sitemap itself.
You can reference the Sitemap link with this code:
<a href="<?php echo BASE_URL; ?>sitemap">Sitemap</a>
which can be included in a footer, sidebar, or wherever!
Now to create a XML Sitemap (Google like)
Create a layout Xml with content-type:
application/xml, and body: <?php echo $this->content(); ?>
Create a snippet called xml_sitemap with the filter set to none. Copy this into the body:
<?php
function snippet_xml_sitemap($parent)
{
$out = '';
$childs = $parent->children();
if (count($childs) > 0)
{
foreach ($childs as $child)
{
$out .= " <url>\n";
$out .= " <loc>".$child->url()."</loc>\n";
$out .= " <lastmod>".$child->date('%Y-%m-%d', 'updated')."</lastmod>\n";
$out .= " <changefreq>".($child->hasContent('changefreq') ? $child->content('changefreq'): 'weekly')."</changefreq>\n";
$out .= " </url>\n";
$out .= snippet_xml_sitemap($child);
}
}
return $out;
}
?>
<?php echo '<?'; ?>xml version="1.0" encoding="UTF-8" <?php echo '?>'; ?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<?php echo snippet_xml_sitemap($this->find('/')); ?>
</urlset>
Create your sitemap Page, set the status to hidden, then in body, write:
<?php $this->includeSnippet('xml_sitemap'); ?>
Set the filter to none, then set the layout to Xml.
