你好,我想多组分配给特定的客户,如“拉雅客户” belogs为“批发,零售,电”。 其实我看到了相同的线程每个客户多的客户群 ,但它是没有帮助的不存在任何更新,以使这种变化的发生。
我坚持我应该怎么办,因为没有任何可用的扩展具有相同的功能?
你好,我想多组分配给特定的客户,如“拉雅客户” belogs为“批发,零售,电”。 其实我看到了相同的线程每个客户多的客户群 ,但它是没有帮助的不存在任何更新,以使这种变化的发生。
我坚持我应该怎么办,因为没有任何可用的扩展具有相同的功能?
我找到了解决办法,
首先,进入数据库,并单击eav_attribute
,然后搜索group_id
在属性代码字段并编辑该记录。
现在第1步: -
改变frontend_input
从select
到multiselect
。
第2步:-
改变backend_type
从static
到varchar
。
虽然它不是标准的方式,但它为我工作。 :)
PS。 我使用的Magento 1.7.0.2社区版。
拉雅莫迪的解决方案工作得很好,我感谢你,但这样做没有打破,如果超过一个被选中的客户网格组列的显示,加上打破了组筛选客户的能力。
为了解决这个问题,创建该文件的渲染器的客户群体使用: /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,FIND: $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。
出于这个原因,要知道,是的,它会影响其扩展或使用客户群体的功能模块。