Excluir ciertos productos de la generación de Magento sitemap.xml

14

Necesito asegurarme de que un puñado de productos NO estén en el Sitemap.xmlarchivo generado en Magento. Encontré un par de ejemplos para cosas como páginas de CMS, pero nada para hacer páginas de productos, y más de 1 producto. Soy nuevo en Magento

Alguien sabe cómo se puede hacer esto?

JasonDavis
fuente

Respuestas:

7

Fuera de la caja, no, no hay forma de excluir ciertos productos del mapa del sitio generado por la Catalog -> Google Sitemapfunción de Magento .

Si iba a hacer esto programáticamente, las versiones modernas de Magento (marcadas en la rama 1.7.x, esto podría estar en versiones anteriores / EE) usan la siguiente clase de modelo de recurso

Mage_Sitemap_Model_Resource_Catalog_Product

para buscar una lista de productos.

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

Este no es un modelo estándar de Magento CRUD y getCollectionno devuelve un objeto de colección. En su lugar, getCollectionconsulta manualmente la base de datos para estos productos.

Si fuera a implementar una funcionalidad que impidiera que ciertos productos aparecieran en el mapa del sitio, intentaría

  1. Una clase reescribe el getCollectionmétodo que llama a parent::getCollection, y luego filtra manualmente cualquier producto de la matriz

  2. Una reescritura de clase en la _addFilterque se llama al método principal :: _ addFilter, y luego agrega una o más cláusulas WHERE adicionales _selectpara excluir los productos específicos. Es un truco, pero es el único método en el que tiene acceso al _selectobjeto utilizado para consultar la base de datos. Idealmente, desearía tener algún tipo de indicador global / estático, por lo que solo agregó sus nuevas cláusulas WHERE una vez.

Alan Storm
fuente
8

Desde Magento 1.9.0. puede hacer esto sin tocar ningún archivo central.

Hay dos nuevos eventos que puede observar:

  • sitemap_categories_generating_before
  • sitemap_products_generating_before

Para excluir productos basados ​​en atributos, puede hacer esto:

  1. agregar un observador a 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. agregue un atributo de producto "sí / no" nombrado use_in_sitemap(tal vez el valor predeterminado "sí")

  3. agregue este atributo a todos los conjuntos de atributos
  4. establezca los productos que desea excluir en "no"
  5. genera tu mapa del sitio

Nota : hasta Magento 1.9.3.0, el atributo debe establecerse en globalalcance.

sv3n
fuente
3

Para lograr esto, puede hacer lo siguiente:

  1. Crear un atributo contra el producto, es decir exclude_from_sitemap(Sí / No)

  2. Sobrescriba la Mage_Sitemap_Model_Resource_Catalog_Productclase y modifique la getCollectionfunción agregando un filtro a su nuevo atributo, es decir, excluya del mapa del sitio

Si no es desarrollador, el siguiente módulo puede ayudarlo a lograr lo anterior, pero por supuesto es una extensión paga

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

stevensagaar
fuente
1

Puede deshabilitar esos productos o establecer el campo de visibilidad en 'No visible individualmente'. En el mapa del sitio solo se enumeran los productos habilitados y visibles.
Si necesita habilitar esos productos, deshabilítelos, cree sitemap.xml y vuelva a habilitarlos.

Marius
fuente