2012-10-23 75 views

回答

0

生成网站地图的功能是:Mage_Sitemap_Model_Sitemap::generateXml()

其执行以下操作:

  • 打开文件的读写XML头
  • 得到类别集合并将它写入sitemap文件
  • 获取产品集合并将其写入站点地图文件
  • 获取CMS集合并将其写入站点地图文件
  • 关闭网站地图xml文件

没有事件被关闭XML文件......在这种情况下,前布控,你可以扩展Mage_Sitemap_Model_Sitemap和覆盖generateXml()功能添加自定义的网址(如果这些网址不上述任何的集合:类别,产品,CMS页)

另一种方法,以您的问题是使用多个站点地图文件和一个站点地图索引文件(谷歌支持这一点:http://googlewebmastercentral.blogspot.co.uk/2006/10/multiple-sitemaps-in-same-directory.html)。在这种情况下,你可以有一个单独的模块来生成第二个xml站点地图文件。

0

的Magento确实添加了事件sitemap_products_generating_before和更高版本sitemap_categories_generating_before(我不知道什么时候,我的版本是1.9.2)。所以,如果你像我这样st this这个主题,寻找将自定义模块的页面添加到Google Sitemap的最佳方式,这对于这些事件来说是多么简单:

在我的情况中,我有一个自定义模块创建动态的“新闻”页面,所以我添加一个事件监听器到我的模块的config.xml中的<global>标签。我选择去与产品网站地图事件*:

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

,然后在我的模块的观察,我让方法addPagesToSitemap额外的项目添加到产品集合(或类别collecton,如果与去类别网站地图事件):

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

就是这样。您可以通过在目录> Google Sitemap中手动生成站点地图来进行测试。


*有些原因的Magento没有添加事件“sitemap_pages_generating_before”,所以你必须要么选择产品或类别的事件一起去。对于这两个事件,Magento都会为您的Magento配置中的&产品页面设置相应的changefreq和priority-value。所以只需选择适合更好的事件。

相关问题