2013-01-10 15 views
7

Ho un attributo che ha migliaia di opzioni. Le opzioni sono create a livello di programmazione da uno script che importa tutti i miei prodotti da un feed. Il sito è in esecuzione piuttosto lento, quindi ho pensato di liberarmi di tutte le opzioni obsolete. Il problema è che non riesco a caricare il modulo di pagina di modifica dell'amministratore di Magento. Come posso identificare le opzioni degli attributi con una query MySQL? O come posso cancellare tutte le opzioni degli attributi a livello di programmazione?Magento cancella valori/opzioni degli attributi MySQL

Grazie!

risposta

10

questo vi darà l'elenco di tutte le opzioni

$attribute_code = 'color'; 
$attribute = Mage::getModel('eav/config')->getAttribute('catalog_product',$attribute_code); 
$options = $attribute->getSource()->getAllOptions(); 

e questo consente di aggiornare attributi e rimuovere le opzioni

$options['delete'][$option_id] = true; 
$options['value'][$option_id] = true; 

$options['delete'][$another_option_id] = true; 
$options['value'][$another_option_id] = true; 

// (...) 

$setup = new Mage_Eav_Model_Entity_Setup('core_setup'); 
$setup->addAttributeOption($options); 
+0

Pavel, Grazie per la risposta. Sono un principiante quindi ho bisogno di un po 'più di aiuto per favore. Come posso usare questo script per cancellare tutte le opzioni degli attributi? Se ho bisogno di scrivere in tutte le opzioni di attributo ci vorranno ore. Grazie – Haim

+0

È possibile ottenere l'elenco di tutte le opzioni per l'attributo con il primo script. Come ho capito tu hai un elenco di opzioni obsolete, puoi scrivere un ciclo che controlla se il valore (etichetta) non è aggiornato e aggiungi il flag di cancellazione a questa opzione. Alla fine - esegui il metodo 'addAttributeOption()'. –

+0

o stai cercando la soluzione completa? –

0

Ecco una query che mostra le relazioni con le tabelle che sono involed. Spero che aiuti. È possibile ottenerli singolarmente per ogni visualizzazione del negozio in questo modo.

Per recuperare l'etichetta per una vista vendite di un attributo (o qualsiasi altra cosa che viene memorizzato all'interno di queste tabelle) utilizzare:

SELECT 
    EA.attribute_id, 
    EA.entity_type_id, 
    EA.attribute_code, 
    EAL.value AS label 
FROM `magento_eav_attribute` AS EA 
    INNER JOIN `magento_eav_attribute_option` 
     AS EAO ON EAO.attribute_id = EA.attribute_id 
    INNER JOIN `magento_eav_attribute_label` 
     AS EAL ON EAL.attribute_id = EA.attribute_id 
WHERE 
    EAL.store_id = 0 AND 
    EA.attribute_code = 'color' LIMIT 0,1'; 

Per ottenere il valore di opzione che è legato alla vostra opzione per gestire l'uso qualcosa in questo modo:

SELECT * 
    FROM `magento_eav_attribute_option_value` 
    WHERE store_id = 0 
     AND option_id = YOUR_OPTION_ID; 

o usare qualche unisce per collegare queste tabelle direttamente

SELECT 
     EA.attribute_id, 
     EA.entity_type_id, 
     EA.attribute_code, 
     EAOV.option_id, 
     EAOV.value_id, 
     EAOV.value, 
     EAL.value AS label 
     FROM `magento_eav_attribute` AS EA 
     INNER JOIN `magento_eav_attribute_option` 
      AS EAO ON EAO.attribute_id = EA.attribute_id 
     INNER JOIN `magento_eav_attribute_option_value` 
      AS EAOV ON EAOV.option_id = EAO.option_id 
     INNER JOIN `magento_eav_attribute_label` 
      AS EAL ON EAL.attribute_id = EA.attribute_id 
    WHERE 
    EAOV.store_id = 0 AND 
    EAOV.option_id = YOUR_OPTION_ID AND 
    EAL.store_id = '0' AND 
    EA.attribute_code = 'color'; 

So che questo non è un modo per cancellare i tuoi valori, ma forse ti aiuta a identificare un modo per recuperare i set di dati di cui hai bisogno.

Tutto il meglio.

0

Questo è come vado a farlo

// Deleting attribute options by GUID 

$setup = new Mage_Eav_Model_Entity_Setup('core_setup'); 
$attribute = Mage::getSingleton("eav/config")->getAttribute("customer", "position"); 

//Values have to be deleted one at a time 
// Eav Setup.php 
$updates = array(); 
foreach ($attribute->getSource()->getAllOptions() as $option) { 
     $update['value'] = array(); 
     $update['delete'][$option['value']] = true; 
     $update['attribute_id'] = $attribute->getId(); 
     $update['value'][$option['value']] = true; 
     $updates[] = $update; 
} 

$setup->addAttributeOption($updates); 
die(); 
0

Ecco, io sono spiegare come eliminare tutti attribuiscono valore di opzione di programmazione in Magento. puoi anche eliminare il valore dell'opzione dell'attributo dal pannello di amministrazione di Magento, ma se ci sono così tanti valori di opzioni di attributo, ci vuole così tanto tempo da eliminare dall'amministratore in modo da poter aggiungere programmaticamente il valore dell'opzione in Magento. Per questo è sufficiente creare il file deleteattributeoptions.php nella cartella radice di Magento aggiungere inserire sotto il codice e Sostituire ATTRIBUTE_CODE_HERE con il codice dell'attributo.

<?php 

require_once 'app/Mage.php';$app = Mage::app('admin');umask(0); 
$attribute_code = 'ATTRIBUTE_CODE_HERE'; 
$attribute = Mage::getModel('eav/config')->getAttribute('catalog_product', $attribute_code); 
$options = $attribute->getSource()->getAllOptions(); 
$optionsDelete = array(); 
foreach($options as $option) { 
if ($option['value'] != "") { 
$optionsDelete['delete'][$option['value']] = true; 
$optionsDelete['value'][$option['value']] = true; 
} 
} 
$installer = new Mage_Eav_Model_Entity_Setup('core_setup'); 
$installer->addAttributeOption($optionsDelete); 

?> 

Spero che ti possa aiutare. :)

Problemi correlati