8

私はしばらくの間フロントエンドのマジェントを行ってきましたが、モジュールの構築を始めたばかりです。これはフロントエンドの方法を知っているものですが、モジュールで苦労しています。私が今のところ達成しようとしているのは、管理者に利用可能なすべての製品属性を複数選択することです。すべての商品属性セットにカスタム商品属性を含めます。フラット カテゴリ データが有効になっているとは想定したくないので、どのテーブルが必要になるかは完全にはわかりません。

システム構成の新しいタブに管理領域を作成しました。現在、3 つの静的オプションが入力されている複数選択フィールドを作成しました。これだけ効きます。誰かが正しい方向に指を向けることで私を助けてくれますか...現在、これは私がこれまでに持っているものです(価値があるため)。

   <?php
       class test_test_Model_Source 
       {
           public function toOptionArray()
           {
               return array(
                   array('value' => 0, 'label' =>'First item'),
                   array('value' => 1, 'label' => 'Second item'),
                   array('value' => 2, 'label' =>'third item'),

               );
           }
       }

///////////////////////////// 編集 //////////////////// /////////////////

ここで何かに夢中になっているような気がしますが、すべての属性の最初の文字のみを返しているだけです(属性が返されるかどうかはわかりません)

public function toOptionArray()
{
    $attributes = Mage::getModel('catalog/product')->getAttributes();
    $attributeArray = array();
    foreach($attributes as $a){

            foreach($a->getSource()->getAllOptions(false) as $option){
                $attributeArray[$option['value']] = $option['label'];
            }

    }
    return $attributeArray; 
}

///////////////////////////////// 編集 //////////////// //////////////////////

配列が私が望むもの、すべてのattribute_codesを返していることがわかったので、私は非常に近いわけではありません。ただし、まだそれぞれの最初の文字しか出力していません...誰でも理由を知っていますか?

public function toOptionArray()
{
    $attributes = Mage::getModel('catalog/product')->getAttributes();
    $attributeArray = array();

    foreach($attributes as $a){
        foreach ($a->getEntityType()->getAttributeCodes() as $attributeName) {
            $attributeArray[$attributeName] = $attributeName;
        }
         break;         
    }
    return $attributeArray; 
}
4

3 に答える 3

6

私は自分の質問に答えました。うまくいく方法を見つけましたが、理由はわかりません。誰かがコメントして説明できると便利です。したがって、 $attributeArray[$attributeName] = $attributeName; を持っていますが。最初の文字のみを提供していた配列を返したときにprint_rになったときに機能しました。ただし、次のようにすると、私の意見ではまったく同じことをしているように見えます。レンダリング時に文字列ではなく、何か他のものを期待していたとしか想像できません。とにかく、ここにコードがあります:

public function toOptionArray()
{
    $attributes = Mage::getModel('catalog/product')->getAttributes();
    $attributeArray = array();

    foreach($attributes as $a){

        foreach ($a->getEntityType()->getAttributeCodes() as $attributeName) {

            //$attributeArray[$attributeName] = $attributeName;
            $attributeArray[] = array(
                'label' => $attributeName,
                'value' => $attributeName
            );
        }
        break;
    }
    return $attributeArray; 
}
于 2013-04-04T13:51:28.377 に答える
5

Frank Clark が提案したように、追加のループを行う必要はありません。使用するだけです:

public function toOptionArray() 
{
    $attributes = Mage::getResourceModel('catalog/product_attribute_collection')->addVisibleFilter();
    $attributeArray = array();

    foreach($attributes as $attribute){
            $attributeArray[] = array(
                'label' => $attribute->getData('frontend_label'),
                'value' => $attribute->getData('attribute_code')
            );
    }
    return $attributeArray; 
}
于 2014-03-17T12:13:52.953 に答える
1

このように、他の方法で属性を取得しようとすることができます

$attributes = Mage::getSingleton('eav/config')
->getEntityType(Mage_Catalog_Model_Product::ENTITY)->getAttributeCollection();

属性を取得したら、この方法でオプションを取得できます (magento コードからコピー)

$result = array();
foreach($attributes as $attribute){
foreach ($attribute->getProductAttribute()->getSource()->getAllOptions() as $option) {
    if($option['value']!='') {
        $result[$option['value']] = $option['label'];
    }
}

}

于 2013-04-02T19:56:51.740 に答える