gpt4 book ai didi

php - 马根托。安装脚本将不会运行,更不用说创建客户属性了

转载 作者:行者123 更新时间:2023-12-02 17:35:47 25 4
gpt4 key购买 nike

我已经为此苦苦思索了 8 个小时了……

我需要(或者更确切地说,我的公司,作为一家 B2B)在客户注册时请求额外的属性。当然,Magento 本身并没有这样做,所以我们被迫走极其复杂的构建路径来实现这一点。我购买了一个模块来执行此操作,但发现代码非常困惑(更不用说根本无法工作)。

无论如何。我想我会自己推出。

所以我找到了tutorial这似乎很清楚,也很切题。所以我花了几分钟把它放在一起。没事了。

进一步的google-fu引导我herehere为了那额外的热智慧酱。


这是我得到的(运行 Magento Professional v1.11):

文件结构:

    WACI
- Customer
-- etc
--- config.xml
-- Model
--- Resource
---- Eav
----- Mysql4
------ Setup.php
-- sql
--- customer_setup
---- mysql4-install-0.1.0.php

etc/modules/WACI_All.xml

<config>
<modules>
<WACI_Customer>
<active>true</active>
<codePool>local</codePool>
</WACI_Customer>
</modules>
</config>



config.xml

<config>

<modules>
<WACI_Customer>
<version>0.1.0</version>
</WACI_Customer>
</modules>

<global>

<fieldsets>
<customer_account>
<title><create>1</create><update>1</update></title>
<phone><create>1</create><update>1</update></phone>
<agency><create>1</create><update>1</update></agency>
<fed_id><create>1</create><update>1</update></fed_id>
<ubi><create>1</create><update>1</update></ubi>
</customer_account>
</fieldsets>

<!--<models>
<customer>
<class>WACI_Customer_Model</class>
</customer>
</models> -->

<resources>
<customer_setup>
<setup>
<module>WACI_Customer</module>
<class>WACI_Customer_Model_Resource_Eav_Mysql4_Setup</class>
</setup>
<connection>
<use>core_setup</use>
</connection>
</customer_setup>
<customer_write>
<connection>
<use>core_write</use>
</connection>
</customer_write>
<customer_read>
<connection>
<use>core_read</use>
</connection>
</customer_read>
</resources>

</global>
</config>



Setup.php

<?php

class WACI_Customer_Model_Resource_Eav_Mysql4_Setup extends Mage_Eav_Model_Entity_Setup
{
public function getDefaultEntities()
{
return array(
'customer' => array(
'entity_model' => 'customer/customer',
'table' => 'customer/entity',
'increment_model' => 'eav/entity_increment_numeric',
'increment_per_store' => false,
'attribute_model' => 'customer/attribute',
'attributes' => array(
'title' => array(
'type' => 'varchar',
'input' => 'text',
'label' => 'Title / Position',
'visible' => true,
'required' => false,
'position' => 63,
),
'phone' => array(
'type' => 'varchar',
'input' => 'text',
'label' => 'Telephone',
'visible' => true,
'required' => true,
'position' => 64,
),
'agency' => array(
'type' => 'varchar',
'input' => 'text',
'label' => 'Agency / Organization',
'visible' => true,
'required' => false,
'position' => 65,
),
'fed_id' => array(
'type' => 'varchar',
'input' => 'text',
'label' => 'Fed ID',
'visible' => true,
'required' => false,
'position' => 66,
),
'ubi' => array(
'type' => 'varchar',
'input' => 'text',
'label' => 'UBI',
'visible' => true,
'required' => false,
'position' => 67,
),
),
),
);
}
}

?>



mysql4-install-0.1.0.php

<?php

Mage::log('Installing WACI_Customer');

// die ( echo 'Running This Upgrade: '.get_class($this)."\n <br /> \n"; );

$installer = $this;
$installer->installEntities();

$eavConfig = Mage::getSingleton(‘eav/config’);
$attribute_title = $eavConfig->getAttribute(‘customer’, 'title');
$attribute_phone = $eavConfig->getAttribute(‘customer’, 'phone');
$attribute_agency = $eavConfig->getAttribute(‘customer’, 'agency');
$attribute_fedid = $eavConfig->getAttribute(‘customer’, 'fed_id');
$attribute_ubi = $eavConfig->getAttribute(‘customer’, 'ubi');

// put into customer_form_attribute table so field will show in admin.
$attribute_title->setData(‘used_in_forms’, array(‘adminhtml_customer’));
$attribute_phone->setData(‘used_in_forms’, array(‘adminhtml_customer’));
$attribute_agency->setData(‘used_in_forms’, array(‘adminhtml_customer’));
$attribute_fedid->setData(‘used_in_forms’, array(‘adminhtml_customer’));
$attribute_ubi->setData(‘used_in_forms’, array(‘adminhtml_customer’));

?>

假设我理解正确,我已经把一切都准备好了……但是什么都没有,什么都没有,更什么都没有。

