Come impostare un ID Store su Mage_Catalog_Model_Resource_product_Collection?
-
31-10-2019 - |
Domanda
Il compito è banale. Devo ottenere un elenco di prodotti per una particolare vista del negozio con un catalogo piatto abilitato. La soluzione più ovvia è la seguente:
$collection = Mage::getResourceModel('catalog/product_collection')
->setStore($storeId);
Infatti setStore()
Il metodo non sta facendo alcuna differenza qui perché viene chiamato dopo _initSelect()
metodo di Mage_Catalog_Model_Resource_Product_Collection
che ottiene il nome della tabella piatta in base all'ID Store. Poiché l'ID Store non è ancora impostato, prende l'ID Store corrente.
Quindi l'ovvia soluzione alternativa sarebbe quella di impostare un ID del negozio corrente prima di ottenere un modello.
Mage::app()->setCurrentStore($storeId);
$collection = Mage::getResourceModel('catalog/product_collection');
Funzionerà. Ma solo se hai bisogno di ottenere una collezione una volta. Se hai bisogno di ottenere una collezione nel ciclo o ne hai solo bisogno di due collezioni back to back, non sarai in grado di impostare un negozio specifico per loro.
Il motivo è quello Mage_Catalog_Model_Resource_Product_Flat
La classe ha la sua _storeId
Proprietà e nel costruttore è impostato sull'ID del negozio corrente. Ecco perché sarà impostato per la prima volta. Quindi per qualche motivo (il paradiso sa che spero ce ne sia uno) Mage_Eav_Model_Entity_Collection_Abstract::_init
Ogni modulo di risorse viene recuperato come singleton. Quindi nessun costruttore per la seconda chiamata.
Tutto questo sembra così sbagliato che sono abbastanza sicuro di aver torto e non è un altro bug Magento (o due). Spero che qualcuno possa far luce su di esso.
Nessuna soluzione corretta