Sitemap.xml changer d'accueil
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>
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