Umgang mit gruppierten Produktattributen


9

Ich arbeite am Aufbau eines neuen Magento-Shops (dies ist mein erster mit Magento).

Ich möchte das Aussehen eines vorhandenen Shops für meine Produktseiten zumindest in Bezug auf das Layout nachbilden:

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

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

Ich habe herausgefunden, dass ich gruppierte Produkte mit einfachen Produkten verwenden muss, um die Art von Dingen zu erstellen, nach denen ich suche.

In den obigen Beispielen hat jedes Produkt separate Attribute. Ich gehe davon aus, dass diese über verschiedene Attributgruppen in Magento erfolgen.

Wie werden jedoch die verschiedenen Tabellenüberschriften / -werte im Thema angezeigt?

Ich weiß, dass ich es tun kann ->getAttributeName()oder ->getAttribute('attribute_code')in der grouped.phtmlDatei, aber dies würde zu einer enormen Menge führen if (->getAttributeName() != '')...und ich müsste die Vorlage ändern, wenn ich weitere hinzufüge.

Ich bin mir sicher, dass es eine Möglichkeit gibt, alle Attribute abzurufen und sie zu durchlaufen, aber wie würden Sie dann zwischen dem meta_descriptionAttribut (das auch von der $_product->getData()Methode zurückgegeben wird) und einem Attribut unterscheiden, das in der Tabelle aufgeführt werden soll?

Wie könnte ich etwas erreichen, das dem entspricht, was sie haben?

Ich bin auch besorgt über die Leistung des Shops, der zum Start 5.000 Produkte haben wird, und wächst auf vielleicht 25.000 bis 30.000, wenn wir unseren Restbestand hinzufügen. Viele davon benötigen unterschiedliche Attribute, aber ich schätze, ich könnte Attribute zwischen Attributgruppen ohne zu viele Leistungsprobleme gemeinsam nutzen.


Aktualisieren:

Ich habe weiter damit herumgespielt. Ich habe festgestellt, dass dies alle Produktattribute enthält. Ich kenne jedoch immer noch keine einfache Möglichkeit, bestimmte Werte in einer gruppierten Produkttabelle anzuzeigen.

$attributes = Mage::getModel('catalog/product_attribute_api')->items($_product->getAttributeSetId());
foreach($attributes as $_attribute){
    print_r($_attribute);
}

Verwenden Sie die Eigenschaft "Sichtbar auf Produktansicht im Front-End" des Attributs, um zu bestimmen, ob es auf der Produktseite angezeigt werden soll.
BlueC

Antworten:


2

Dies sollte das sein, was Sie brauchen:

$product->getResource()->getAttribute('attribute_code')->getStoreLabel();

Aber dies würde nur ein einziges Attribut erhalten. Ich brauche eine Möglichkeit, verschiedene Attribute für verschiedene Produkte anzuzeigen - gemäß den Links, die ich in das OP aufgenommen habe.
Tom Green

2

Warum nicht ein Attribut erstellen, das angibt, welche Attribute angezeigt werden sollen?

Am Ende habe ich ein Modul erstellt, das den Wert von zwei Textattributen für gruppierte Produkte lädt, die Attributcodezeichenfolgen sind. Im Wesentlichen ein Helfer, der diese Attributlistenzeichenfolge explodiert und sie durchläuft, um die Attributdaten der zugehörigen Produkte zu laden.

Erstellen Sie ein Attribut, das ich meins genannt habe:

grouped_attr_array

Fügen Sie das Attribut dem im Administrator festgelegten Designattribut des gruppierten Produkts hinzu und dann als durch Semikolons getrenntes Feld in den Produktdaten

torque_range;torque_increments;torque_accuracy

Ich habe diesen Code aus meinem Modul gezogen. Das Laden oder Ausblenden von Standardattributen basierend auf einem Attributwert wird weiter ausgeführt, und das Modul ist etwas komplexer. Um die in der Tabelle gezeigten Daten zu erhalten, sind dies einige der Kernfunktionen. Hoffentlich gibt es Ihnen eine Idee, auf der Sie aufbauen können. Dies verwendet Magento 1.9.2

Der Helfer des Moduls:

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

Abrufen von Daten vom Helfer in groupedproduct.phtml

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

TH's

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

TD ist der Tisch

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

Ich möchte die Art und Weise der Auswahl dieses Attributs anhand der verfügbaren Attribute des Geschäfts erläutern. Vielleicht gibt es auch einen viel besseren Weg, dies zu tun. Ich bin noch nicht dazu gekommen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.