Magento 1.8。 如何在两个或多个组中添加一个客户? Magento 1.8。 如何在两个或多个组中添加一个客户?
答案 0 :(得分:0)
默认情况下,magento首先不提供此类型功能。
如果你想这样做,你可以使用这种黑客方法
请注意,这不是实现此目的的标准方法,我不确定应用购物车规则时的行为方式
首先转到database
并点击eav_attribute
表,然后在group_id
字段中找到attribute code
并修改此记录。
将frontend_input
从select
更改为multiselect
// ,它将允许您选择多组客户
然后
将backend_type
从static
更改为varchar
通过这种方式,您可以选择多个客户群,但是如果您想在客户网格中显示多个客户群,那么您必须遵循此
这
/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
(将其复制到/app/code/local/Mage/Adminhtml/Block/Customer/Grid.php
)
在_prepareColumns()
函数
$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') and add after: ->addAttributeToSelect('customer_group_id')
每个客户拥有多个群组似乎也会干扰分层定价(根据客户群,产品的价格会有所不同)。要在前端显示上修复此问题...在前端计算时修复基于客户组的产品定价层:
在/app/code/core/Mage/Catalog/Model/Product/Type/Price.php
第138行附近,
FIND:
$customerGroup = $this->_getCustomerGroupId($product);
ADD AFTER:
$customerGroups = explode(',',$customerGroup);
FIND:
if ($groupPrice['cust_group'] == $customerGroup && $groupPrice['website_price'] < $matchedPrice) { REPLACE WITH: if (in_array($groupPrice['cust_group'],$customerGroups) && $groupPrice['website_price'] < $matchedPrice) {
如果您使用捆绑包,请在/app/code/core/Mage/Bundle/Model/Product/Price.php
中执行相同的操作。
在创建订单或从后端信息中心重新排序时,我还没有显示客户组级价格的修复程序 - 它们只是显示标准产品价格。
最后,当弄清楚这一切时,我们确实遇到了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);
虽然我不确定那段代码是否正常工作,直到所有客户在customer_entity_varchar
表中都有行,而这些行是存储客户组的新值的时候选择了多个组。只有一个组ID仍保存在customer_entity
中,因为该字段不是varchar
。
如果您有任何疑问,请告诉我