我需要的产品肯定有极少数是不是在产生Sitemap.xml在Magento文件。我发现了一些类似CMS Pages的示例,但没有做产品页面的事,还有1个产品。我是Magento的新手
有人知道该怎么做吗?
我需要的产品肯定有极少数是不是在产生Sitemap.xml在Magento文件。我发现了一些类似CMS Pages的示例,但没有做产品页面的事,还有1个产品。我是Magento的新手
有人知道该怎么做吗?
Answers:
开箱即用,不行,无法从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手动查询数据库中的这些产品。
如果我要实现阻止某些产品出现在站点地图中的功能,则尝试
一个类重写了getCollection调用的方法parent::getCollection,然后手动从数组中过滤掉任何乘积
重写_addFilter其类的方法,该类将调用parent :: _ addFilter方法,然后向中添加一个额外的WHERE子句_select以排除特定的产品。有点骇人听闻,但这是您有权访问_select用于查询数据库的对象的唯一方法。理想情况下,您希望具有某种全局/静态标志,因此您只需添加一次新的WHERE子句。
自Magento 1.9.0起。您无需触摸任何核心文件即可执行此操作。
您可以观察到两个新事件:
sitemap_categories_generating_beforesitemap_products_generating_before要基于属性排除产品,您可以执行以下操作:
将观察者添加到 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);
}添加一个名为“是/否”的产品属性use_in_sitemap(也许默认值为“是”)
注意:在Magento 1.9.3.0之前,应将属性设置为globalscope。
为此,您可以执行以下操作:
为产品创建一个属性,即exclude_from_sitemap(是/否)
通过向新属性添加过滤器来覆盖Mage_Sitemap_Model_Resource_Catalog_Product类并修改getCollection功能,即从站点地图中排除
如果您不是开发人员,那么以下模块可以帮助实现上述目标,但是当然需要付费
http://www.scommerce-mage.co.uk/magento-extensions/magento-google-site-map-exclusion.html