8

我一直在做前端magento,但才刚刚开始构建模块。这是我知道如何做前端的事情,但我在我的模块中苦苦挣扎。我现在要实现的目标是在管理员中使用所有可用的产品属性填充多选。包括所有产品属性集的自定义产品属性。我不完全确定这需要什么表,因为我不想假设启用了平面类别数据。

我在系统配置的一个新选项卡中创建了我的管理区域,我创建了一个多选字段,该字段当前仅填充了三个静态选项。这很管用。任何人都可以通过指出正确的方向来帮助我......目前这是我到目前为止所拥有的(因为它的价值)。

   <?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; 
}

///////////////////////////////// 编辑 //////////////// ////////////////////

我不是非常接近,因为我现在知道该数组正在返回我想要的所有属性代码。但是它仍然只输出每个字母的第一个字母......有人知道为什么吗?

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

正如弗兰克克拉克建议的那样,不需要做额外的循环。只需使用:

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 回答