Schließen Sie bestimmte Produkte aus der Generierung von Magento sitemap.xml aus

14

Ich muss sicherstellen, dass eine Handvoll Produkte NICHT in der Sitemap.xmlin Magento generierten Datei enthalten sind . Ich habe ein paar Beispiele für Dinge wie CMS-Seiten gefunden, aber nichts für Produktseiten und mehr als 1 Produkt. Ich bin ganz neu bei Magento

Weiß jemand, wie das geht?

JasonDavis
quelle

Antworten:

7

Nein, es gibt keine Möglichkeit, bestimmte Produkte aus der von Magento erstellten Sitemap auszuschließen Catalog -> Google Sitemap.

Wenn ich dies programmgesteuert ausführen wollte, verwenden moderne Versionen von Magento (in der 1.7.x-Verzweigung aktiviert, möglicherweise in früheren / EE-Versionen vorhanden) die folgende Ressourcenmodellklasse

Mage_Sitemap_Model_Resource_Catalog_Product

um eine Produktliste abzurufen.

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

Dies ist kein standardmäßiges Magento CRUD-Modell und getCollectiongibt kein Sammlungsobjekt zurück. getCollectionFragen Sie stattdessen die Datenbank für diese Produkte manuell ab.

Wenn ich Funktionen implementieren würde, die verhindern, dass bestimmte Produkte in der Sitemap angezeigt werden, würde ich es auch versuchen

  1. Eine Klasse schreibt die aufrufende getCollectionMethode um parent::getCollectionund filtert dann manuell alle Produkte aus dem Array heraus

  2. Eine Klassenumschreibung, bei _addFilterder die übergeordnete Methode :: _addFilter aufgerufen und dann eine zusätzliche WHERE-Klausel _selectzum Ausschließen der bestimmten Produkte hinzugefügt wird . Eine Art Hack, aber es ist die einzige Methode, bei der Sie Zugriff auf das _selectObjekt haben, mit dem die Datenbank abgefragt wird. Idealerweise möchten Sie eine Art globales / statisches Flag haben, sodass Sie Ihre neuen WHERE-Klauseln nur einmal hinzugefügt haben.

Alan Storm
quelle
8

Seit Magento 1.9.0. Sie können dies tun, ohne eine Kerndatei zu berühren.

Es gibt zwei neue Ereignisse, die Sie beobachten können:

  • sitemap_categories_generating_before
  • sitemap_products_generating_before

So schließen Sie Produkte basierend auf Attributen aus:

  1. Beobachter hinzufügen zu sitemap_products_generating_before

    app \ code \ community \ Mein \ Modul \ 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 \ Mein \ Modul \ 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. Produktattribut "yes / no" mit dem Namen hinzufügen use_in_sitemap(möglicherweise Standardwert "yes")

  3. Fügen Sie dieses Attribut allen Attributmengen hinzu
  4. Setzen Sie die Produkte, die Sie ausschließen möchten, auf "Nein".
  5. Generieren Sie Ihre Sitemap

Hinweis : Bis zu Magento 1.9.3.0 sollte das Attribut auf globalscope gesetzt sein.

sv3n
quelle
3

Um dies zu erreichen, können Sie Folgendes tun:

  1. Erstellen Sie ein Attribut für das Produkt, dh exclude_from_sitemap(Ja / Nein)

  2. Überschreiben Sie die Mage_Sitemap_Model_Resource_Catalog_ProductKlasse und ändern Sie die getCollectionFunktion, indem Sie Ihrem neuen Attribut einen Filter hinzufügen, dh von der Sitemap ausschließen

Wenn Sie kein Entwickler sind, kann das folgende Modul dazu beitragen, das oben Genannte zu erreichen, aber natürlich ist es eine kostenpflichtige Erweiterung

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

Stevensagaar
quelle
1

Sie können diese Produkte deaktivieren oder das Sichtbarkeitsfeld auf "Nicht einzeln sichtbar" setzen. In der Sitemap werden nur aktivierte und sichtbare Produkte aufgelistet.
Wenn Sie diese Produkte aktivieren müssen, deaktivieren Sie sie einfach, erstellen Sie sitemap.xml und aktivieren Sie sie erneut.

Marius
quelle