yrewrite - sitemap.xml um zusätzliche Seiten erweitern

Hinweis Diese Kurzanleitung gilt für YRewrite ab Version 2.7

Falls in der sitemap.xml einzelne Seiten fehlen (aus welchem Grund auch immer) oder z.B. Seiten/Urls aus eigenen Tabellen zusätzlich in die Sitemap eingefügt werden sollen kann dies über die beiden Extensionpoints YREWRITE_DOMAIN_SITEMAP (Domainabfrage möglich) und YREWRITE_SITEMAP (für alle Domains) erreicht werden.

Beim Extensionpoint YREWRITE_SITEMAP wird das Array sitemap übergeben.

Beim Extensionpoint YREWRITE_DOMAIN_SITEMAP wird das Array sitemap, und zusätzlich als Parameter ein Objekt rex_yrewrite_domain übergeben.

Beispiel für Extensionpoint YREWRITE_DOMAIN_SITEMAP

Hinweis Der Beispiel-Code kann Syntax-Fehler enthalten (da er natürlich nicht genau so im Projekt vorhanden war) und muss an die eigenen Bedürfnisse angepasst werden!

<?php
// YRewrite - sitemap.xml erweitern

rex_extension::register('YREWRITE_DOMAIN_SITEMAP', static function (rex_extension_point $ep) {
    $sitemap = $ep->getSubject();

    // Domainabfrage
    $params = $ep->getParam('domain'); // Objekt rex_yrewrite_domain
    $domain = $params->getName();
    if ('MeineDomain' != $domain) { // nur bei MeineDomain
        return;
    }

    // einzelnen Artikel zur Sitemap hinzufügen, ID 999 anpassen
    $article = rex_article::get(999);
    if ($article) {
        $arturl = rex_yrewrite::getFullUrlByArticleId($article->getId(), rex_clang::getCurrentId());
        $artdate = $article->getValue('updatedate');
        $sitemap[] =
            "\n".'<url>'.
            "\n".'<loc>' . $arturl . '</loc>'.
            "\n".'<lastmod>'.date(DATE_W3C, $artdate).'</lastmod>'.
            "\n".'<changefreq>weekly</changefreq>'.
            "\n".'<priority>1.0</priority>'.
            "\n".'</url>';
    }

    // Seiten aus z.B. eigener Tabelle hinzufügen
    $sql = rex_sql::factory();
    $sql->setDebug(false);

    // Hier SQL mit Query-Parametern 
    $_query = 'SELECT `url`, `updatedate` FROM `' . rex::getTable('meineTabelle') . '` WHERE `meinfeld` = :meinesuche ';
    $_queryparams = [];
    $_queryparams['meinesuche'] = 'meinSuchwert';
    $sql->setQuery($_query, $_queryparams);

    if ($sql->getRows() > 0) {
        for ($i = 0; $i < $sql->getRows(); ++$i) {
            $meineUrl = $sql->getValue('url'); // nur ein Beispiel
            $meinDatum = $sql->getValue('updatedate'); // nur ein Beispiel
            $sitemap[] =
                "\n".'<url>'.
                "\n".'<loc>' . $meineUrl . '</loc>'.
                "\n".'<lastmod>'.date(DATE_W3C, $meinDatum).'</lastmod>'.
                "\n".'<changefreq>weekly</changefreq>'.
                "\n".'<priority>1.0</priority>'.
                "\n".'</url>';
            $sql->next();
        }
    }

    // sitemap-Array zurückgeben 
    $ep->setSubject($sitemap);
});

Das obige Beispiel kann auch für den Extensionpoint YREWRITE_SITEMAP verwendet werden, allerding ohne den Bereich mit der Domainabfrage.