2016-10-20 18 views
0

huebert-webentwicklung.de/sitemap.xmlのprocesswire 3用のサイトマップを生成するには、どうすればPlugin MarkupSitemapXMLで動作しません。どのようにそれを動作させるためにどのようなアイデア?Sitemap-XML for Processwire 3

ありがとうございました。

+0

http://www.huebert-webentwicklung.de/sitemap.xmlがここで動作するようですか?とにかく、もう1つの役に立つリソースは次のようなものです:http://processwire-recipes.com/recipes/create-xml-sitemap-for-every-language/ – lynx

答えて

0

新しいページテンプレート(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();