Kecualikan produk tertentu dari generasi Magento sitemap.xml

14

Saya perlu memastikan beberapa produk TIDAK dalam Sitemap.xmlfile yang dihasilkan di Magento. Saya menemukan beberapa contoh untuk hal-hal seperti CMS Pages tetapi tidak melakukan halaman produk, dan lebih dari 1 produk. Saya baru mengenal Magento

Adakah yang tahu bagaimana ini bisa dilakukan?

JasonDavis
sumber

Jawaban:

7

Di luar kotak, tidak, tidak ada cara untuk mengecualikan produk tertentu dari sitemap yang dihasilkan oleh Catalog -> Google Sitemapfitur Magento .

Jika saya akan melakukan hal ini secara terprogram, versi modern Magento (dicentang di cabang 1.7.x, ini mungkin ada di versi sebelumnya / EE) menggunakan kelas model sumber daya berikut

Mage_Sitemap_Model_Resource_Catalog_Product

untuk mengambil daftar produk.

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

Ini bukan model Magento CRUD standar, dan getCollectiontidak mengembalikan objek koleksi. Sebagai gantinya, getCollectionsecara manual kueri basis data untuk produk ini.

Jika saya akan mengimplementasikan fungsionalitas yang mencegah produk tertentu muncul di peta situs, saya akan mencoba keduanya

  1. Kelas menulis ulang getCollectionmetode yang memanggil parent::getCollection, dan kemudian secara manual menyaring semua produk dari array

  2. Kelas menulis ulang _addFilteryang memanggil metode parent :: _ addFilter, dan kemudian menambahkan klausa WHERE tambahan ke _selectuntuk mengecualikan produk spesifik. Semacam hack, tetapi ini satu-satunya metode di mana Anda memiliki akses ke _selectobjek yang digunakan untuk query database. Idealnya Anda ingin memiliki semacam bendera global / statis sehingga Anda hanya menambahkan klausa WHERE baru Anda satu kali.

Alan Storm
sumber
8

Sejak Magento 1.9.0. Anda dapat melakukan ini tanpa menyentuh file inti apa pun.

Ada dua acara baru yang dapat Anda amati:

  • sitemap_categories_generating_before
  • sitemap_products_generating_before

Untuk mengecualikan produk berdasarkan atribut, Anda dapat melakukan ini:

  1. tambahkan pengamat ke 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. tambahkan atribut produk "ya / tidak" bernama use_in_sitemap(mungkin nilai default "ya")

  3. tambahkan atribut ini ke semua set atribut
  4. atur produk yang ingin Anda kecualikan menjadi "tidak"
  5. buat peta situs Anda

Catatan : sampai Magento 1.9.3.0 atribut harus disetel ke globalruang lingkup.

sv3n
sumber
3

Untuk mencapai ini, Anda dapat melakukan hal berikut -:

  1. Buat atribut terhadap produk yaitu exclude_from_sitemap(Ya / Tidak)

  2. Timpa Mage_Sitemap_Model_Resource_Catalog_Productkelas dan modifikasi getCollectionfungsi dengan menambahkan filter ke atribut baru Anda yaitu kecualikan dari sitemap

Jika Anda bukan pengembang maka modul berikut dapat membantu mencapai di atas tetapi tentu saja itu adalah ekstensi berbayar

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

stevensagaar
sumber
1

Anda dapat menonaktifkan produk tersebut atau menyetel bidang visibilitas ke 'Tidak terlihat satu per satu'. Dalam peta situs hanya produk yang diaktifkan dan terlihat yang terdaftar.
Jika Anda membutuhkan produk tersebut diaktifkan, nonaktifkan saja, bangun sitemap.xml dan aktifkan kembali.

Marius
sumber