2012-10-23 137 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。所以只需選擇適合更好的事件。

相關問題