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