Исключите определенные продукты из Magento sitemap.xml поколение


Мне нужно убедиться, что несколько продуктов НЕ в сгенерированном файле Sitemap.xml в Magento. Я нашел пару примеров для таких вещей, как страницы CMS, но ничего для создания страниц продуктов и более 1 продукта. Я совершенно новичок в Magento

Кто-нибудь знает, как это можно сделать?

Author: sv3n, 2013-06-06

4 answers

Из коробки, нет, нет способа исключить определенные продукты из карты сайта, созданной функцией Magento Catalog -> Google Sitemap.

Если бы я собирался сделать это программно, современные версии Magento (проверенные в ветке 1.7.x, это может быть в более ранних версиях/EE) используют следующий класс модели ресурсов

Mage_Sitemap_Model_Resource_Catalog_Product

Чтобы получить список продуктов.

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

Это не стандартная модель CRUD Magento, и getCollection не возвращает коллекцию объект. Вместо этого getCollection вручную запрашивает базу данных для этих продуктов.

Если бы я собирался реализовать функциональность, которая не позволяла бы определенным продуктам отображаться на карте сайта, я бы попытался либо

  1. Класс переписывает метод getCollection, который вызывает метод parent::getCollection, а затем вручную отфильтровывает любые продукты из массива

  2. Класс перезаписывает _addFilter, который вызывает метод parent::_addfilter, а затем добавляет дополнительное предложение(предложения) WHERE в _select для исключения конкретного продукта (ов). Своего рода взлом, но это единственный метод, при котором у вас есть доступ к объекту _select, используемому для запроса базы данных. В идеале вы хотели бы иметь какой-то глобальный/статический флаг, поэтому вы добавили свое новое предложение(предложения) WHERE только один раз.

 7
Author: Alan Storm, 2013-07-30 05:18:40

Начиная с Magento 1.9.0. вы можете сделать это, не касаясь ни одного основного файла.

Вы можете наблюдать два новых события:

  • sitemap_categories_generating_before
  • sitemap_products_generating_before

Чтобы исключить продукты на основе атрибута, вы можете сделать следующее:

  1. Добавьте наблюдателя в 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. Добавьте атрибут продукта "да/нет" с именем use_in_sitemap (возможно, значение по умолчанию "да")

  3. добавьте этот атрибут во все наборы атрибутов
  4. установите для продуктов, которые вы хотите исключить, значение "нет"
  5. создайте свою карту сайта

Примечание: до версии Magento 1.9.3.0 атрибут должен быть установлен в область global.

 9
Author: sv3n, 2018-07-20 16:29:15

Для достижения этой цели вы можете сделать следующее -:

  1. Создайте атрибут для продукта, т.е. exclude_from_sitemap (Да/Нет)

  2. Перепишите класс Mage_Sitemap_Model_Resource_Catalog_Product и измените функцию getCollection, добавив фильтр к вашему новому атрибуту, т.е. исключите из карты сайта

Если вы не являетесь разработчиком, то следующий модуль может помочь в достижении вышеуказанного, но, конечно, он платный расширение

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

 3
Author: stevensagaar, 2017-08-02 11:29:26

Вы можете отключить эти продукты или установить для поля видимости значение "Не видно по отдельности". В карте сайта перечислены только включенные и видимые продукты.
Если вам нужно, чтобы эти продукты были включены, просто отключите их, создайте sitemap.xml и включите их снова.

 1
Author: Marius, 2013-06-06 21:39:20