ฉันต้องทำให้แน่ใจว่าผลิตภัณฑ์หนึ่งหยิบไม่อยู่ในSitemap.xml
ไฟล์ที่สร้างขึ้นใน Magento ฉันพบตัวอย่างสองสามอย่างสำหรับหน้า CMS แต่ไม่มีอะไรทำหน้าผลิตภัณฑ์และอีก 1 ผลิตภัณฑ์ ฉันใหม่เอี่ยมสำหรับ Magento
ใครรู้วิธีนี้สามารถทำได้?
ฉันต้องทำให้แน่ใจว่าผลิตภัณฑ์หนึ่งหยิบไม่อยู่ในSitemap.xml
ไฟล์ที่สร้างขึ้นใน Magento ฉันพบตัวอย่างสองสามอย่างสำหรับหน้า CMS แต่ไม่มีอะไรทำหน้าผลิตภัณฑ์และอีก 1 ผลิตภัณฑ์ ฉันใหม่เอี่ยมสำหรับ Magento
ใครรู้วิธีนี้สามารถทำได้?
คำตอบ:
ไม่ได้มีวิธีการแยกผลิตภัณฑ์บางอย่างออกจากแผนผังไซต์ที่สร้างโดย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
สอบถามฐานข้อมูลสำหรับผลิตภัณฑ์เหล่านี้ด้วยตนเอง
ถ้าฉันจะใช้ฟังก์ชันการทำงานที่ป้องกันไม่ให้ผลิตภัณฑ์บางอย่างแสดงในแผนผังไซต์ฉันจะลองด้วยเช่นกัน
ชั้นเรียนเขียนgetCollection
วิธีการที่เรียกparent::getCollection
และจากนั้นกรองผลิตภัณฑ์ออกจากอาร์เรย์ด้วยตนเอง
คลาสเขียนใหม่_addFilter
ซึ่งเรียกเมธอด parent :: _ addFilter แล้วเพิ่ม WHERE clause เพิ่มเติมลงใน_select
เพื่อแยกผลิตภัณฑ์เฉพาะออก เรียงแฮ็ค แต่เป็นวิธีเดียวที่คุณสามารถเข้าถึง_select
วัตถุที่ใช้ในการสืบค้นฐานข้อมูล เป็นการดีที่คุณต้องการให้มีการตั้งค่าสถานะโกลบอล / แบบคงที่ดังนั้นคุณจะเพิ่ม WHERE clause ใหม่เพียงครั้งเดียว
ตั้งแต่ Magento 1.9.0 คุณสามารถทำได้โดยไม่ต้องแตะไฟล์หลักใด ๆ
มีเหตุการณ์ใหม่สองเหตุการณ์ที่คุณสามารถสังเกตเห็นได้:
sitemap_categories_generating_before
sitemap_products_generating_before
หากต้องการยกเว้นผลิตภัณฑ์ตามคุณลักษณะคุณสามารถทำสิ่งนี้:
เพิ่มผู้สังเกตการณ์ 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);
}
เพิ่มคุณสมบัติของผลิตภัณฑ์ "ใช่ / ไม่ใช่" ชื่อuse_in_sitemap
(อาจจะเป็นค่าเริ่มต้น "ใช่")
หมายเหตุ : จนกว่า Magento 1.9.3.0 ควรตั้งค่าแอตทริบิวต์เป็นglobal
ขอบเขต
เพื่อให้บรรลุสิ่งนี้คุณสามารถทำสิ่งต่อไปนี้ -:
สร้างแอตทริบิวต์เทียบกับผลิตภัณฑ์เช่นexclude_from_sitemap
(ใช่ / ไม่ใช่)
เขียนทับMage_Sitemap_Model_Resource_Catalog_Product
คลาสและปรับเปลี่ยนgetCollection
ฟังก์ชั่นโดยเพิ่มตัวกรองไปยังแอตทริบิวต์ใหม่ของคุณเช่นแยกออกจากแผนผังไซต์
หากคุณไม่ได้เป็นนักพัฒนาโมดูลต่อไปนี้สามารถช่วยให้บรรลุเป้าหมายข้างต้น
http://www.scommerce-mage.co.uk/magento-extensions/magento-google-site-map-exclusion.html
คุณสามารถปิดการใช้งานผลิตภัณฑ์เหล่านั้นหรือตั้งค่าฟิลด์การมองเห็นเป็น 'ไม่ปรากฏทีละรายการ' ในแผนผังไซต์เฉพาะผลิตภัณฑ์ที่เปิดใช้งานและมองเห็นได้แสดงไว้
หากคุณต้องการเปิดใช้งานผลิตภัณฑ์เหล่านั้นเพียงปิดใช้งานสร้าง sitemap.xml และเปิดใช้งานอีกครั้ง