Excluir determinados produtos da geração Magento sitemap.xml

14

Preciso garantir que um punhado de produtos NÃO esteja no Sitemap.xmlarquivo gerado no Magento. Encontrei alguns exemplos de coisas como páginas do CMS, mas nada para fazer páginas de produtos e mais de um produto. Eu sou novo em Magento

Alguém sabe como isso pode ser feito?

JasonDavis
fonte

Respostas:

7

Pronto, não, não há como excluir determinados produtos do mapa do site gerado pelo Catalog -> Google Sitemaprecurso do Magento .

Se eu fosse fazer isso programaticamente, as versões modernas do Magento (verificadas na ramificação 1.7.x, isso pode estar presente nas versões anteriores / EE) usam a seguinte classe de modelo de recurso

Mage_Sitemap_Model_Resource_Catalog_Product

para buscar uma lista de produtos.

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

Este não é um modelo CRUD Magento padrão e getCollectionnão retorna um objeto de coleção. Em vez disso, getCollectionconsulta manualmente o banco de dados para esses produtos.

Se eu fosse implementar uma funcionalidade que impedisse a exibição de certos produtos no mapa do site, tentaria

  1. Uma classe reescreve o getCollectionmétodo que chama o parent::getCollectione, em seguida, filtra manualmente todos os produtos da matriz

  2. Uma classe reescrita na _addFilterqual chama o método parent :: _ addFilter e, em seguida, adiciona uma (s) cláusula (s) WHERE adicional _selectpara excluir o (s) produto (s) específico (s). É uma espécie de hack, mas é o único método em que você tem acesso ao _selectobjeto usado para consultar o banco de dados. Idealmente, você gostaria de ter algum tipo de sinalizador global / estático para adicionar apenas suas novas cláusulas WHERE uma vez.

Alan Storm
fonte
8

Desde o Magento 1.9.0. você pode fazer isso sem tocar em nenhum arquivo principal.

Existem dois novos eventos que você pode observar:

  • sitemap_categories_generating_before
  • sitemap_products_generating_before

Para excluir produtos com base no atributo, você pode fazer isso:

  1. adicione um observador para 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. adicione um atributo de produto "yes / no" chamado use_in_sitemap(talvez o valor padrão "yes")

  3. inclua esse atributo em todos os conjuntos de atributos
  4. defina os produtos que você deseja excluir como "não"
  5. gere seu sitemap

Nota : até Magento 1.9.3.0, o atributo deve ser definido como globalescopo.

sv3n
fonte
3

Para conseguir isso, você pode fazer o seguinte -:

  1. Crie um atributo em relação ao produto, ou seja exclude_from_sitemap(Sim / Não)

  2. Substituir Mage_Sitemap_Model_Resource_Catalog_Productclasse e modificar getCollectionfunção adicionando filtro ao seu novo atributo, ou seja, excluir do mapa do site

Se você não é um desenvolvedor, o módulo a seguir pode ajudar a alcançar o acima, mas é claro que é uma extensão paga

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

stevensagaar
fonte
1

Você pode desativar esses produtos ou definir o campo de visibilidade como 'Não visível individualmente'. No mapa do site, apenas os produtos ativados e visíveis são listados.
Se você precisar desses produtos ativados, desative-os, construa sitemap.xml e ative-os novamente.

Marius
fonte