Sitemap.xml mudar para página inicial
Pergunta
Em nossa loja Magento, o mapa do site que o Magento gera automaticamente no painel de administração em Catálogo > Google Sitemap adiciona o lar url para nossa página inicial como:
<url>
<loc>http://our-domain.com/home</loc>
<lastmod>2014-11-17</lastmod>
<changefreq>daily</changefreq>
<priority>0.2</priority>
</url>
Existe uma maneira de mudar isso para
<url>
<loc>http://our-domain.com/</loc>
<lastmod>2014-11-17</lastmod>
<changefreq>daily</changefreq>
<priority>0.2</priority>
</url>
Solução
você está recebendo esse URL porque a página inicial é uma página CMS.
No seu caso tem o identificador home
.
Para alterar esse URL, você precisa reescrever o método Mage_Sitemap_Model_Resource_Cms_Page::_prepareObject
e faça com que fique assim:
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;
}
é claro que isso não funcionará se você alterar a página inicial para outra página.Mas é uma maneira rápida de fazer isso.
Se você quiser a versão limpa você tem que verificar qual é a homepage da sua loja atual.
Para isso adicione um novo membro e método como este:
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];
}
Neste caso, você precisa modificar o getCollection
método na mesma classe.Antes $page = $this->_prepareObject($row);
Adicione isso:
if ($row[$this->getIdFieldName()] == $this->getHomepageId($store)) {
$row['url'] = '';
}
Outras dicas
Magento 1.9.0.0.adicionou dois eventos para ajustar o mapa do site XML do produto e da categoria:
sitemap_categories_generating_before
sitemap_products_generating_before
Em Mage_Sitemap_Model_Sitemap::generateXml()
eles substituíram
foreach ($collection as $item) {
com
$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) {
O mesmo para páginas de categoria, mas 20 linhas abaixo elas apenas mantiveram foreach ($collection as $item)
para páginas CMS.Eu adaptaria esse método e reescreveria/modificaria Mage_Sitemap_Model_Sitemap
para substituí-lo por ...
$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) {
Então você pode usar esse novo evento para modificar o mapa do site de suas páginas CMS:
Evento:
<sitemap_cms_pages_generating_before>
<observers>
<rename_home>
<class>[model]/observer</class>
<method>renameCmsHomePageUrl</method>
</rename_home>
</observers>
</sitemap_cms_pages_generating_before>
Observador:
public function renameCmsHomePageUrl(Varien_Event_Observer $observer)
{
$collection = $observer->getCollection();
foreach ($collection->getItems() as $item) {
if ($item->getUrl() === 'home') {
$item->setUrl('');
break;
}
}
}
Obrigado pelo código.
Usando este trecho, criei uma extensão para automatizar esse processo.Isso também funcionará com configurações de várias lojas/sites.Nesta extensão, atualizei a geração de links do Sitemap CMS da seguinte forma:
/**
* 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;
Você pode encontrar todo o código-fonte em meu repositório