4

您好,我想将多个组分配给特定客户,例如“Rajat the customer”属于“批发、零售商、电气”。实际上,我在每个客户的多个客户组上看到了相同的线程,但是是否有任何更新来使这种更改发生是没有帮助的。

我被卡住了,我该怎么办,因为没有任何具有相同功能的扩展可用?

4

2 回答 2

2

我找到了解决方案,

首先进入数据库并点击eav_attribute然后group_id在属性代码字段中搜索并编辑此记录。

现在第1步: -

frontend_input从变为。select_multiselect

第2步:-

backend_type从变为。static_varchar

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

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

于 2012-12-01T10:44:00.887 回答
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.php enter 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);

查找: 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);

Although I'm not sure that that piece of code will work right until all the customers have rows in the mgnt_customer_entity_varchartable which is where the new value for a customer's groups is stored when there are more than one group selected. mgnt_customer_entity由于该字段不是 varchar,因此只保留了一个组 ID 。

出于这个原因,请注意,是的,它可能会影响扩展或使用客户组功能的模块。

于 2013-08-09T03:16:26.900 回答