2009-10-06 11 views
6

Sto costruendo un negozio Magento per un cliente e vorrei aggiungere un attributo a tutti i prodotti che funzionano come un elenco a discesa. Come l'attributo 'Produttore'.Magento: come precompilare i valori dell'attributo dropdown di un prodotto

Tuttavia, anziché immettere manualmente l'elenco di valori per l'attributo, vorrei che i valori venissero compilati da un sito esterno. Pertanto, ogni volta che crei un nuovo prodotto o ne modifichi uno esistente, il menu a discesa viene popolato con l'elenco aggiornato di valori che è stato recuperato da un sito remoto. L'elenco non deve essere recuperato una sola volta durante la creazione dell'attributo, ma ogni volta che un prodotto viene creato o modificato.

Ad esempio, si supponga di poter ottenere un elenco di tutti i produttori tramite arricciatura da un sito remoto. I nomi in questa lista sono occasionalmente modificati o aggiunti, tuttavia gli ID rimangono gli stessi così dovrebbero essere usati dietro le quinte. Come prefillerai i valori del menu a discesa del produttore?

So come creare un'estensione di base personalizzata, ma estendere il backend adminhtml è una novità per me.

Qualsiasi aiuto è apprezzato.

+0

Accettare una risposta? – ColinM

+0

@ColinM Oops. Fatto. :) –

risposta

10

Gli attributi del prodotto Magento sono estremamente flessibili, ma avere valori dinamici per prodotto significherebbe che avresti bisogno di un attributo per prodotto che non ha molto senso quindi presumo che questi valori di attributo condividano alcune cose in comune tra i prodotti nel tuo memorizzare in modo da avere un numero limitato di attributi (o uno?). Per ciascun attributo di questo tipo è necessario creare preventivamente l'attributo e il modello di backend, quindi utilizzare un processo cron o un evento aggiornare le opzioni del valore dell'attributo dall'API e memorizzarle nella cache localmente nel database o in un altro metodo. È possibile aggiungere un attributo nel vostro installatore modulo come questo:

$installer->addAttribute('catalog_product', 'my_attr_code', array(
    'label' => 'Attribute Name', 
    'required' => false, 
    'input' => 'select', 
    'source' => 'namespace/source', 
    'default' => 'none', 
    'position' => 1, 
    'sort_order' => 3, 
)); 

O rotolare il proprio istruzione di inserimento SQL per la tabella eav_attribute. Assicurati di assegnare il tuo nuovo attributo a un attributo impostato nel back-end in modo che sia utilizzabile con i tuoi prodotti.Quindi si crea un modello a My_Namespace_Model_Source che si estende Mage_Eav_Model_Entity_Attribute_Source_Table (supponendo che si desidera una selezione ingresso per i vostri valori degli attributi) e implementa al minimo i seguenti metodi:

getAllOptions() 
getOptionText($value) 

Quindi questi tirerebbe dalle opzioni dinamiche che vengono memorizzati nella cache a livello locale e per la maggior parte il tuo nuovo attributo si comporterà come qualsiasi altro in Magento. Assicurati di utilizzare il caching intelligente perché questi metodi potrebbero essere colpiti più volte in un caricamento di una pagina. Potrebbe esserci un evento che potreste osservare chiamato prima che un prodotto crei o modifichi una pagina, altrimenti basta sovrascrivere una classe o un controller o utilizzare un'attività di Magento cron.

Modifica: è anche possibile utilizzare i modelli dell'attributo Magento esistenti e creare i valori delle opzioni tramite l'API esistente ma presumo che per eseguire la sincronizzazione o per qualche altro motivo potrebbero essere necessari alcuni metadati aggiuntivi, nel qual caso si vorrà avere un modello di back-end personalizzato.

4

Non è una buona risposta, immagino, ma qui va, vorrei prima aggiungere un attributo e poi decodificarlo per vedere come è popolato.

Poi, nella pagina di visualizzazione del prodotto sul admin, vorrei ignorare del ProductController modificare e nuove azioni, per caricare i valori con ricciolo per tale attributo (si può cercare l'id dell'attributo nella tabella eav_attribute)

È quindi possibile impacchettarlo come estensione personalizzata, in modo da non modificare direttamente il codice di base. In bocca al lupo!

4

È necessario cercare Magento Event Dispatchers.

In pratica, ogni volta che si verifica un evento: aggiornamento di un prodotto, invio di un ordine, eliminazione di qualcosa ecc. - un messaggio viene inviato attraverso il sistema. Questi messaggi possono essere catturati e possono quindi attivare i metodi che hai creato. Per ottenere ciò che desideri, devi prendere l'evento che viene attivato quando un prodotto viene creato e aggiornato e ottenere questo per eseguire un metodo da uno dei tuoi moduli personalizzati. Questo metodo prenderebbe quindi il valore dal sito remoto e aggiornerà il prodotto con esso.

Dopo una rapida ricerca su Google, ho trovato il seguente articolo:

http://blog.baobaz.com/en/tag/magento-events

È possibile trovare ciò che gli eventi di Magento sono scatenati da guardando il codice apposito modulo.

Problemi correlati