Php Magento-将自定义模块添加到Google站点地图
我有定制模块(我购买或开发的),在我的商店中有前端页面。Php Magento-将自定义模块添加到Google站点地图,php,magento,magento-1.7,Php,Magento,Magento 1.7,我有定制模块(我购买或开发的),在我的商店中有前端页面。 如何在Magento生成的Google站点地图中包含这些页面 生成站点地图的函数是:Mage\u sitemap\u Model\u sitemap::generateXml() 以下哪项功能: 打开文件并写入xml头 获取类别集合并将其写入站点地图文件 获取产品集合并将其写入站点地图文件 获取CMS集合并将其写入站点地图文件 关闭站点地图xml文件 在关闭xml文件之前不会调度任何事件。。。在这种情况下,您可以扩展此Mage\u S
如何在Magento生成的Google站点地图中包含这些页面 生成站点地图的函数是:
Mage\u sitemap\u Model\u sitemap::generateXml()
以下哪项功能:
- 打开文件并写入xml头
- 获取类别集合并将其写入站点地图文件
- 获取产品集合并将其写入站点地图文件
- 获取CMS集合并将其写入站点地图文件
- 关闭站点地图xml文件
Mage\u Sitemap\u Model\u Sitemap
并覆盖generateXml()
函数,添加您自己的自定义URL(如果这些URL不在上述任何集合中:类别、产品、cms页面)
解决问题的另一种方法是使用多个站点地图文件和一个站点地图索引文件(Google支持此:)。在这种情况下,您可以使用一个单独的模块来生成第二个xml站点地图文件。Magento在更高版本中添加了事件sitemap\u products\u generating\u和sitemap\u categories\u generating\u before(我不知道什么时候,我的版本是1.9.2)。因此,如果你像我一样在这个帖子上苦苦挣扎,寻找将自定义模块的页面添加到Google Sitemap的最佳方法,那么这些事件就是多么简单: 在我的例子中,我有一个自定义模块,用于创建动态“新闻”页面,因此我在模块的config.xml中的标记中添加了一个事件侦听器。我选择参加产品站点地图活动*:
<events>
<sitemap_products_generating_before>
<observers>
<{your_unique_event_observer_name}>
<class>{Brand}_{Module}_Model_Observer</class>
<method>addPagesToSitemap</method>
</{your_unique_event_observer_name}>
</observers>
</sitemap_products_generating_before>
</events>
就这样。您可以通过在Catalog>GoogleSitemap下手动生成站点地图来测试它
*出于某些原因,Magento没有添加“sitemap\u pages\u generating\u before”事件,因此您必须选择产品或类别的事件。对于这两个事件,Magento分别采用Magento配置中类别和产品页面的changefreq-和priority值。因此,只需选择值更适合的事件
class {Brand}_{Module}_Model_Observer
{
function addPagesToSitemap(Varien_Event_Observer $observer){
$sitemapItems = $observer->getEvent()->getCollection()->getItems();
// Get your module's page collection including their urls
// Adjust the following lines to your needs
$collection = Mage::getModel('{brand}_{module}/pages')->getCollection()
->addFieldToSelect(array('page_id','url'))
->addFieldToFilter('display', 1);
// My module stores the page path separately,
// you might don't need this:
$modulePagePath = Mage::helper('{my-modules-helper}')->getNewsPath();
foreach($collection as $_item){
$varienObject = new Varien_Object();
// We don't want to override
// any existing product/category items
$uniqueId = '{module}'.$_item->getPageId();
$varienObject->setId($uniqueId);
// You might want to adjust this if your item
// stores the complete url. Don't add the base url tho,
// Mage_Sitemap_Model_Sitemap::generateXml adds it
$varienObject->setUrl($modulePagePath . DS . $_item->getUrl());
$sitemapItems[$uniqueId] = $varienObject;
}
$observer->getEvent()->getCollection()->setItems($sitemapItems);
return $this;
}
}