Обработка сгруппированных атрибутов продукта

9

Я работаю над созданием нового магазина Magento (это мой первый проект с Magento).

Я пытаюсь воспроизвести внешний вид существующего магазина для моих страниц с товарами, по крайней мере, с точки зрения макета:

http://www.panamericantool.com/cobalt-drills/drill-stops.html

http://www.panamericantool.com/screw-driver-bits/paint-cutters.html

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

В приведенных выше примерах каждый продукт имеет отдельные атрибуты, я предполагаю, что они выполняются с помощью различных наборов атрибутов в Magento.

Однако как они отображают заголовки / значения таблиц в теме?

Я знаю, что могу сделать ->getAttributeName()или ->getAttribute('attribute_code')в grouped.phtmlфайле, но это приведет к огромному количеству, if (->getAttributeName() != '')...и мне нужно будет изменить шаблон при добавлении больше.

Я уверен, что есть способ получить все атрибуты и перебрать их, но тогда как бы вы различали, скажем, meta_descriptionатрибут (также возвращаемый $_product->getData()методом) и атрибут, который я хотел бы перечислить в таблице?

Как я мог достичь чего-то похожего на то, что у них есть?

Я также обеспокоен тем, что в магазине будет 5 тыс. Продуктов при запуске, и, возможно, он увеличится до 25-30 тыс., Когда мы добавим наш оставшийся запас. Многие из них будут нуждаться в разных атрибутах, но я предполагаю, что смогу обмениваться атрибутами между наборами атрибутов без особых проблем с производительностью?


Обновить:

Я продолжал играть с этим, я нашел это, чтобы получить все атрибуты продуктов, однако я все еще не знаю простого способа отображения определенных значений в сгруппированной таблице продуктов?

$attributes = Mage::getModel('catalog/product_attribute_api')->items($_product->getAttributeSetId());
foreach($attributes as $_attribute){
    print_r($_attribute);
}
Том Грин
источник
Почему бы не использовать свойство атрибута «Видимый на странице просмотра продукта в интерфейсе», чтобы определить, следует ли отображать его на странице продукта?
BlueC

Ответы:

2

Это должно быть то, что вам нужно:

$product->getResource()->getAttribute('attribute_code')->getStoreLabel();
benmarks
источник
Но это будет просто получить один атрибут, мне нужен способ показать разные атрибуты для разных продуктов - по ссылкам, которые я включил в ОП?
Том Грин
2

Почему бы не создать атрибут, который говорит ему, какие атрибуты показывать?

Я закончил тем, что создал модуль, который загружает значение двух текстовых атрибутов для сгруппированных продуктов, которые являются строками кода атрибута. По сути, помощник, который анализирует строку списка атрибутов и зацикливается на ней для загрузки данных атрибутов связанных продуктов.

Создайте атрибут, который я назвал моим:

grouped_attr_array

Добавьте атрибут к атрибуту дизайна сгруппированного продукта, установленному в администраторе, а затем в виде поля, разделенного точкой с запятой, в данных продукта.

torque_range;torque_increments;torque_accuracy

Я вытащил этот код из моего модуля. Он выполняет дополнительную загрузку или скрытие атрибутов по умолчанию, основанных на значении атрибута, и модуль немного сложнее. Но чтобы получить данные, показанные в таблице, это некоторые из основных функций. Надеюсь, это даст вам идею для дальнейшего развития. Это использует magento 1.9.2

Помощник модуля:

public function findAttributes($product, $attributes)
{
    //determined by attribute with id to add additional attributes to the table
    //string needs to be ; separated in ADMIN
    $strattributes = $product->getResource()->getAttribute('grouped_attr_array')->getFrontend()->getValue($product);
    if ($strattributes) {
        $strattributes = explode(';', $strattributes, 5);
        foreach ($strattributes as $additionAttribute) {
            //make sure these are valid attributes
            if ($product->getResource()->getAttribute($additionAttribute)) {
                array_push($attributes, $additionAttribute);
            }
        }
    }
}

public function groupedAttrDump($groupedProduct, $attributes)
{
    $cells = [];
    foreach ($attributes as $attrCode) {
        $attrText = $groupedProduct->getResource()->getAttribute($attrCode);
        if($attrText){
            array_push($cells, $attrText->getFrontend()->getValue($groupedProduct));
        }
    }
    return $cells;
}

public function groupedAttrHeaders($currentProduct, $attributes)
{
    $theads = [];
    foreach ($attributes as $attrCode) {
        $headerText = $currentProduct->getResource()->getAttribute($attrCode);
        if($headerText){
            $headerText = $headerText->getStoreLabel();
            array_push($theads,$headerText);
        }

    }
    return $theads;
}

Получение данных от помощника в groupedproduct.phtml

$attrrSetName = Mage::getModel("eav/entity_attribute_set")->load($_product->getAttributeSetId())->getAttributeSetName();
$tableAttributes = Mage::helper('groupedtable')->findAttributes($_product, $attrrSetName);

TH-х

     <?php foreach (Mage::helper('groupedtable')->groupedAttrHeaders($_product, $tableAttributes) as $attrLabel ): ?>
        <th><?php echo $attrLabel ?> </th>
     <?php endforeach; ?>

ТД стол

<?php foreach (Mage::helper('groupedtable')->groupedAttrDump($_associatedProduct, $tableAttributes) as $attr ):?>
        <td><?php if($attr != 'No'){ echo $attr; } ?></td>
   <?php endforeach; ?>

Я хотел бы найти способ выбора этого атрибута на основе доступных атрибутов магазина. Может быть, есть и лучший способ сделать это тоже. Еще не дошли до этого.

asherrard
источник