0

如何为 huebert-webentwicklung.de/sitemap.xml 生成 processwire 3 的站点地图,它不适用于插件 MarkupSitemapXML。知道如何让它工作吗?

谢谢。

4

1 回答 1

1

创建一个新的页面模板(sitemap.xml),然后将页面输出设置为 PW 后端的 XML。创建一个页面并链接它(将其设置为隐藏)。

function renderSitemapPage(Page $page) {
return 
"\n<url>" .
"\n\t<loc>" . $page->httpUrl . "</loc>" .
"\n\t<lastmod>" . date("Y-m-d", $page->modified) . "</lastmod>" .
"\n</url>";
}

function renderSitemapChildren(Page $page) {

 $out = '';
 $newParents = new PageArray();
 $children = $page->children;

 foreach($children as $child) {
    $out .= renderSitemapPage($child);
    if($child->numChildren) $newParents->add($child);
    else wire('pages')->uncache($child);
    }

 foreach($newParents as $newParent) {
    $out .= renderSitemapChildren($newParent);
     wire('pages')->uncache($newParent);
 }

return $out;
}

function renderSitemapXML(array $paths = array()) {

$out = '<?xml version="1.0" encoding="UTF-8"?>' . "\n" . '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';

  array_unshift($paths, '/'); // prepend homepage

  foreach($paths as $path) {
    $page = wire('pages')->get($path); 
    if(!$page->id) continue; 
    $out .= renderSitemapPage($page);
    if($page->numChildren) $out .= renderSitemapChildren($page);
 }

  $out .= "\n</urlset>";
  return $out; 
}
header("Content-Type: text/xml");
echo renderSitemapXML();
于 2016-11-24T11:03:10.947 回答