Magento:客户注册页面中的集团领域

时间:2015-01-26 11:13:16

标签: php magento module

有没有办法避免编辑Magento Core( app / code / core / Mage / Customer / controllers / AccountController.php )文件,以便在注册页面中启用“客户组”选项字段?

搜索它,唯一成功的方法是编辑前面提到的核心文件,找到这段代码:

$customer->getGroupId();

将其替换为:

if($this->getRequest()->getPost('group_id'))
   { $customer->setGroupId($this->getRequest()->getPost('group_id'));
} else {
   $customer->getGroupId();
} 

最佳案例场景是以某种方式将此代码包含在本地模块文件中,例如 app / code / local / Enterprise / Module / controllers / AccountController.php 。我实际上有一个模块来包含该功能,但仍未找到要在模块上添加的正确代码。

1 个答案:

答案 0 :(得分:1)

始终建议为每个新功能创建一个新模块,但如果只更改一行代码,也可以将修改后的文件放在以下路径中(注意通过local替换core): app/code/local/Mage/Customer/controllers/AccountController.php

然后,您可以还原您的核心文件,自动加载器仍应获得您的修改版本。这样您就可以避免修改核心,但请记住,当您将Magento升级到新版本时,您可能还需要更新此文件。

点击此链接了解详情:http://www.magentocommerce.com/wiki/5_-_modules_and_development/0_-_module_development_in_magento/how_to_create_a_local_copy_of_app_code_core_mage

以正确的方式做到: 在模块中扩展控制器。

将它放在config.xml中:

<frontend>
    <routers>
        <customer>
            <args>
                <modules>
                    <company_module before="Mage_Customer">Company_Module</company_module>
                </modules>
            </args>
        </customer>
    </routers>
</frontend>

然后,创建控制器文件app/code/local/Company/Module/controllers/AccountController.php

<?php
require_once 'Mage/Customer/controllers/AccountController.php';
class Company_Modulename_AccountController extends       Mage_Customer_AccountController
{
 /**
  * Get Customer Model
  *
  * @return Mage_Customer_Model_Customer
  */
  protected function _getCustomer()
  {
    $customer = $this->_getFromRegistry('current_customer');
    if (!$customer) {
        $customer = $this->_getModel('customer/customer')->setId(null);
    }
    if ($this->getRequest()->getParam('is_subscribed', false)) {
        $customer->setIsSubscribed(1);
    }
    /**
     * Initialize customer group id
     */
    if($this->getRequest()->getPost('group_id')) { 
        $customer->setGroupId($this->getRequest()->getPost('group_id'));
    } else {
        $customer->getGroupId();
    } 
    return $customer;
  }
}