작업은 사소합니다. 플랫 카탈로그가 사용 가능한 특정 상점보기에 대한 제품 목록을 가져와야합니다. 가장 확실한 해결책은 다음과 같습니다.
$collection = Mage::getResourceModel('catalog/product_collection')
->setStore($storeId);
실제로 setStore()
메소드는 상점 ID를 기반으로 플랫 테이블의 이름을 얻는 _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
속성이 있고 생성자에서 현재 상점 ID로 설정되어 있기 때문입니다. 이것이 처음으로 설정되는 이유입니다. 그런 다음 Mage_Eav_Model_Entity_Collection_Abstract::_init
각 리소스 모듈 에 어떤 이유로 (하나는 있음을 알고 있음) 알 수 있습니다 . 따라서 두 번째 호출의 생성자가 없습니다.
이 모든 것이 잘못되어 내가 틀렸다고 확신하며 다른 마 젠토 버그 (또는 두 가지)가 아닙니다. 누군가가 그것에 빛을 비출 수 있기를 바랍니다.