2013-04-02 3 views
7

Я делаю frontend magento некоторое время, но только что начал строить модули. Это то, что я знаю, как делать интерфейс, но я боюсь в своем модуле. То, что я пытаюсь достичь на данный момент, заполняет multiselect в admin со всеми доступными атрибутами продукта. Включая пользовательские атрибуты товара для всех наборов атрибутов продукта. Я не совсем уверен, какую таблицу это потребует, потому что я не хочу предполагать, что данные категории Flat включены.Получить список всех атрибутов продукта в 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'), 

       ); 
      } 
     } 

///////////////////////////// EDIT ///////////// ////////////////////////

Я чувствую, что могу быть здесь, но он возвращает только первую букву каждого атрибута (так я не уверен, если его даже атрибуты его возвращения)

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

////////////////////////////// /// EDIT //////////////////////////////////////

Я не очень закрыть, поскольку теперь я знаю, что массив возвращает то, что я хочу, все атрибуты_кодов. Однако он все равно выводит только первую букву каждого ... Кто-нибудь знает почему?

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

ответ

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; 
} 
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']; 
    } 
} 

}

+0

См. Выше edit ^^ –

+0

Можете ли вы разместить часть print_r массива? – Mat

+0

Так что, если я маг :: войти во второй цикл по каждому элементу $ ATTRIBUTENAME он возвращает: DEBUG (7): allow_message DEBUG (7): allow_open_amount DEBUG (7): AW_commission_group DEBUG (7): box_depth DEBUG (7): box_height DEBUG (7): box_weight DEBUG (7): box_width DEBUG (7): бренд DEBUG (7): can_be_gift_wrapped DEBUG (7): category_ids ..... Но когда я возвращаю массив, параметры multiselect отображают только первую букву каждого атрибута_код –

3

Не нужно делать дополнительные петли, как предложил Фрэнк Кларк. Просто используйте:

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; 
} 
+0

Это должен быть принятый ответ. – phpguru

Смежные вопросы