При получении коллекции товаров в Magento я ожидал, что StoreFilter сделает это, отфильтровывает по текущему магазину.Но я не могу заставить его работать.
Скажем, у меня 2 магазина, настроенных так:
И оба магазина имеют разные корневые категории.Основной магазин - это образец данных по умолчанию, в Store2 есть только один продукт, который я добавил.Я бы подумал, что при использовании фильтра магазина будут отображаться только товары из корневой категории текущего магазина.Но я получаю каждый продукт, показывающий.Я проверяю это, помещая в свой шаблон представления категории следующее:
$store_id = Mage::app()->getStore()->getId();
$_testproductCollection = Mage::getResourceModel('reports/product_collection')
->setStoreId($storeId)
->addStoreFilter($store_id)
->addAttributeToSelect('*');
$_testproductCollection->load();
foreach($_testproductCollection as $_testproduct){
echo $this->htmlEscape($_testproduct->getName());
};
Если я повторяю идентификатор магазина, он дает мне правильный номер.У меня есть только один товар в Магазине 2, так почему я получаю каждый товар из всех магазинов?Я могу настроить каждый товар в главном магазине так, чтобы он не отображался в Store2, а затем добавить фильтр видимости, но это заняло бы вечность.
Кроме того, я только что заметил, что если я повторяю идентификатор магазина товаров, я получаю текущийИдентификатор, а не хранилище, которому он присвоен:
echo $_testproduct->getStoreId()
Что происходит?
ОБНОВЛЕНИЕ (8 апреля 2011 г.): ОК, поэтому я попытался объединить поля так,что store_id включен (как предложено ниже), раздел кода {{table}}. store_id = 1 просто устанавливает для всех продуктов значение store_id, равное 1. Как я могу просто получить store_idсвязан с продуктом?
$_testproductCollection = Mage::getResourceModel('catalog/product_collection');
$_testproductCollection->joinField('store_id', 'catalog_category_product_index', 'store_id', 'product_id=entity_id', '{{table}}.store_id = 1', 'left');
$_testproductCollection->getSelect()->distinct(true);
$_testproductCollection->addAttributeToSelect('*')->load();
foreach($_testproductCollection as $_testproduct){
echo $this->htmlEscape($_testproduct->getName())."<br/>";
echo "STORE IS ".$_testproduct->getData('store_id')."<br/>";
};
Если я проверю таблицу catalog_category_product_index моей базы данных, то store_id верны.