0

次のコードを使用して、カスタム属性を管理カタログ > 製品タブ グリッドにプルしています。

$collection = Mage::getModel('catalog/product')->getCollection()
            ->addAttributeToSelect('name')
            ->addAttributeToSelect('sku')
            ->addAttributeToSelect('price')
            ->addAttributeToSelect('image')
        ->addAttributeToSelect('pos_product_type')

+

 $this->addColumn('pos_product_type', array(
        'header'    => Mage::helper('catalog')->__('OsiPos Category'),
        'sortable'  => true,
        'width'     => '80',
        'index'     => 'pos_product_type'
    ));

これは、92、97、95 などの属性 ID を示しています。これはあまりユーザーフレンドリーではないので、どうすれば属性の実際の名前/ラベルを取得できるのか疑問に思っています。

フロントエンドでは、次を使用します。

 $_product->getAttributeText('pos_product_type') 

ラベルを表示しますが、バックエンドで変換できません。

4

4 に答える 4

2

Magento コードで答えを見つけることができます。たとえば、可視性を確認してください。

$this->addColumn('visibility',
    array(
        'header'=> Mage::helper('catalog')->__('Visibility'),
        'width' => '70px',
        'index' => 'visibility',
        'type'  => 'options',
        'options' => Mage::getModel('catalog/product_visibility')->getOptionArray(),
));

また、db と通信する属性セットのコードを確認することもできます。

$sets = Mage::getResourceModel('eav/entity_attribute_set_collection')
    ->setEntityTypeFilter(Mage::getModel('catalog/product')->getResource()->getTypeId())
    ->load()
    ->toOptionHash();

$this->addColumn('set_name',
    array(
        'header'=> Mage::helper('catalog')->__('Attrib. Set Name'),
        'width' => '100px',
        'index' => 'attribute_set_id',
        'type'  => 'options',
        'options' => $sets,
));
于 2013-01-08T07:48:04.147 に答える
1

これは、https ://github.com/magento-hackathon/GridControlを使用して簡単に実現できます。

編集

必要なのは、列にオプションを追加することです。

$this->addColumn('pos_product_type', array(
    'header'    => Mage::helper('catalog')->__('OsiPos Category'),
    'sortable'  => true,
    'width'     => '80',
    'index'     => 'pos_product_type',
    'options' => $this->_getProductAttributeOptions('pos_product_type')
));

ヘルパー関数を次のようにコピーする必要があります。

protected function _getProductAttributeOptions($attributeName) {
    $attribute = Mage::getModel('eav/config')->getAttribute('catalog_product',$attributeName);
    /* @var $attribute Mage_Catalog_Model_Resource_Eav_Attribute */       
    $attributeOptions = $attribute->getSource()->getAllOptions();
    $options = array();
    // options in key => value Format bringen
    foreach ($attributeOptions as $option) {
        $options[number_format($option['value'], 4, '.', '')] = $option['label'];
    }       
    return $options;       
}

webguysに感謝します:http ://www.webguys.de/magento/turchen-23-pimp-my-produktgrid/

しかし、あなたはドイツ語を理解していませんね?

于 2013-01-08T09:10:06.673 に答える
0

PHP のパフォーマンスのために、MySQL を使用して属性コードをフィルタリングすることをお勧めします。属性とオプションのリストは時間の経過とともにかなり大きくなる可能性があり、それらすべてをループする必要はありません。

変更された例の下:

$pos_items = Mage::getModel('eav/entity_attribute_option')
            ->getCollection()
            ->setStoreFilter()
            ->join('attribute','attribute.attribute_id=main_table.attribute_id', 'attribute_code')
            ->addFieldToFilter('attribute_code', 'pos_product_type');

   foreach ($pos_items as $pos_item) :
                $pos_options[$pos_item->getOptionId()] = $pos_item->getValue();
        endforeach;

$this->addColumn('pos_product_type',
            array(
                'header'=> Mage::helper('catalog')->__('Pos Product Type'),
                'width' => '100px',
                'type'  => 'options',
                'index' => 'pos_product_type',
                'options' => $pos_options
        ));
于 2014-05-13T14:50:00.250 に答える
0

提案に近づきましたが、最終的な解決策は次のとおりです。

// Add Pos Product Type

    $pos_items = 
    Mage::getModel('eav/entity_attribute_option')->getCollection()->setStoreFilter()->join('attribute','attribute.attribute_id=main_table.attribute_id', 'attribute_code');
            foreach ($pos_items as $pos_item) :
                if ($pos_item->getAttributeCode() == 'pos_product_type')
                    $pos_options[$pos_item->getOptionId()] = $pos_item->getValue();
            endforeach;

            $this->addColumn('pos_product_type',
                array(
                    'header'=> Mage::helper('catalog')->__('Pos Product Type'),
                    'width' => '100px',
                    'type'  => 'options',
                    'index' => 'pos_product_type',
                    'options' => $pos_options
            ));
于 2013-01-10T01:08:42.680 に答える