ยกเว้นผลิตภัณฑ์บางอย่างจาก Magento sitemap.xml generation


14

ฉันต้องทำให้แน่ใจว่าผลิตภัณฑ์หนึ่งหยิบไม่อยู่ในSitemap.xmlไฟล์ที่สร้างขึ้นใน Magento ฉันพบตัวอย่างสองสามอย่างสำหรับหน้า CMS แต่ไม่มีอะไรทำหน้าผลิตภัณฑ์และอีก 1 ผลิตภัณฑ์ ฉันใหม่เอี่ยมสำหรับ Magento

ใครรู้วิธีนี้สามารถทำได้?

คำตอบ:


7

ไม่ได้มีวิธีการแยกผลิตภัณฑ์บางอย่างออกจากแผนผังไซต์ที่สร้างโดยCatalog -> Google Sitemapคุณสมบัติของ Magento

ถ้าฉันจะไปเกี่ยวกับการทำโปรแกรมนี้เวอร์ชัน 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 และgetCollectionจะไม่ส่งคืนออบเจกต์คอลเลกชัน ให้getCollectionสอบถามฐานข้อมูลสำหรับผลิตภัณฑ์เหล่านี้ด้วยตนเอง

ถ้าฉันจะใช้ฟังก์ชันการทำงานที่ป้องกันไม่ให้ผลิตภัณฑ์บางอย่างแสดงในแผนผังไซต์ฉันจะลองด้วยเช่นกัน

  1. ชั้นเรียนเขียนgetCollectionวิธีการที่เรียกparent::getCollectionและจากนั้นกรองผลิตภัณฑ์ออกจากอาร์เรย์ด้วยตนเอง

  2. คลาสเขียนใหม่_addFilterซึ่งเรียกเมธอด parent :: _ addFilter แล้วเพิ่ม WHERE clause เพิ่มเติมลงใน_selectเพื่อแยกผลิตภัณฑ์เฉพาะออก เรียงแฮ็ค แต่เป็นวิธีเดียวที่คุณสามารถเข้าถึง_selectวัตถุที่ใช้ในการสืบค้นฐานข้อมูล เป็นการดีที่คุณต้องการให้มีการตั้งค่าสถานะโกลบอล / แบบคงที่ดังนั้นคุณจะเพิ่ม WHERE clause ใหม่เพียงครั้งเดียว


8

ตั้งแต่ Magento 1.9.0 คุณสามารถทำได้โดยไม่ต้องแตะไฟล์หลักใด ๆ

มีเหตุการณ์ใหม่สองเหตุการณ์ที่คุณสามารถสังเกตเห็นได้:

  • sitemap_categories_generating_before
  • sitemap_products_generating_before

หากต้องการยกเว้นผลิตภัณฑ์ตามคุณลักษณะคุณสามารถทำสิ่งนี้:

  1. เพิ่มผู้สังเกตการณ์ sitemap_products_generating_before

    แอปพลิเค \ รหัส \ ชุมชน \ \ My โมดูล \ 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>

    แอปพลิเค \ รหัส \ ชุมชน \ \ My โมดูล \ รุ่น \ 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 และเปิดใช้งานอีกครั้ง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.