Magento sitemap.xml 생성에서 특정 제품 제외


14

나는 제품의 확실히 소수가해야 하지 생성에 Sitemap.xml젠토에서 파일. CMS 페이지와 같은 제품에 대한 몇 가지 예를 찾았지만 제품 페이지에는 사용하지 않으며 제품은 1 개 이상 있습니다. 나는 마 젠토를 처음 접한다

아무도 이것이 어떻게 할 수 있는지 알고 있습니까?

답변:


7

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이러한 제품에 대한 데이터베이스를 수동으로 쿼리하십시오.

특정 제품이 사이트 맵에 표시되지 않도록하는 기능을 구현하려는 경우 다음 중 하나를 시도합니다.

  1. 클래스는를 getCollection호출 하는 메소드를 다시 작성한 parent::getCollection다음 배열에서 모든 제품을 수동으로 필터링합니다.

  2. _addFilterparent :: _ addFilter 메소드를 호출 한 다음 _select특정 WHERE 절을 추가 하여 특정 제품을 제외시키는 클래스를 다시 작성 합니다 . 일종의 해킹이지만 _select데이터베이스를 쿼리하는 데 사용되는 객체에 액세스 할 수있는 유일한 방법 입니다. 이상적으로는 일종의 전역 / 정적 플래그를 원하므로 새 WHERE 절을 한 번만 추가했습니다.


8

마 젠토 이후 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. 이름이 "yes / no"인 제품 속성 추가 use_in_sitemap(기본값은 "yes"일 수 있음)

  3. 이 속성을 모든 속성 세트에 추가
  4. 제외하려는 제품을 "아니오"로 설정
  5. 사이트 맵 생성

참고 : Magento 1.9.3.0까지 속성을 global범위 로 설정해야합니다 .


3

이를 달성하기 위해 다음을 수행 할 수 있습니다.

  1. 제품에 대한 속성 생성 exclude_from_sitemap(예 / 아니요)

  2. 새 속성에 필터를 추가하여 Mage_Sitemap_Model_Resource_Catalog_Product클래스를 덮어 쓰고 getCollection함수를 수정 합니다 (예 : 사이트 맵에서 제외)

개발자가 아닌 경우 다음 모듈은 위의 목표를 달성하는 데 도움이 될 수 있지만 당연히 연장됩니다.

http://www.scommerce-mage.co.uk/magento-extensions/magento-google-site-map-exclusion.html


1

해당 제품을 비활성화하거나 가시성 필드를 '개별적으로 표시되지 않음'으로 설정할 수 있습니다. 사이트 맵에는 활성화 된 제품 만 표시됩니다.
해당 제품을 활성화해야하는 경우 비활성화하고 sitemap.xml을 빌드 한 후 다시 활성화하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.