Belirli ürünleri Magento sitemap.xml neslinin dışında tutma


14

Ben ürünlerinin emin bir avuç yapmak gerekir DEĞİL oluşturulan yılında Sitemap.xmlMagento dosyası. CMS Pages gibi şeyler için birkaç örnek buldum, ancak ürün sayfaları yapmak için hiçbir şey ve 1'den fazla ürün buldum. Magento'da yepyeni

Bunun nasıl yapılabileceğini bilen var mı?

Yanıtlar:


7

Kutunun dışında, hayır, Magento'nun Catalog -> Google Sitemapözelliğinin oluşturduğu site haritasından belirli ürünleri hariç tutmanın bir yolu yok .

Bunu programlı olarak yapmaya devam edersem, Magento'nun modern sürümleri (1.7.x dalında kontrol edildi, bu daha önceki / EE sürümlerinde olabilir) aşağıdaki kaynak modeli sınıfını kullan

Mage_Sitemap_Model_Resource_Catalog_Product

bir ürün listesi getirmek için.

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

Bu standart bir Magento CRUD modeli getCollectiondeğildir ve bir toplama nesnesi döndürmez. Bunun yerine, getCollectionbu ürünler için veritabanını el ile sorgular.

Belirli ürünlerin site haritasında görünmesini engelleyen bir işlevsellik uygulayacak olsaydım,

  1. Bir sınıf, getCollectionyöntemi çağıran yöntemi yeniden yazar parent::getCollectionve ardından dizideki tüm ürünleri el ile filtreler.

  2. _addFilterÜst :: _ addFilter yöntemini çağıran ve ardından _selectbelirli ürünleri / ürünleri hariç tutmak için ek bir WHERE deyimi ekleyen bir sınıf yeniden yazma . Bir saldırı türü, ancak _selectveritabanını sorgulamak için kullanılan nesneye erişiminiz olan tek yöntemdir . İdeal olarak bir tür genel / statik bayrağa sahip olmak istersiniz, böylece yeni WHERE yan tümcelerinizi yalnızca bir kez eklersiniz.


8

Magento 1.9.0'dan beri. bunu herhangi bir çekirdek dosyaya dokunmadan yapabilirsiniz.

Gözlemleyebileceğiniz iki yeni olay var:

  • sitemap_categories_generating_before
  • sitemap_products_generating_before

Özelliğe dayalı ürünleri hariç tutmak için şunları yapabilirsiniz:

  1. gözlemci ekle sitemap_products_generating_before

    Uygulamanın \ kodu \ topluluk \ My \ Modülü \ vb \ 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>

    Uygulamanın \ kodu \ topluluk \ My \ Modülü \ Modeli \ 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. "evet / hayır" adlı bir ürün özelliği ekleyin use_in_sitemap(belki varsayılan değer "evet")

  3. bu özelliği tüm özellik kümelerine ekle
  4. hariç tutmak istediğiniz ürünleri "hayır" olarak ayarlayın
  5. site haritanızı oluşturun

Not : Magento 1.9.3.0'a kadar öznitelik globalkapsam olarak ayarlanmalıdır .


3

Bunu başarmak için aşağıdakileri yapabilirsiniz:

  1. Ürüne karşı bir nitelik oluşturun yani exclude_from_sitemap(Evet / Hayır)

  2. Yeni özelliğinize filtre ekleyerek Mage_Sitemap_Model_Resource_Catalog_Productsınıfın üzerine yaz ve getCollectionişlevi değiştir ; yani site haritasından hariç tut

Bir geliştirici değilseniz, aşağıdaki modül yukarıdakilere ulaşmanıza yardımcı olabilir, ancak tabii ki ücretli

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


1

Bu ürünleri devre dışı bırakabilir veya görünürlük alanını 'Tek tek görünmez' olarak ayarlayabilirsiniz. Site haritasında yalnızca etkin ve görünür ürünler listelenir.
Bu ürünlerin etkinleştirilmesine ihtiyacınız varsa, bunları devre dışı bırakın, sitemap.xml dosyasını oluşturun ve tekrar etkinleştirin.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.