在Magento安装脚本中更新属性

时间:2016-04-19 16:44:17

标签: php magento entities

我正在尝试通过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&#34;运行&#34;由core_resources版本证明......但标签尚未更新。

感谢您的见解!

1 个答案:

答案 0 :(得分:4)

我相信您需要对升级-0.1.3-0.1.4.php 脚本进行小幅调整

只需修改updateAttribute参数即可使用frontend_label(而不是label):

…
$installer->updateAttribute('customer', 'genisys_user_id', 'frontend_label', 'Genisys Customer Number');
…

我正面临与OP相同的问题,发现这个问题表明发生了一些不直观的事情。

虽然addAttribute(…)期望属性数组中有label个键,但updateAttribute(…)似乎不理解label作为字段参数。

我查看了eav_attribute表,发现没有label列,但有frontend_label列:

enter image description here

我无法得出很多结论,为什么这两个看似有凝聚力的方法有这种脱节,但希望这可以帮助其他人解决同样的问题。

请参阅:http://www.webguys.de/magento-1/eav-attribute-setup了解细节。