从Magento sitemap.xml生成中排除某些产品


14

我需要的产品肯定有极少数是不是在产生Sitemap.xml在Magento文件。我发现了一些类似CMS Pages的示例,但没有做产品页面的事,还有1个产品。我是Magento的新手

有人知道该怎么做吗?

Answers:


7

开箱即用,不行,无法从Magento的Catalog -> Google Sitemap功能生成的站点地图中排除某些产品。

如果我要以编程方式进行此操作,则现代版本的Magento(在1.7.x分支中进行了检查,可能在早期版本/ EE版本中已存在)使用以下资源模型类

Mage_Sitemap_Model_Resource_Catalog_Product

获取产品列表。

#File: app/code/core/Mage/Sitemap/Model/Sitemap.php
$collection = Mage::getResourceModel('sitemap/catalog_product')->getCollection($storeId);

这不是标准的Magento CRUD模型,并且getCollection不会返回集合对象。而是,getCollection手动查询数据库中的这些产品。

如果我要实现阻止某些产品出现在站点地图中的功能,则尝试

  1. 一个类重写了getCollection调用的方法parent::getCollection,然后手动从数组中过滤掉任何乘积

  2. 重写_addFilter其类的方法,该类将调用parent :: _ addFilter方法,然后向中添加一个额外的WHERE子句_select以排除特定的产品。有点骇人听闻,但这是您有权访问_select用于查询数据库的对象的唯一方法。理想情况下,您希望具有某种全局/静态标志,因此您只需添加一次新的WHERE子句。


8

自Magento 1.9.0起。您无需触摸任何核心文件即可执行此操作。

您可以观察到两个新事件:

  • sitemap_categories_generating_before
  • sitemap_products_generating_before

要基于属性排除产品,您可以执行以下操作:

  1. 将观察者添加到 sitemap_products_generating_before

    app \ code \ community \ My \ Module \ etc \ config.xml

        <events>
            <sitemap_products_generating_before>
                <observers>
                    <my_module>
                        <class>my_module/observer</class>
                        <method>excludeProductsFromSitemap</method>
                    </my_module>
                </observers>
            </sitemap_products_generating_before>
        </events>

    app \ code \ community \ My \ Module \ Model \ Observer.php

    public function excludeProductsFromSitemap(Varien_Event_Observer $observer)
    {
        $collection = $observer->getCollection();
        $items = $collection->getItems();
    
        $excludeIds = Mage::getModel('catalog/product')
            ->getCollection()
            ->setStoreId($observer->getStoreId()) # requieres Magento 1.9.3.0
            ->addAttributeToFilter('use_in_sitemap', 0)
            ->getAllIds();
    
        foreach ($excludeIds as $id) {
            unset($items[$id]);
        }
    
        $collection->setItems($items);
    }
  2. 添加一个名为“是/否”的产品属性use_in_sitemap(也许默认值为“是”)

  3. 将此属性添加到所有属性集
  4. 将您要排除的产品设置为“否”
  5. 生成您的站点地图

注意:在Magento 1.9.3.0之前,应将属性设置为globalscope。



1

您可以禁用这些产品,或将可见性字段设置为“不可见”。在站点地图中,仅列出了已启用和可见的产品。
如果需要启用这些产品,只需禁用它们,构建sitemap.xml并再次启用它们。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.