2013-06-05 3 views
2

У меня около 5 000 атрибутов в моем магазине magento. Я загрузил их все через csv.Now, я хочу обновить несколько атрибутов через csv.I могу обновить атрибут количества через этот код http://www.sonassi.com/knowledge-base/magento-kb/mass-update-stock-levels-in-magento-fast/.необходимо обновить атрибут через csv в magento

Теперь я хочу, чтобы обновить еще один атрибут бренд, созданный me.I нашел этот код http://www.blog.magepsycho.com/updating-product-qty-in-magento-in-an-easier-faster-way/ я изменил, чтобы соответствовать моим потребностям, но он не работает

Пожалуйста, помогите.

Заранее спасибо.

ответ

0

Вы хотите обратить внимание на 2 поля, SKU и атрибуты, которые вы будете обновлять. В этом примере я собираюсь работать с атрибутом цвета, который является текстовым полем (код немного изменится, если вы имеете дело ни с чем, кроме текстового поля).

Во-первых, поскольку вы, вероятно, не хотите создавать полный модуль для обработки импорта, вам нужно будет инициализировать magento в новом PHP-файле. Добавьте полный путь к magento до приложения/Mage.php, если вы не используете этот скрипт в корневом пурпуре.

require_once('app/Mage.php'); 
umask(0); 
Mage::app(); 

Далее вы захотите обработать файл CSV в массив. Убедитесь, что первая строка вашего CSV содержит заголовки столбцов. Эта функция должна заботиться о обработке CSV в массив: https://gist.github.com/jaywilliams/385876

После того, что скрипт включен вы можете запустить что-то вроде этого:

$csv_products = csv_to_array('path/to/your/csv/file.csv'); 

Вы можете затем цикл по каждому продукту, выполните поиск SKU и обновление его атрибут цвета. Это предполагает, что атрибут SKU имеет нижний регистр sku, а атрибут цвета - в нижнем регистре color.

for($i=0;$i<sizeof($csv_products);$i++) { 
    $currentProduct = Mage::getModel('catalog/product')->loadByAttribute('sku',$csv_products[$i]['sku']); 
    if($currentProduct) { 
     $currentProduct->setColor($csv_products[$i]['color']); 
     $currentProduct->save(); 
     //with 5,000 products you probably want to output something here so 
     //that you can make sure the script is running. Just make sure that 
     //you don't lose track of Product not found output (from below). 
     echo 'Success '.$i. ': ' . $csv_products[$i]['sku'] ."\n"; 
    } else { 
     //we don't want to break the loop, but you'll probably want to record 
     //that this sku can't be found in magento. You can just echo this 
     //since the script will probably be running in the console. 
     echo 'Product not found: '.$csv_products[$i]['sku']."\n"; 
    } 
} 

Вам нужно будет запустить это из командной строки, поскольку это может занять некоторое время. Когда я сделал что-то похожее обновление aprox 4000 продуктов, потребовалось около 2 часов (больше атрибутов, а также выпадающих меню).

Для работы с выпадающим списком (все еще используя пример цвета) вы можете добавить что-то подобное раньше перекручивание через продукты:

$color_attribute = Mage::getModel('eav/entity_attribute')->loadByCode('catalog_product', 'color'); 
$loaded_colors = array(); 
$valuesCollection = Mage::getResourceModel('eav/entity_attribute_option_collection')->setAttributeFilter($color_attribute->getId())->setStoreFilter(Mage_Core_Model_App::ADMIN_STORE_ID, false)->load(); 
foreach ($valuesCollection as $item) { 
    $loaded_colors[strtolower($item->getValue())] = $item->getId(); 
} 

Затем вы можете установить атрибут цвета, как это вместо:

$currentProduct->setColor($loaded_colors[$csv_products[$i]['color']]); 

С помощью multi-select вам необходимо предоставить CSV для setColor. Что-то вроде этого будет работать (при условии, что ваш CSV имеет список опций, разделенных запятыми, в отдельном поле).

$colorArray = explode(',',$csv_products[$i]['color']); 
if(sizeof($colorArray) > 1) { 
    for($k = 0;$k<sizeof($colorArray);$k++) { 
     $colorArray[$k] = $loaded_colors[$colorArray[$k]]; 
    } 
    $colorString = implode(',',$colorArray); 
} else { 
    $colorString = $csv_products[$i]['color']; 
} 
$currentProduct->setColor($colorString); 

Есть способы, чтобы избежать построения массива атрибутов меток и значений до того, как скрипт начинает работать, но это потребует дополнительной Lookups и замедлить импорт вниз.

+0

Спасибо за ответ. Мой атрибут - это множественный тип select. Можете ли вы обновить код для нескольких атрибутов типа select и еще одну вещь. Можете ли вы написать код, подобный этому http://www.sonassi.com/knowledge-base/magento-kb/mass-update-stock-levels-in-magento-fast /, чтобы я мог выполнить его с помощью моего браузера. – user2344179

+0

Обновление через браузер - невероятно плохая идея. Это означает, что тайм-аут оставит вас с помощью скрипта с половиной запуска.Хотя код очень похож, это будет работать не так быстро, поскольку он обновляет и сохраняет модель продукта, а не модель запаса продукта (что намного легче). –

+0

Кроме того, просто добавлен небольшой бит о том, как работать с multi-select. Вам нужно будет скомпоновать этот код в полный скрипт, но все его там. –

Смежные вопросы