Gestion des attributs de produit groupés


9

Je travaille sur la construction d'une nouvelle boutique Magento (c'est ma première avec Magento).

Je cherche à reproduire l'apparence d'une boutique existante pour mes pages produits, au moins en termes de mise en page:

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

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

J'ai compris que je dois utiliser des produits groupés, avec des produits simples pour créer le genre de chose que je recherche.

Dans les exemples ci-dessus, chaque produit a des attributs distincts, je suppose que cela se fait via différents ensembles d'attributs dans Magento.

Mais comment afficher ces différents titres / valeurs de tableau dans le thème?

Je sais que je peux le faire ->getAttributeName()ou ->getAttribute('attribute_code')dans le grouped.phtmlfichier, mais cela entraînerait une grande quantité de if (->getAttributeName() != '')...et je devrais changer le modèle lors de l'ajout de plus.

Je suis sûr qu'il existe un moyen d'obtenir tous les attributs et de les boucler, mais comment différencieriez-vous l' meta_descriptionattribut (également renvoyé par la $_product->getData()méthode) et un attribut que je voudrais répertorier dans le tableau?

Comment pourrais-je réaliser quelque chose qui ressemble à ce qu'ils ont?

Je suis également préoccupé par les performances, la boutique aura 5k produits au lancement, passant peut-être à 25k-30k à mesure que nous ajouterons notre stock restant. Beaucoup d'entre eux auront besoin d'attributs différents, mais je suppose que je pourrais partager des attributs entre des ensembles d'attributs sans trop de problèmes de performances?


Mise à jour:

J'ai continué à jouer avec cela, je l'ai trouvé pour obtenir tous les attributs d'un produit, mais je ne connais toujours pas de moyen simple d'afficher certaines valeurs sur une table de produits groupée?

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

Pourquoi ne pas utiliser la propriété "Visible sur la page d'affichage du produit sur le front-end" de l'attribut pour déterminer s'il doit s'afficher sur la page du produit?
BlueC

Réponses:


2

Cela devrait être ce dont vous avez besoin:

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

Mais cela n'obtiendrait qu'un seul attribut, j'ai besoin d'un moyen de montrer différents attributs pour différents produits - selon les liens que j'ai inclus dans l'OP?
Tom Green

2

Pourquoi ne pas créer un attribut qui lui indique quels attributs afficher?

J'ai fini par créer un module qui charge la valeur de deux attributs de texte pour les produits groupés qui sont des chaînes de code d'attribut. Essentiellement un assistant qui explose cette chaîne de liste d'attributs et boucle dessus pour charger les données d'attribut des produits associés.

Créez un attribut que j'ai appelé le mien:

grouped_attr_array

Ajoutez l'attribut à l'ensemble d'attributs de conception du produit groupé dans l'administrateur, puis sous la forme d'un champ séparé par des points-virgules dans les données du produit

torque_range;torque_increments;torque_accuracy

J'ai extrait ce code de mon module. Il fait un peu plus de chargement ou de masquage des attributs par défaut en fonction d'une valeur d'attribut et le module est un peu plus complexe. Mais pour obtenir les données indiquées dans le tableau, voici quelques-unes des fonctions essentielles. J'espère que cela vous donne une idée sur laquelle vous pouvez vous appuyer. Ceci utilise magento 1.9.2

L'assistant du module:

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

Obtention des données de l'assistant dans 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 est la table

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

Je voudrais définir la façon de choisir cet attribut en fonction des attributs disponibles du magasin. Peut-être y a-t-il une bien meilleure façon de le faire aussi. Je n'y suis pas encore arrivé.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.