Виключіть певні продукти з покоління Magento sitemap.xml


14

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

Хтось знає, як це можна зробити?

Відповіді:


7

Ні, ящик не має можливості виключати певні продукти з мапи сайту, створених функцією 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);

Це не стандартна модель Magento CRUD і getCollectionне повертає об'єкт колекції. Натомість, getCollectionвручну запитує базу даних для цих продуктів.

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

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

  2. _addFilterПерепишіть клас, у якому викликає метод батьків: _ _ addFilter, а потім додає додаткові пункти WHERE до, _selectщоб виключити конкретні продукти. Сортування хак, але це єдиний метод, коли ви маєте доступ до _selectоб'єкта, який використовується для запиту бази даних. В ідеалі ви хочете мати якийсь глобальний / статичний прапор, тому ви лише один раз додали новий пункт WHERE.


8

З Magento 1.9.0. це можна зробити, не торкаючись жодного основного файлу.

Ви можете спостерігати два нові події:

  • sitemap_categories_generating_before
  • sitemap_products_generating_before

Щоб виключити продукти на основі атрибуту, ви можете зробити це:

  1. додати спостерігача до sitemap_products_generating_before

    додаток \ код \ спільнота \ Мій \ Модуль \ тощо \ 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>

    додаток \ код \ спільнота \ Мій \ Модуль \ Модель \ 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області застосування.


3

Для цього можна зробити наступне:

  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


1

Ви можете відключити ці продукти або встановити поле видимості на "Не видно окремо". У мапі сайту вказані лише активовані та видимі продукти.
Якщо вам потрібні ці продукти, увімкніть їх, просто вимкніть їх, складіть sitemap.xml та включіть їх знову.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.