Magento - загрузка корневой коллекции загружает все продукты - PullRequest
0 голосов
/ 21 марта 2011

Что касается использования нескольких магазинов с разными корневыми категориями:

У меня настроено 2 магазина с разными корнями.У одного есть 14 товаров, у другого 6.

Если я использую следующее на своей домашней странице (просто чтобы показать, сколько товаров находится в корневой категории для этого магазина - в данном случае с идентификатором 8), я получу20 товаров - то есть все товары в магазине, от всех корней:

$_testproductCollection = Mage::getModel('catalog/category')->load(8)  
->getProductCollection()  
->addAttributeToSelect('*')->load();
echo "NO. OF PRODUCTS IS ".$_testproductCollection->count();

Однако, если я изменю идентификатор на подкатегорию, я получу правильное количество товаров.В этом корне всего 6 товаров:

roots

Но на счету 20 (как и 20 во всем магазине - или оба корня).

Любойзнаете, что случилось?Это ошибка?

Я также заметил, что если вы идете в Управление продуктами и используете фильтр просмотра магазина, он ничего не делает, все равно показывая 20 товаров в представлении магазина, в корне которого только 6 товаров:

filter

1 Ответ

0 голосов
/ 13 декабря 2011

Хорошо, я думаю, что это работает, не слишком много тестировал, но, похоже, добился цели.Сначала вам нужно получить идентификатор корневой категории вашего магазина, затем соединить некоторые поля, чтобы иметь доступ к продукту "category_id", а затем отфильтровать, используя это:

$_rootcatID = Mage::app()->getStore()->getRootCategoryId();

$_testproductCollection = Mage::getResourceModel('catalog/product_collection')
->joinField('category_id','catalog/category_product','category_id','product_id=entity_id',null,'left')
->addAttributeToFilter('category_id', array('in' => $_rootcatID))
->addAttributeToSelect('*');
$_testproductCollection->load();

foreach($_testproductCollection as $_testproduct){ 
    echo $this->htmlEscape($_testproduct->getName())."<br/>"; 
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...