Gestione degli attributi di prodotto raggruppati


9

Sto lavorando alla costruzione di un nuovo negozio Magento (questo è il mio primo con Magento).

Sto cercando di replicare l'aspetto di un negozio esistente per le pagine dei miei prodotti, almeno in termini di layout:

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

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

Ho capito che ho bisogno di usare prodotti raggruppati, con prodotti semplici per creare il tipo di cosa che sto cercando.

Negli esempi sopra, ogni prodotto ha attributi separati, suppongo che questi vengano fatti tramite diversi set di attributi in Magento.

Tuttavia, come possono visualizzare le diverse intestazioni / valori della tabella nel tema?

So che posso fare ->getAttributeName()o ->getAttribute('attribute_code')nel grouped.phtmlfile, ma questo comporterebbe una grande quantità di if (->getAttributeName() != '')...e avrei bisogno di cambiare il modello quando aggiungo altro.

Sono sicuro che esiste un modo per ottenere tutti gli attributi e passare in rassegna su di essi, ma come farebbe a distinguere tra l' meta_descriptionattributo (anche restituito dal $_product->getData()metodo) e un attributo che vorrei elencare nella tabella?

Come potrei ottenere qualcosa di simile a quello che hanno?

Sono anche preoccupato per le prestazioni del negozio che presenterà 5k prodotti al momento del lancio, crescendo a forse 25k-30k man mano che aggiungiamo le rimanenti scorte. Molti di questi avranno bisogno di attributi diversi, ma immagino che potrei condividere attributi tra insiemi di attributi senza troppi problemi di prestazioni?


Aggiornare:

Ho continuato a giocare con questo, ho trovato questo per ottenere tutti gli attributi di un prodotto, tuttavia non conosco ancora un modo semplice di mostrare determinati valori su una tabella di prodotti raggruppata?

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

Perché non utilizzare la proprietà "Visibile nella pagina di visualizzazione del prodotto nel front-end" dell'attributo per determinare se mostrarlo nella pagina del prodotto?
BlueC,

Risposte:


2

Questo dovrebbe essere quello di cui hai bisogno:

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

Ma questo otterrebbe solo un singolo attributo, ho bisogno di un modo per mostrare attributi diversi per prodotti diversi, come per i collegamenti che ho incluso nel PO?
Tom Green

2

Perché non creare un attributo che gli dica quali attributi mostrare?

Ho finito per creare un modulo che carica il valore di due attributi di testo per prodotti raggruppati che sono stringhe di codice di attributo. Essenzialmente un helper che esplode quella stringa dell'elenco di attributi e lo avvolge per caricare i dati degli attributi dei prodotti associati.

Crea un attributo che ho chiamato mio:

grouped_attr_array

Aggiungi l'attributo al set di attributi di progettazione del prodotto raggruppato nell'amministratore e quindi come campo separato da punto e virgola nei dati del prodotto

torque_range;torque_increments;torque_accuracy

Ho estratto questo codice dal mio modulo. Sta eseguendo un ulteriore caricamento o nascondendo gli attributi predefiniti in base al valore di un attributo e il modulo è un po 'più complesso. Ma per ottenere i dati mostrati nella tabella queste sono alcune delle funzioni principali. Spero che ti dia un'idea su cui basarti. Questo utilizza magento 1.9.2

L'assistente del modulo:

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

Ottenere dati dall'helper in groupedproduct.phtml

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

TH di

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

TD è il tavolo

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

Vorrei sviluppare il modo di scegliere quell'attributo in base agli attributi disponibili del negozio. Forse c'è anche un modo molto migliore per farlo. Non ci sono ancora riuscito.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.