Magento 1.9.0.0. đã thêm hai sự kiện để điều chỉnh sơ đồ trang web XML của sản phẩm và danh mục:
sitemap_categories_generating_before
sitemap_products_generating_before
Trong Mage_Sitemap_Model_Sitemap::generateXml()
họ thay thế
foreach ($collection as $item) {
với
$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) {
Tương tự cho các trang danh mục, nhưng 20 dòng bên dưới chúng chỉ giữ foreach ($collection as $item)
cho các trang CMS. Tôi sẽ điều chỉnh phương pháp này và viết lại / sửa đổi Mage_Sitemap_Model_Sitemap
để thay thế nó bằng ...
$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) {
Sau đó, bạn có thể sử dụng sự kiện mới đó để sửa đổi sơ đồ trang web CMS của mình:
Biến cố:
<sitemap_cms_pages_generating_before>
<observers>
<rename_home>
<class>[model]/observer</class>
<method>renameCmsHomePageUrl</method>
</rename_home>
</observers>
</sitemap_cms_pages_generating_before>
Người quan sát:
public function renameCmsHomePageUrl(Varien_Event_Observer $observer)
{
$collection = $observer->getCollection();
foreach ($collection->getItems() as $item) {
if ($item->getUrl() === 'home') {
$item->setUrl('');
break;
}
}
}
app/code/core/Mage/Sitemap/Model/Resource/Cms/Page.php
như được mô tả ở đây