Как переименовать код атрибута в Magento? - PullRequest
15 голосов
/ 04 марта 2011

Я хочу переименовать код существующего атрибута в другое.Причина в том, что поле атрибута заполнено для более 300 продуктов, и я не хочу повторно импортировать все из них только потому, что я изменил код атрибута.

Ответы [ 5 ]

30 голосов
/ 15 июня 2011

Для этого гораздо проще использовать скрипт обновления со следующим содержимым:

$installer = $this;
$installer->startSetup();
$installer->updateAttribute('catalog_product', 'old_attribute_code', array('attribute_code' => 'new_attribute_code'));
$installer->endSetup();
28 голосов
/ 05 марта 2011

Вы можете редактировать его в MySQL на eav_attribute.attribute_code. Обязательно сделайте резервные копии до и переиндексируйте все в System>Index Management впоследствии.

2 голосов
/ 13 октября 2017

Гораздо проще использовать скрипт обновления со следующим содержимым для этого:

$installer = $this;
$installer->startSetup();
$installer->updateAttribute('catalog_product', 'old_attribute_code', array('attribute_code' => 'new_attribute_code'));
$installer->endSetup();

Вместо сценария полной установки вы можете запустить его также из простого файла, просто замените

$installer = $this;

с

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

$installer  = Mage::getModel('eav/entity_setup', 'core_setup');
...
1 голос
/ 05 марта 2011

Вдохновитесь следующим сценарием:

<?php
$write = Mage::getSingleton('core/resource')->getConnection('core_write');
$write->query("
  UPDATE eav_attribute val
  SET  val.attribute_code = "SET VALUE WHAT YOU WANT"
  WHERE  val.attribute_id = (
     SELECT attribute_id FROM eav_attribute eav
     WHERE eav.entity_type_id = 4
       AND eav.attribute_code = 'price'
    )
");
0 голосов
/ 24 января 2012

После того как вы отредактируете attribute_code и переиндексируете все, что вам может понадобиться очистить кеши magento, включая Flush Magento Cache и Flush Cache Storage - или поочередно rm -rf var/cache/* (см. Предостережения ниже).

Magento использует кэши для хранения запросов, на которые ссылается Mage::getSingleton('catalog/product')->loadByAttribute('sku',$sku); и, возможно, других подобных вызовов. Запросы, подобные этому:

SELECT 1 AS `status`, `e`.`entity_id`, `e`.`type_id`, `e`.`attribute_set_id`, `e`.`entity_id`, `e`.`attribute_set_id`, `e`.`type_id`, `e`.`cost`, `e`.`created_at`, `e`.`enable_googlecheckout`, `e`.`gift_message_available`, `e`.`has_options`, `e`.`image_label`, `e`.`is_recurring`, `e`.`links_exist`, `e`.`links_purchased_separately`, `e`.`links_title`, `e`.`manufacturer`, `e`.`manufacturer_value`, `e`.`name`, `e`.`news_from_date`, `e`.`news_to_date`, `e`.`price`, `e`.`price_type`, `e`.`price_view`, `e`.`recurring_profile`, `e`.`required_options`, `e`.`shipment_type`, `e`.`short_description`, `e`.`sku`, `e`.`sku_type`, `e`.`small_image`, `e`.`small_image_label`, `e`.`special_from_date`, `e`.`special_price`, `e`.`special_to_date`, `e`.`tax_class_id`, `e`.`thumbnail`, `e`.`thumbnail_label`, `e`.`updated_at`, `e`.`url_key`, `e`.`url_path`, `e`.`visibility`, `e`.`weight`, `e`.`weight_type`, `e`.`[CUSTOM_ATTRIBUTE_CODE]`, `e`.`[CUSTOM_ATTRIBUTE_CODE]` FROM `catalog_product_flat_1` AS `e` WHERE (e.sku = '[SKU]') LIMIT 1

Подробнее о том, что делают Flush Magento Cache и Flush Cache Storage, можно узнать здесь: http://blog.nexcess.net/2011/05/21/clearing-the-cache-in-magento/

Важным пунктом в статье является

Это может показаться тривиальным для тех из вас, кто использует кеш файловой системы по умолчанию с Magento. Вы можете просто войти и вручную «rm -rf var / cache / *» очистить кеш. Но те из вас, кто использует альтернативные типы кэша (xcache, memcached, apc, db, sqlite), «Flush Magento Cache», возможно, делают не то, что вы хотите. Поэтому, когда ничего не помогает, и вы хотите убедиться, что кэш полностью очищен, обязательно нажмите «Flush Cache Storage».

Одна оговорка, прежде чем я прощаюсь, если вы используете один из типов кэша общего хранилища - например, два разных приложения, использующих один и тот же экземпляр memcached - нажатие на «Flush Cache Storage» может удалить записи кэша для этого другого приложения как Что ж. Это может быть не то, что вы хотите, так что просто обратите внимание.

...