Sitemap.xmlのホームを変更


7

Magentoストアでは、Magentoがカタログの管理パネルから自動的に生成するサイトマップ> Googleサイトマップにより、次のようにホームページにホーム URLが追加されます。

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

に変更する方法はありますか

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

回答:


9

ホームページはCMSページなので、そのURLを取得しています。
あなたの場合、それは識別子を持っていますhome
そのURLを変更するには、メソッドを書き直して次のようにする必要がありますMage_Sitemap_Model_Resource_Cms_Page::_prepareObject

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;
}

もちろん、ホームページを別のページに変更した場合、これは機能しません。しかし、それはそれを行う迅速な方法です。
クリーンバージョンが必要な場合は、現在のストアのhompageを確認する必要があります。
これには、次のような新しいメンバーとメソッドを追加します。

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];
}

この場合、getCollection同じクラスのメソッドを変更する必要があります。$page = $this->_prepareObject($row);これを追加する前に:

if ($row[$this->getIdFieldName()] == $this->getHomepageId($store)) {
    $row['url'] = '';
}

したがってapp/code/core/Mage/Sitemap/Model/Resource/Cms/Page.phpここで
Holly

@CreedBratton。うん...それは私が言っていることです。
マリウス

すばらしい-あなたの助けに感謝します。ここで同様の質問があります。
ホリー

@Marius私はこれを試したところ、値がカスタムログファイルに正しく記録されていることがわかりましたが、mysite.com / sitemap / sitemap.xmlで確認すると、mysite.comではなくmysite.com/homeがまだ表示されています。キャッシュのクリア/コンパイルの実行などの必要性はありますか?
Anurag Khandelwal 2017年

3

Magento 1.9.0.0。製品とカテゴリのXMLサイトマップを調整する2つのイベントを追加しました:

  • sitemap_categories_generating_before
  • sitemap_products_generating_before

ではMage_Sitemap_Model_Sitemap::generateXml()、彼らは置き換え

    foreach ($collection as $item) {

    $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) {

カテゴリページについても同じですがforeach ($collection as $item)、CMSページ用に20行下が保持されています。私はこの方法を適合させ、Mage_Sitemap_Model_Sitemapそれを置き換えるために書き換え/変更します...

    $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) {

次に、その新しいイベントを使用して、CMSページのサイトマップを変更できます。

イベント:

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

観察者:

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

2

コードをありがとう。

このスニペットを使用して、このプロセスを自動化する拡張機能を作成しました。これはマルチストア/サイト構成でも機能します。この拡張機能では、CMSサイトマップリンクの生成を次のように更新しました。

/**
     * 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;

私のリポジトリからソースコード全体を見つけることができます

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.