我需要的产品肯定有极少数是不是在产生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_before
sitemap_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之前,应将属性设置为global
scope。
为此,您可以执行以下操作:
为产品创建一个属性,即exclude_from_sitemap
(是/否)
通过向新属性添加过滤器来覆盖Mage_Sitemap_Model_Resource_Catalog_Product
类并修改getCollection
功能,即从站点地图中排除
如果您不是开发人员,那么以下模块可以帮助实现上述目标,但是当然需要付费
http://www.scommerce-mage.co.uk/magento-extensions/magento-google-site-map-exclusion.html