Я пытаюсь обновить пользовательский атрибут с помощью сценария Magento. Все, что мне нужно сделать, это изменить метку атрибута, которая находится на таблице клиентов.
В Интернете я обнаружил, что главное — это присвоить имена сценариям обновления и соответствующую версию в config.xml
файл тоже.
Каждый раз, когда я пытаюсь это сделать, core_resource правильно обновляет / увеличивает номер версии, но метка не меняется. Я предполагаю, что это что-то в моем скрипте обновления. Что я делаю неправильно? Нужно ли ссылаться на атрибут по-другому?
В БД core_resources
:
Equisolve_GenisysUserId_setup | 0.1.4 | 0.1.4
config.xml
файл:
<?xml version="1.0"?>
<config>
<modules>
<Equisolve_GenisysUserId>
<version>0.1.4</version>
</Equisolve_GenisysUserId>
</modules>
<global>
<resources>
<Equisolve_GenisysUserId_setup>
<setup>
<module>Equisolve_GenisysUserId</module>
<class>Mage_Customer_Model_Entity_Setup</class>
</setup>
<connection>
<use>core_setup</use>
</connection>
</Equisolve_GenisysUserId_setup>
<Equisolve_GenisysUserId_write>
<connection>
<use>core_write</use>
</connection>
</Equisolve_GenisysUserId_write>
<Equisolve_GenisysUserId_read>
<connection>
<use>core_read</use>
</connection>
</Equisolve_GenisysUserId_read>
</resources>
</global>
</config>
Исходный установочный файл на install-0.1.0.php
:
<?php
$installer = $this;
$installer->startSetup();
$setup = new Mage_Eav_Model_Entity_Setup('core_setup');
$entityTypeId = $setup->getEntityTypeId('customer');
$attributeSetId = $setup->getDefaultAttributeSetId($entityTypeId);
$attributeGroupId = $setup->getDefaultAttributeGroupId($entityTypeId, $attributeSetId);
$installer->addAttribute("customer", "genisys_user_id", array(
"type" => "varchar",
"backend" => "",
"label" => "Genisys User ID",
"input" => "text",
"source" => "",
"visible" => true,
"required" => false,
"default" => "",
"frontend" => "",
"unique" => false,
"note" => "The Reference ID to the customer within Genisys / AlphaRENTAL to connect their user account with their existing information and orders.")
);$setup->addAttributeToGroup(
$entityTypeId,
$attributeSetId,
$attributeGroupId,
'genisys_user_id',
'999' //sort_order
);
$gUserAttribute = Mage::getSingleton("eav/config")->getAttribute("customer", "genisys_user_id");
$gUserAttribute->setData('used_in_forms', array('adminhtml_customer'));
$gUserAttribute->setData("is_used_for_customer_segment", true);
// Other options can be found in the customer_form_attribute database table; setting this data is required
$gUserAttribute->save();
$installer->endSetup();
?>
Сценарий обновления на upgrade-0.1.3-0.1.4.php
:
<?php
$installer = $this;
$installer->startSetup();
$installer->updateAttribute('customer','genisys_user_id','label', 'Genisys Customer Number');
$installer->endSetup();
?>
Я знаю, что в номерах версий есть пробел; между ними были файлы. Обновление до 0.1.4 «побежало», о чем свидетельствует core_resources
версия … но ярлык не обновился.
Спасибо за понимание!
Я считаю, что вам нужно сделать небольшую поправку обновить-0.1.3-0.1.4.php скрипт
Просто изменить updateAttribute
аргументы использовать frontend_label
(вместо label
):
…
$installer->updateAttribute('customer', 'genisys_user_id', 'frontend_label', 'Genisys Customer Number');
…
Я столкнулся с той же проблемой, что и ОП, и обнаружение этого вопроса показало, что произошло что-то не интуитивное.
В то время как addAttribute(…)
ожидает label
ключ в массиве атрибутов кажется, что updateAttribute(…)
не понимает label
в качестве поля-аргумента.
Я проверил eav_attribute
стол и обнаружил, что нет label
столбец, но есть frontend_label
колонка:
Я не могу сделать много выводов о том, почему эти два, казалось бы, сплоченных метода имеют такое разобщение, но, надеюсь, это поможет другим с такой же проблемой.
Увидеть: http://www.webguys.de/magento-1/eav-attribute-setup для мелкого песка.
Других решений пока нет …