Question

Sur notre Magento, stockez le plan du site que Magento génère automatiquement à partir du panneau d'administration à l'adresse Catalogue > Plan du site Google ajoute le maison URL vers notre page d'accueil comme :

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

Y a-t-il un moyen de le changer en

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

La solution

vous obtenez cette URL car la page d'accueil est une page CMS.
Dans votre cas il a l'identifiant home.
Afin de changer cette URL, vous devez réécrire la méthode Mage_Sitemap_Model_Resource_Cms_Page::_prepareObject et faites-le ressembler à ceci :

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

bien sûr, cela ne fonctionnera pas si vous modifiez la page d'accueil vers une autre page.Mais c'est un moyen rapide de le faire.
Si vous voulez la version propre, vous devez vérifier quelle est la page d'accueil de votre boutique actuelle.
Pour cela, ajoutez un nouveau membre et une méthode comme celle-ci :

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

Dans ce cas, vous devez modifier le getCollection méthode dans la même classe.Avant $page = $this->_prepareObject($row); Ajoute ça:

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

Autres conseils

Magento 1.9.0.0.ajout de deux événements pour ajuster le plan du site XML des produits et des catégories :

  • sitemap_categories_generating_before
  • sitemap_products_generating_before

Dans Mage_Sitemap_Model_Sitemap::generateXml() ils ont remplacé

    foreach ($collection as $item) {

avec

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

Idem pour les pages de catégories, mais 20 lignes en dessous elles sont juste conservées foreach ($collection as $item) pour les pages CMS.J'adapterais cette méthode et réécrirais/modifierais Mage_Sitemap_Model_Sitemap pour le remplacer par...

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

Ensuite, vous pouvez utiliser ce nouvel événement pour modifier le plan du site de vos pages CMS :

Événement:

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

Observateur:

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

Merci pour le code.

Utilisation de cet extrait, j'ai créé une extension pour automatiser ce processus.Cela fonctionnera également avec des configurations de plusieurs magasins / site.Dans cette extension, j'ai mis à jour la génération de liaison Sitemap CMS comme suit:

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

Vous pouvez trouver l'ensemble du code source de mon référentiel

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top