Sitemap.xml nach Hause wechseln

7

In unserem Magento-Shop fügt die Sitemap, die Magento automatisch über das Admin-Panel unter Katalog> Google Sitemap generiert, die Home- URL zu unserer Homepage hinzu:

<url>
    <loc>http://our-domain.com/home</loc>
    <lastmod>2014-11-17</lastmod>
    <changefreq>daily</changefreq>
    <priority>0.2</priority>
</url>

Gibt es eine Möglichkeit, dies zu ändern?

<url>
    <loc>http://our-domain.com/</loc>
    <lastmod>2014-11-17</lastmod>
    <changefreq>daily</changefreq>
    <priority>0.2</priority>
</url>
Stechpalme
quelle

Antworten:

9

Sie erhalten diese URL, weil die Homepage eine CMS-Seite ist.
In Ihrem Fall hat es die Kennung home.
Um diese URL zu ändern, müssen Sie die Methode neu schreiben Mage_Sitemap_Model_Resource_Cms_Page::_prepareObjectund so aussehen lassen:

protected function _prepareObject(array $data)
{
    $object = new Varien_Object();
    $object->setId($data[$this->getIdFieldName()]);
    //for home set url to ''
    if ($data['url'] == 'home') {
        $data['url'] = '';
    }
    $object->setUrl($data['url']);

    return $object;
}

Dies funktioniert natürlich nicht, wenn Sie die Homepage auf eine andere Seite ändern. Aber es ist ein schneller Weg, es zu tun.
Wenn Sie die saubere Version möchten, müssen Sie überprüfen, wie die Hompage für Ihr aktuelles Geschäft lautet.
Fügen Sie dazu ein neues Mitglied und eine neue Methode wie folgt hinzu:

protected $_homeId = array();
public function getHomepageId($storeId)
{
    if (!isset($this->_homeId[$storeId]))) {
        $pageId = Mage::getStoreConfig(Mage_Cms_Helper_Page::XML_PATH_HOME_PAGE, $storeId);
        $delimeterPosition = strrpos($pageId, '|');
        if ($delimeterPosition) {
            $pageId = substr($pageId, 0, $delimeterPosition);
        }
        $this->_homeId[$storeId] = $pageId;
    }
    return $this->_homeId[$storeId];
}

In diesem Fall müssen Sie die getCollectionMethode in derselben Klasse ändern . Bevor $page = $this->_prepareObject($row);Sie dies hinzufügen:

if ($row[$this->getIdFieldName()] == $this->getHomepageId($store)) {
    $row['url'] = '';
}
Marius
quelle
Also muss ich app/code/core/Mage/Sitemap/Model/Resource/Cms/Page.phpwie hier
Holly
@CreedBratton. Ja ... das sage ich.
Marius
super - danke für deine hilfe. Ich habe eine Frage simlar hier würde man es dagegen suchen?
Holly
@MariusIch habe dies versucht und festgestellt, dass der Wert in meiner benutzerdefinierten Protokolldatei korrekt protokolliert wird. Wenn ich jedoch unter mysite.com/sitemap/sitemap.xml nachschaue, wird weiterhin mysite.com/home anstelle von mysite.com angezeigt. Muss der Cache gelöscht / kompiliert werden oder so?
Anurag Khandelwal
3

Magento 1.9.0.0. Es wurden zwei Ereignisse hinzugefügt, um die XML-Sitemap für Produkte und Kategorien anzupassen:

  • sitemap_categories_generating_before
  • sitemap_products_generating_before

In Mage_Sitemap_Model_Sitemap::generateXml()sie ersetzt

    foreach ($collection as $item) {

mit

    $priority   = (string)Mage::getStoreConfig('sitemap/product/priority', $storeId);
    $collection = Mage::getResourceModel('sitemap/catalog_product')->getCollection($storeId);
    $products = new Varien_Object();
    $products->setItems($collection);
    Mage::dispatchEvent('sitemap_products_generating_before', array(
        'collection' => $products
    ));
    foreach ($products->getItems() as $item) {

Gleiches gilt für Kategorieseiten, aber 20 Zeilen darunter wurden nur foreach ($collection as $item)für CMS-Seiten beibehalten . Ich würde diese Methode anpassen und neu schreiben / modifizieren Mage_Sitemap_Model_Sitemap, um sie durch ... zu ersetzen.

    $pages = new Varien_Object();
    $pages->setItems($collection);
    Mage::dispatchEvent('sitemap_cms_pages_generating_before', array(
        'collection' => $pages,
        'store_id' => $storeId
    ));
    foreach ($pages->getItems() as $item) {

Anschließend können Sie dieses neue Ereignis verwenden, um die Sitemap Ihrer CMS-Seiten zu ändern:

Veranstaltung:

<sitemap_cms_pages_generating_before>
    <observers>
        <rename_home>
            <class>[model]/observer</class>
            <method>renameCmsHomePageUrl</method>
        </rename_home>
    </observers>
</sitemap_cms_pages_generating_before>

Beobachter:

public function renameCmsHomePageUrl(Varien_Event_Observer $observer)
{
    $collection = $observer->getCollection();
    foreach ($collection->getItems() as $item) {
        if ($item->getUrl() === 'home') {
            $item->setUrl('');
            break;
        }
    }
}
sv3n
quelle
2

Danke für den Code.

Mit diesem Snippet habe ich eine Erweiterung erstellt, um diesen Prozess zu automatisieren. Dies funktioniert auch mit Konfigurationen für mehrere Geschäfte / Standorte. In dieser Erweiterung habe ich die CMS-Sitemap-Linkgenerierung wie folgt aktualisiert:

/**
     * Generate cms pages sitemap
     */
    $homepage = (string)Mage::getStoreConfig('web/default/cms_home_page', $storeId);
    $changefreq = (string)Mage::getStoreConfig('sitemap/page/changefreq', $storeId);
    $priority   = (string)Mage::getStoreConfig('sitemap/page/priority', $storeId);
    $collection = Mage::getResourceModel('sitemap/cms_page')->getCollection($storeId);
    foreach ($collection as $item) {
        /* Customizing sitemap generation where url key is home */
        Mage::log($item->getUrl(), NULL, 'SeoSitemap.log');
        $url = $item->getUrl();
        if ( $item->getUrl() == $homepage) {
            $url = '';
        }
        $xml = sprintf('<url><loc>%s</loc><lastmod>%s</lastmod><changefreq>%s</changefreq><priority>%.1f</priority></url>',
            htmlspecialchars($baseUrl . $url),
            $date,
            $changefreq,
            $priority
        );
        $io->streamWrite($xml);
        /* Customization ends */
    }
    unset($collection);

    $io->streamWrite('</urlset>');
    $io->streamClose();

    $this->setSitemapTime(Mage::getSingleton('core/date')->gmtDate('Y-m-d H:i:s'));
    $this->save();

    return $this;

Sie finden den gesamten Quellcode aus meinem Repository

Anish Karim
quelle