您好我想为特定客户分配多个组,例如“Rajat the customer”,称为“批发,零售商,电器”。实际上我在Multiple customer groups per customer上看到了相同的帖子,但是有任何更新都没有帮助做出这种改变。
我遇到了什么应该做的因为没有任何具有相同功能的扩展程序?
答案 0 :(得分:2)
我找到了解决方案,
首先转到数据库并单击eav_attribute
,然后在属性代码字段中搜索group_id
并编辑此记录。
现在步骤1: -
将frontend_input
从select
更改为multiselect
。
第2步: -
将backend_type
从static
更改为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。
因此,请注意,是的,它会影响扩展或使用客户群功能的模块。