Wyklucz niektóre produkty z generowania Sitemap.xml Magento

14

Muszę się upewnić, że garść produktów NIE znajduje się w wygenerowanym Sitemap.xmlpliku w Magento. Znalazłem kilka przykładów takich rzeczy jak Strony CMS, ale nic do robienia stron produktów i więcej niż 1 produkt. Jestem nowy w Magento

Czy ktoś wie, jak to zrobić?

JasonDavis
źródło

Odpowiedzi:

7

Po wyjęciu z pudełka nie, nie można wykluczyć niektórych produktów z mapy witryny wygenerowanej przez Catalog -> Google Sitemapfunkcję Magento .

Gdybym miał zamiar zrobić to programowo, nowoczesne wersje Magento (zaznaczone w gałęzi 1.7.x, mogą być dostępne we wcześniejszych wersjach / EE) używają następującej klasy modelu zasobów

Mage_Sitemap_Model_Resource_Catalog_Product

aby pobrać listę produktów.

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

To nie jest standardowy model CRUD Magento i getCollectionnie zwraca obiektu kolekcji. Zamiast tego getCollectionręcznie odpytuje bazę danych dla tych produktów.

Gdybym zamierzał wdrożyć funkcje, które zapobiegałyby pojawianiu się niektórych produktów na mapie witryny, spróbowałbym to zrobić

  1. Klasa przepisała getCollectionmetodę, która wywołuje parent::getCollection, a następnie ręcznie odfiltrowuje wszystkie produkty z tablicy

  2. Przepisanie klas, w _addFilterktórym wywołuje metodę parent :: _ addFilter, a następnie dodaje dodatkową klauzulę WHERE _selectdo wykluczenia określonych produktów. Coś w rodzaju włamania, ale jest to jedyna metoda, w której masz dostęp do _selectobiektu używanego do zapytania do bazy danych. Najlepiej byłoby mieć jakąś flagę globalną / statyczną, więc nowe klauzule WHERE dodawano tylko raz.

Alan Storm
źródło
8

Od Magento 1.9.0. możesz to zrobić bez dotykania żadnego podstawowego pliku.

Istnieją dwa nowe wydarzenia, które możesz obserwować:

  • sitemap_categories_generating_before
  • sitemap_products_generating_before

Aby wykluczyć produkty oparte na atrybutach, możesz to zrobić:

  1. dodaj obserwatora do 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. dodaj atrybut produktu „tak / nie” o nazwie use_in_sitemap(może wartość domyślna „tak”)

  3. dodaj ten atrybut do wszystkich zestawów atrybutów
  4. ustaw produkty, które chcesz wykluczyć, na „nie”
  5. wygeneruj mapę witryny

Uwaga : do Magento 1.9.3.0 atrybut należy ustawić na globalzakres.

sv3n
źródło
3

Aby to osiągnąć, możesz wykonać następujące czynności:

  1. Utwórz atrybut względem produktu, tj. exclude_from_sitemap(Tak / Nie)

  2. Zastąp Mage_Sitemap_Model_Resource_Catalog_Productklasę i zmodyfikuj getCollectionfunkcję, dodając filtr do nowego atrybutu, tj. Wyklucz z mapy witryny

Jeśli nie jesteś programistą, poniższy moduł może pomóc w osiągnięciu powyższego, ale oczywiście jest to płatne przedłużenie

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

stevensagaar
źródło
1

Możesz wyłączyć te produkty lub ustawić pole widoczności na „Niewidoczne indywidualnie”. W mapie witryny wymienione są tylko włączone i widoczne produkty.
Jeśli chcesz włączyć te produkty, po prostu wyłącz je, skompiluj sitemap.xml i włącz je ponownie.

Marius
źródło