답변:
Magento의 Catalog -> Google Sitemap
기능으로 생성 된 사이트 맵에서 특정 제품을 제외 할 수있는 방법은 없습니다 .
프로그래밍 방식 으로이 작업을 수행하려는 경우 1.7.x 분기에서 확인 된 Magento의 최신 버전은 이전 / 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 메소드를 호출 한 다음 _select
특정 WHERE 절을 추가 하여 특정 제품을 제외시키는 클래스를 다시 작성 합니다 . 일종의 해킹이지만 _select
데이터베이스를 쿼리하는 데 사용되는 객체에 액세스 할 수있는 유일한 방법 입니다. 이상적으로는 일종의 전역 / 정적 플래그를 원하므로 새 WHERE 절을 한 번만 추가했습니다.
마 젠토 이후 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);
}
이름이 "yes / no"인 제품 속성 추가 use_in_sitemap
(기본값은 "yes"일 수 있음)
참고 : Magento 1.9.3.0까지 속성을 global
범위 로 설정해야합니다 .
이를 달성하기 위해 다음을 수행 할 수 있습니다.
제품에 대한 속성 생성 exclude_from_sitemap
(예 / 아니요)
새 속성에 필터를 추가하여 Mage_Sitemap_Model_Resource_Catalog_Product
클래스를 덮어 쓰고 getCollection
함수를 수정 합니다 (예 : 사이트 맵에서 제외)
개발자가 아닌 경우 다음 모듈은 위의 목표를 달성하는 데 도움이 될 수 있지만 당연히 연장됩니다.
http://www.scommerce-mage.co.uk/magento-extensions/magento-google-site-map-exclusion.html