1

次のコードを使用してすべてのメーカーを一覧表示していますが、魅力的に機能します。

$attribute = Mage::getModel('eav/entity_attribute')
                ->loadByCode('catalog_product', 'manufacturer');

$valuesCollection = Mage::getResourceModel('eav/entity_attribute_option_collection')
            ->setAttributeFilter($attribute->getData('attribute_id'))
            ->setStoreFilter(0, false);

$preparedManufacturers = array();            
foreach($valuesCollection as $value) {
    $preparedManufacturers[$value->getOptionId()] = $value->getValue();
}   


if (count($preparedManufacturers)) {
    echo "<h2>Manufacturers</h2><ul>";
    foreach($preparedManufacturers as $optionId => $value) {
        echo "<li>" . $value . " - (" . $optionId . ")</li>";
    }
    echo "</ul>";
}

私が探しているのは、各メーカーに関連付けられている製品の数を表示する方法です。誰かがこれを行う方法を教えてもらえますか?

どうもありがとう

4

3 に答える 3

1

私のすべてではありませんが、1.6以降で機能しますか?

<?php
    include_once 'app/Mage.php';
    Mage::app();

    $attribute = Mage::getModel('eav/entity_attribute')
            ->loadByCode('catalog_product', 'manufacturer');

    $valuesCollection = Mage::getResourceModel('eav/entity_attribute_option_collection')
            ->setAttributeFilter($attribute->getData('attribute_id'))
            ->setStoreFilter(0, false);

    $preparedManufacturers = array();
    foreach ($valuesCollection as $value) {
        $preparedManufacturers[$value->getOptionId()] = $value->getValue();
    }

    if (count($preparedManufacturers)) {
        echo "<h2>Manufacturers</h2><ul>";
        foreach ($preparedManufacturers as $optionId => $value) {
            $collection = Mage::getModel('catalog/product')->getCollection();
            $collection->addFieldToFilter(array(array('attribute' => 'manufacturer', 'eq' => $optionId)));
            $mumberOfProducrt = count($collection);
            echo "<li>" . $value . " - (" . $mumberOfProducrt . ")</li>";
        }
        echo "</ul>";
    }
?>
于 2013-12-22T22:37:06.173 に答える
0

作業コードはそれを行う必要があります

$collection = Mage::getModel('catalog/product')->getCollection()->groupByAttribute('manufacturer')
                ->addFieldToFilter('status',Mage_Catalog_Model_Product_Status::STATUS_ENABLED)
                ->addExpressionAttributeToSelect("count",'COUNT({{entity_id}})', 'entity_id');
Mage::getSingleton('cataloginventory/stock')->addInStockFilterToCollection($collection);
于 2016-09-19T08:50:53.977 に答える
0

これは機能しますが、最も効率的ではありません。

foreach($valuesCollection as $value) {
    $preparedManufacturers[$value->getOptionId()] = $value->getValue();
    $collection = Mage::getModel('catalog/product')->getCollection();
    $collection
        ->addAttributeToSelect('*') // '*' not efficient though
        ->addAttributeToFilter('manufacturer', array('eq' => $value->getOptionId()))
        //->addAttributeToFilter('manufacturer', $value->getOptionId())
     ;
    $count = $collection->->getSize();
}  

これはメーカーごとに追加のクエリなので、あまり良くありませんが、キャッシングなどがあればそれほど悪くはありません。

于 2013-03-01T15:53:15.073 に答える