5
วิธีตั้งค่า ID ร้านค้าบน Mage_Catalog_Model_Resource_Product_Collection
งานนั้นไม่สำคัญ ฉันต้องการรับรายการผลิตภัณฑ์สำหรับมุมมองร้านค้าโดยเฉพาะด้วยการเปิดใช้งานแค็ตตาล็อกแบบแบน ทางออกที่ชัดเจนที่สุดคือ: $collection = Mage::getResourceModel('catalog/product_collection') ->setStore($storeId); ในความเป็นจริงsetStore()วิธีการไม่ได้สร้างความแตกต่างใด ๆ ที่นี่เพราะมันถูกเรียกหลังจาก_initSelect()วิธีการMage_Catalog_Model_Resource_Product_Collectionที่ได้รับชื่อของตารางแบนตามรหัสร้านค้า เนื่องจาก ID ร้านค้ายังไม่ได้ตั้งค่าจะใช้ ID ร้านค้าปัจจุบัน ดังนั้นวิธีแก้ปัญหาที่ชัดเจนคือการตั้งค่า ID ร้านค้าปัจจุบันก่อนรับโมเดล Mage::app()->setCurrentStore($storeId); $collection = Mage::getResourceModel('catalog/product_collection'); มันจะทำงาน. แต่ถ้าคุณต้องการรับชุดหนึ่งครั้ง หากคุณต้องการรับคอลเล็กชันในลูปหรือคุณต้องการคอลเลกชันสองหลังถึงหลังคุณจะไม่สามารถตั้งค่าร้านค้าเฉพาะสำหรับพวกเขาได้ เหตุผลคือMage_Catalog_Model_Resource_Product_Flatคลาสนั้นมี_storeIdคุณสมบัติเป็นของตัวเองและใน Constructor นั้นจะถูกตั้งค่าเป็น ID ร้านค้าปัจจุบัน นั่นเป็นเหตุผลที่มันจะถูกตั้งค่าเป็นครั้งแรก ด้วยเหตุผลบางอย่าง (สวรรค์รู้ว่าฉันหวังว่าจะมีหนึ่ง) ในMage_Eav_Model_Entity_Collection_Abstract::_initแต่ละโมดูลทรัพยากรถูกเรียกเป็นซิงเกิล ดังนั้นไม่มี Constructor สำหรับการโทรครั้งที่สอง ทั้งหมดนี้ดูผิดไปมากจนฉันค่อนข้างมั่นใจว่าฉันผิดและไม่ใช่ Magento bug ตัวอื่น (หรือสองตัว) หวังว่าใครบางคนสามารถหลั่งน้ำตาแสงบนมัน