将客户分配给多个客户群到magento

时间:2012-09-21 10:00:15

标签: php magento

您好我想为特定客户分配多个组,例如“Rajat the customer”,称为“批发,零售商,电器”。实际上我在Multiple customer groups per customer上看到了相同的帖子,但是有任何更新都没有帮助做出这种改变。

我遇到了什么应该做的因为没有任何具有相同功能的扩展程序?

2 个答案:

答案 0 :(得分:2)

我找到了解决方案,

首先转到数据库并单击eav_attribute,然后在属性代码字段中搜索group_id并编辑此记录。

现在步骤1: -

frontend_inputselect更改为multiselect

第2步: -

backend_typestatic更改为varchar

虽然它不是标准的方式,但它对我有用。 :)

PS。我正在使用magento 1.7.0.2社区版。

答案 1 :(得分:1)

Rajat Modi的解决方案对我来说非常有效,谢谢你,但如果选择了多个,那么这样做会打破客户网格上的群组列的显示,并且打破了按群组过滤客户的能力。

要解决此问题,请创建此文件以用作客户群组的渲染器:/app/code/local/Mage/Adminhtml/Block/Customer/Renderer/Group.php

<?php
class Mage_Adminhtml_Block_Customer_Renderer_Group
extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract {
public function render(Varien_Object $row)
{
$value = $row->getData($this->getColumn()->getIndex());
$groups = Mage::getModel('customer/group')->getCollection()
->addFieldToFilter('customer_group_id', array('in' => explode(',', $value)));
$groupNames = array();
foreach ($groups as $group)
{
$groupNames[] = $group->getCustomerGroupCode();
}
return implode(', ', $groupNames);
}
}

然后覆盖/app/code/core/Mage/Adminhtml/Block/Customer/Grid.phpenter code here(将其复制到/app/code/local/Mage/Adminhtml/Block/Customer/Grid.php

_prepareColumns()函数中,更改此项(第95行):

$this->addColumn('group', array(
'header'    =>  Mage::helper('customer')->__('Group'),
'width'     =>  '100',
'index'     =>  'group_id',
'type'      =>  'options',
'options'   =>  $groups,
));

到此:

$this->addColumn('group_id', array(
'header'    =>  Mage::helper('customer')->__('Group'),
'width'     =>  '100',
'index'     =>  'group_id',
'type'      =>  'options',
'options'   =>  $groups,
'renderer' => 'Mage_Adminhtml_Block_Customer_Renderer_Group',
'filter_condition_callback' => array($this, '_filterGroupCondition')
));

然后它将使用该类在网格上渲染组。

同样在_prepareCollection()函数中,在第52行附近找到->addAttributeToSelect('group_id')并在之后添加:->addAttributeToSelect('customer_group_id')

每个客户拥有多个群组似乎也会干扰分层定价(根据客户群,产品的价格会有所不同)。要在前端显示器上修复它... 在前端计算时修复基于客户组的产品定价层:

/app/code/core/Mage/Catalog/Model/Product/Type/Price.php 在第138行附近,寻找: $customerGroup = $this->_getCustomerGroupId($product); 添加后: $customerGroups = explode(',',$customerGroup);

FIND: if ($groupPrice['cust_group'] == $customerGroup && $groupPrice['website_price'] < $matchedPrice) { 用。。。来代替: if (in_array($groupPrice['cust_group'],$customerGroups) && $groupPrice['website_price'] < $matchedPrice) {

如果您使用捆绑包,请在 /app/code/core/Mage/Bundle/Model/Product/Price.php 中执行相同的操作。

在创建订单或从后端信息中心重新排序时,我还没有显示客户组级价格的修复程序 - 它们只是显示标准产品价格。

最后,当弄清楚这一切时,我们确实遇到了mgnt_catalog_product_entity_group_price被清空的一些情况,我仍然不确定它为什么会发生,所以请务必进行备份。对于该表,我从SQL备份中恢复了它,但是在进入这些内容时,通常还需要重新编制索引并可能刷新Magento缓存。

当您在自己的脚本或模块中以编程方式按组搜索客户时,您可能必须考虑到它现在是多选的,例如通过这样做:

$allowedGroups = array(
array(
"finset" => array(10)
),
array(
"finset" => array(42)
)
);
$collection = Mage::getModel('customer/customer')
->getCollection()
->addAttributeToSelect('*')
->addFieldToFilter('group_id', $allowedGroups);

虽然我不确定这段代码是否正常,直到所有客户在mgnt_customer_entity_varchar表中都有行,当有多个组时,存储了客户组的新值选择。只有一个组ID仍然存储在mgnt_customer_entity中,因为该字段不是varchar。

因此,请注意,是的,它会影响扩展或使用客户群功能的模块。