Escludere determinati prodotti dalla generazione sitemap.xml di Magento


14

Devo assicurarmi che una manciata di prodotti NON si trovi nel Sitemap.xmlfile generato in Magento. Ho trovato un paio di esempi per cose come CMS Pages ma niente per fare pagine di prodotti e più di 1 prodotto. Sono nuovo di zecca per Magento

Qualcuno sa come si può fare?

Risposte:


7

No, non c'è modo di escludere determinati prodotti dalla sitemap generata dalla Catalog -> Google Sitemapfunzione di Magento .

Se avessi intenzione di farlo programmaticamente, le versioni moderne di Magento (verificate nel ramo 1.7.x, questo potrebbe trovarsi nelle versioni precedenti / EE) utilizzare la seguente classe del modello di risorsa

Mage_Sitemap_Model_Resource_Catalog_Product

per recuperare un elenco di prodotti.

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

Questo non è un modello CRUD Magento standard e getCollectionnon restituisce un oggetto collection. Al contrario, getCollectioninterroga manualmente il database per questi prodotti.

Se avessi intenzione di implementare funzionalità che impedivano la visualizzazione di determinati prodotti nella mappa del sito, proverei a farlo

  1. Una classe riscrive il getCollectionmetodo che chiama il parent::getCollection, quindi filtra manualmente tutti i prodotti dall'array

  2. Una riscrittura di classe su _addFiltercui chiama il metodo parent :: _ addFilter e quindi aggiunge una o più clausole WHERE al _selectper escludere i prodotti specifici. Ordinamento di un hack, ma è l'unico metodo in cui hai accesso _selectall'oggetto utilizzato per interrogare il database. Idealmente, dovresti avere una sorta di flag globale / statico, quindi hai aggiunto le tue nuove clausole WHERE solo una volta.


8

Dal Magento 1.9.0. puoi farlo senza toccare alcun file core.

Ci sono due nuovi eventi che puoi osservare:

  • sitemap_categories_generating_before
  • sitemap_products_generating_before

Per escludere i prodotti in base all'attributo, puoi fare questo:

  1. aggiungi un osservatore a sitemap_products_generating_before

    Codice app \ \ comunità \ 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>

    Codice app \ \ comunità \ My \ Module \ modello \ 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. aggiungere un attributo del prodotto "sì / no" denominato use_in_sitemap(forse valore predefinito "sì")

  3. aggiungi questo attributo a tutti i set di attributi
  4. impostare i prodotti che si desidera escludere su "no"
  5. genera la tua sitemap

Nota : fino a Magento 1.9.3.0 l'attributo dovrebbe essere impostato su globalscope.


3

Per raggiungere questo obiettivo è possibile effettuare le seguenti operazioni:

  1. Creare un attributo rispetto al prodotto, ad es. exclude_from_sitemap(Sì / No)

  2. Sovrascrivi la Mage_Sitemap_Model_Resource_Catalog_Productclasse e modifica la getCollectionfunzione aggiungendo il filtro al tuo nuovo attributo, ovvero escludi dalla Sitemap

Se non sei uno sviluppatore, il modulo seguente può aiutarti a raggiungere quanto sopra ma ovviamente è un'estensione a pagamento

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


1

Puoi disabilitare quei prodotti o impostare il campo di visibilità su "Non visibile individualmente". Nella Sitemap sono elencati solo i prodotti abilitati e visibili.
Se hai bisogno di quei prodotti abilitati, basta disabilitarli, creare sitemap.xml e abilitarli di nuovo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.