2013-01-10 16 views
7

Mam atrybut, który ma tysiące opcji. Opcje są tworzone programowo przez skrypt, który importuje wszystkie moje produkty z kanału. Strona działa dość wolno, więc pomyślałem, że pozbędę się wszystkich przestarzałych opcji. Problem polega na tym, że nie mogę załadować strony edycji z poziomu administratora magento. Jak mogę zidentyfikować opcje atrybutów za pomocą zapytania MySQL? Czy mogę programowo usunąć wszystkie opcje atrybutów?Magento usuń wartości atrybutów/opcje MySQL

Dzięki!

Odpowiedz

10

to daje listę wszystkich opcji

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

a to pozwala na aktualizację atrybutu i opcje

$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, Dzięki za odpowiedź. Jestem początkujący, więc potrzebuję więcej pomocy. Jak mogę użyć tego skryptu, aby usunąć wszystkie opcje atrybutów? Jeśli muszę pisać w każdym opcjach atrybutów, zajmie to wiele godzin. Dzięki – Haim

+0

Możesz otrzymać listę wszystkich opcji dla atrybutu z pierwszym skryptem. Jak rozumiem masz listę przestarzałych opcji, możesz napisać pętlę, która sprawdza, czy wartość (etykieta) jest nieaktualna i dodaj flagę do tej opcji. Na koniec - uruchom metodę 'addAttributeOption()'. –

+0

lub szukasz pełnego rozwiązania? –

0

Tutaj usunąć to zapytanie, który pokazuje relacje do tabel, które są zaangażowany. Mam nadzieję, że to pomoże. W ten sposób możesz uzyskać je dla każdego widoku sklepu.

Aby sprowadzić etykietę widoku sklepu atrybutu (lub czegokolwiek innego, który jest przechowywany wewnątrz tych tabelach) używać:

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

Aby uzyskać wartość opcji, które są związane z danym opcją obsługi użyć czegoś tak:

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

lub użyć niektórych dołącza się połączyć tych tabel bezpośrednio

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

Wiem, że to nie jest sposób na usunięcie twoich wartości, ale może pomaga ci zidentyfikować sposób pobierania potrzebnych zestawów danych.

Wszystkiego najlepszego.

0

To jak ja go o to robi

// 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

Tutaj jestem wyjaśnić, w jaki sposób usunąć wszystkie przypisują wartość opcji programowo w Magento. możesz także usunąć wartość opcji atrybutu z panelu administracyjnego magento, ale jeśli jest tak wiele wartości opcji atrybutu, to zabiera tyle czasu, aby administrator mógł dodać wartość opcji atrybutu programistycznie w magento. W tym celu wystarczy utworzyć plik deleteattributeoptions.php w folderze głównym magento, dodać do niego poniższy kod i zamienić ATTRIBUTE_CODE_HERE wraz z kodem atrybutu.

<?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); 

?> 

Mam nadzieję, że ci to pomoże. :)