您好,我想将多个组分配给特定客户,例如“Rajat the customer”属于“批发、零售商、电气”。实际上,我在每个客户的多个客户组上看到了相同的线程,但是是否有任何更新来使这种更改发生是没有帮助的。
我被卡住了,我该怎么办,因为没有任何具有相同功能的扩展可用?
您好,我想将多个组分配给特定客户,例如“Rajat the customer”属于“批发、零售商、电气”。实际上,我在每个客户的多个客户组上看到了相同的线程,但是是否有任何更新来使这种更改发生是没有帮助的。
我被卡住了,我该怎么办,因为没有任何具有相同功能的扩展可用?
我找到了解决方案,
首先进入数据库并点击eav_attribute
然后group_id
在属性代码字段中搜索并编辑此记录。
现在第1步: -
frontend_input
从变为。select
_multiselect
第2步:-
backend_type
从变为。static
_varchar
虽然这不是标准方式,但它对我有用。:)
PS。我正在使用 magento 1.7.0.2 社区版。
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_varchar
table 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 。
出于这个原因,请注意,是的,它可能会影响扩展或使用客户组功能的模块。