Magento: получите коллекцию продуктов, которые имеют хотя бы одну категорию - PullRequest
1 голос
/ 24 ноября 2011

Я хочу получить коллекцию товаров, имеющую хотя бы одну категорию.На самом деле я хочу игнорировать те продукты, которые не входят ни в одну категорию.Кто-нибудь может помочь ???Мой код ниже:

protected function _prepareCollection()
{
    $store = $this->_getStore();
    $collection = Mage::getModel('catalog/product')->getCollection()
        ->addAttributeToSelect('sku')
        ->addAttributeToSelect('name')
        ->addAttributeToSelect('attribute_set_id')
        ->addAttributeToSelect('type_id')
        ->joinField('qty',
            'cataloginventory/stock_item',
            'qty',
            'product_id=entity_id',
            '{{table}}.stock_id=1',
            'left');

    if ($store->getId()) {
        //$collection->setStoreId($store->getId());
        $adminStore = Mage_Core_Model_App::ADMIN_STORE_ID;
        $collection->addStoreFilter($store);
        $collection->joinAttribute('name', 'catalog_product/name', 'entity_id', null, 'inner', $adminStore);
        $collection->joinAttribute('custom_name', 'catalog_product/name', 'entity_id', null, 'inner', $store->getId());
        $collection->joinAttribute('status', 'catalog_product/status', 'entity_id', null, 'inner', $store->getId());
        $collection->joinAttribute('visibility', 'catalog_product/visibility', 'entity_id', null, 'inner', $store->getId());
        $collection->joinAttribute('price', 'catalog_product/price', 'entity_id', null, 'left', $store->getId());
    }
    else {
        $collection->addAttributeToSelect('price');
        $collection->joinAttribute('status', 'catalog_product/status', 'entity_id', null, 'inner');
        $collection->joinAttribute('visibility', 'catalog_product/visibility', 'entity_id', null, 'inner');
    }

    $this->setCollection($collection);

    parent::_prepareCollection();
    $this->getCollection()->addWebsiteNamesToResult();

    return $this;
}

Спасибо,

1 Ответ

1 голос
/ 24 ноября 2011

Используйте этот фрагмент кода:

<?php
    ini_set('display_errors', 1);
    error_reporting(E_ALL);
    require_once("app/Mage.php");
    Mage::app();

    $collection = Mage::getModel('catalog/product')->getCollection();
    $collection 
        ->joinField('category_id',
            'catalog_category_product',
            'category_id',
            'product_id=entity_id',
            null,
            'right');

К идентификатору категории можно обращаться, например:

$product->getData('category_id');

Таким образом, он будет принимать все товары, идентификаторы которых находятся в таблице catalog_category_product, другими словамиСкрипт примет весь товар в категориях.

Загрузить Дополнительные атрибуты к коллекции:

$collection = Mage::getModel('catalog/product')->getCollection()->addAttributeToSelect('*');

ОБНОВЛЕНИЕ 1

Я пробовал с вашим - работаетотлично.

Попробуйте что-нибудь такое -

$collection = $this->_prepareCollection();
$collection 
    ->joinField('category_id',
        'catalog_category_product',
        'category_id',
        'product_id=entity_id',
        null,
        'right');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...