值得注意的是:

  • 如果删除安装类,则会出现 fatal error ,因此我认为一切都已就绪。
  • 该模块显示在 admin/system/configuration/advanced/中(已启用);它被写入core_config_data
  • 我删除了所有代码,只使用空容器(带有调试内容) - 安装脚本永远不会运行;它永远不会被写入 core_resource

问题,那么分为两部分:

<强>1。是什么阻止我的安装脚本运行?
2.创建新客户属性的逻辑合理吗?

假设是 - 我认为将其放入注册页面/客户帐户/管理员帐户应该相当简单......




……现在去喝啤酒吧。

干杯。




更新

<小时/>

正如 @AlexeiYerofeyev 所想,客户名称本身就是问题所在。更改为 CustomerAttr,脚本立即运行。

该模块随后按预期运行,但 @benmarks 的解决方案似乎更清晰,因此我重写以匹配:

config.xml 0.1.0

    <global>
<resources>
<customerattr_setup>
<setup>
<module>WACI_CustomerAttr</module>
<class>Mage_Customer_Model_Entity_Setup</class>
</setup>
<connection>
<use>core_setup</use>
</connection>
</customerattr_setup>
</resources>
<fieldsets>
<customer_account>
<title><create>1</create><update>1</update></title>
<phone><create>1</create><update>1</update></phone>
<agency><create>1</create><update>1</update></agency>
<fed_id><create>1</create><update>1</update></fed_id>
<ubi><create>1</create><update>1</update></ubi>
</customer_account>
</fieldsets>
</global>
</config>

setup.php

<?php


Mage::log('Installing WACI_CustomerAttr');

echo 'Running Upgrade: '.get_class($this)."\n <br /> \n";

//die ( 'its running' );


$installer = $this;
/* @var $installer Mage_Customer_Model_Entity_Setup */

$installer->startSetup();


$installer->addAttribute('customer','agency',
array(
'type' => 'varchar',
'label' => 'Agency / Organization',
'input' => 'text',
'required' => false,
'visible' => true,
'position' => 62,
)
);

$installer->addAttribute('customer','title',
array(
'type' => 'varchar',
'label' => 'Title / Position',
'input' => 'text',
'required' => false,
'visible' => true,
'position' => 63,
)
);

$installer->addAttribute('customer','phone',
array(
'type' => 'varchar',
'label' => 'Telephone',
'input' => 'text',
'required' => false,
'visible' => true,
'position' => 64,
)
);


$installer->addAttribute('customer','fed_id',
array(
'type' => 'varchar',
'label' => 'Fed ID',
'input' => 'text',
'required' => false,
'visible' => true,
'position' => 65,
)
);


$installer->addAttribute('customer','ubi',
array(
'type' => 'varchar',
'label' => 'UBI',
'input' => 'text',
'required' => false,
'visible' => true,
'position' => 66,
)
);


$attrs = array('agency','title','phone','fed_id','ubi');

foreach ($attrs as $item) {
$attr = Mage::getSingleton('eav/config')->getAttribute('customer', $item);
$attr->setIsUsedInForms(array('adminhtml_customer','customer_account_edit','customer_account_create'))->save();
}

$installer->endSetup();

?>

模块(和版本)已成功写入core_resource,并且属性已成功添加到eav_attribute

我可以在

中调用该字段

主题/模板/客户/表单/edit.phtml

<div class="input-box">
<label for="agency"><?php echo $this->__('Agency / Organization') ?><span class="required">*</span></label><br />
<input type="text" name="agency" id="agency" value="<?php echo $this->htmlEscape($this->getCustomer()->getAgency()) ?>" title="<?php echo $this->__('Agency') ?>" class="required-entry input-text" />
</div>

但是,不幸的是,该值没有写入 customer_entity_varchar (这最终也是我最初的脚本所做的。

因此,我已在表中获得该属性,但尚未将其添加到客户实体中。

似乎一旦我开始工作,我应该能够在需要的地方随意读取和写入该值。

对于此时我该如何进行有什么想法吗?




最终更新

<小时/>好的,解决了这个问题:

$attr->setData('used_in_forms', array('adminhtml_customer','customer_account_edit','customer_account_create'))->save();

而不是

$attr->setIsUsedInForms(array('adminhtml_customer','customer_account_edit','customer_account_create'))->save();

对于任何可能需要信息的人...

事实证明,customer_form_attribute 表中的数组并未使用之前的代码进行更新。




最佳答案

您的安装脚本可能因其安装资源名称 (customer_setup) 而无法运行。由于核心扩展 Mage_Customer 与安装资源具有相同的名称,并且它已经安装在 core_resource 表中,版本为 1.6.2.0 或类似版本,因此版本 0.1.0 的安装脚本可能会被视为太旧并被忽略。因此,您可以尝试将资源重命名为唯一的名称。

关于php - 马根托。安装脚本将不会运行,更不用说创建客户属性了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12169263/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com