Поводження згрупованих атрибутів продукту


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();

Але це просто отримало б один атрибут, мені потрібен спосіб відображення різних атрибутів для різних продуктів - відповідно до посилань, які я включив до ОП?
Том Грін

2

Чому б не створити атрибут, який підказує, які атрибути відображати?

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

Створіть атрибут, який я назвав mine:

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

TD - це стіл

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

Я хотів би розробити спосіб вибору цього атрибуту на основі наявних у магазині атрибутів. Можливо, є і набагато кращий спосіб зробити це теж. Ще не дійшли до цього.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.