Magento企业.1.10.1.1.客户和地址的数据集是半大的(125k +)CSR通常在此网格上(有时一次有25个并发用户).
以下是在Customer Grid.php
Block
文件中生成集合的代码片段.没有什么花哨或不寻常的,只是简单地向集合添加属性.
$collection = Mage::getResourceModel('customer/customer_collection')
->addNameToSelect()
->addAttributeToSelect('email')
->addAttributeToSelect('group_id')
->addAttributeToSelect('prod_codes')
->addAttributeToSelect('last_called_date')
->addAttributeToSelect('time_zone')
->addAttributeToSelect('salesrep')
->addAttributeToSelect('do_not_call')
->addAttributeToSelect('club_member')
->addAttributeToSelect('call_back_date')
->addAttributeToSelect('marketing_code_outcome')
->joinAttribute('billing_postcode', 'customer_address/postcode', 'default_billing', null, 'left')
->joinAttribute('billing_city', 'customer_address/city', 'default_billing', null, 'left')
->joinAttribute('billing_telephone', 'customer_address/telephone', 'default_billing', null, 'left')
->joinAttribute('billing_region', 'customer_address/region', 'default_billing', null, 'left');
$this->setCollection($collection);
Run Code Online (Sandbox Code Playgroud)
生成此查询,这是行为不当导致客户网格中的加载时间过长:
SELECT
e . *,
_table_prefix.value AS prefix,
_table_firstname.value AS firstname,
_table_middlename.value AS middlename,
_table_lastname.value AS lastname,
_table_suffix.value AS suffix,
CONCAT(IF(_table_prefix.value IS NOT NULL AND _table_prefix.value != '',
CONCAT(TRIM(_table_prefix.value), ' '),
''),
TRIM(_table_firstname.value),
IF(_table_middlename.value IS NOT NULL AND _table_middlename.value …
Run Code Online (Sandbox Code Playgroud) 我发现了Magento路由逻辑的一个问题,我想看看是否有人可以证实这一点.
Magento堆栈路由器admin,standard,然后默认并一次处理一个.Magento根据URL获取当前模块名称(请参阅Mage_Core_Controller_Varien_Router_Standard::match())
,然后检查模块是否应该由此路由器处理,基于与Magento配置中的frontName的匹配.如果找到匹配,则路由它.如果不匹配,则它继续到下一个路由器.
配置摘录:
<admin> <routers> <myroute> <use>admin</use> <args> <module>MyNamespace_MyModule</module> <frontName>myroute</frontName> </args> </myroute> </routers> </admin> <frontend> <routers> <myroute> <use>admin</use> <args> <module>MyNamespace_MyModule</module> <frontName>myroute</frontName> </args> </myroute> </routers> </frontend>
这意味着如果您的前端路由器使用与管理路由器相同的名称,则管理路由器将始终首先匹配,即使在前端页面上也是如此.您的前端页面现在将按原样路由,如果是管理员页面,使用管理员base_url
,这可能与您的商店的URL不同导致重定向损坏.
请注意,在Magento实例中,此问题不明显,其中管理基本URL与前端基本URL相同.
任何人都可以确认我对路由器逻辑的评估是否正确?
我创建了一个可配置产品并转到相关产品选项卡,并使用快速创建产品功能根据我的配置创建一堆产品.但是,这些产品中没有出现在相关产品列表中.
我注意到我创建的属性甚至没有显示在编辑产品页面上,简单或可配置产品上.
我首先为我想要添加的可配置产品创建了3个新属性,我为每个属性设置了选项,并根据默认创建了一个包含我创建的新属性的新属性集.
当我创建新的简单产品或可配置产品时,您无法看到我创建的属性.我已尝试使用常规选项卡中的属性以及自己的选项卡.但是当您尝试编辑产品时,它们永远不可见.
我怀疑我无法关联产品的原因是由于这个奇怪的问题
我正在使用1.4.2 [编辑添加我的工作流程/屏幕抓取]
好的,使用客户属性我有一个多选项选项,我已添加到管理客户网格.
$prodCode = Mage::getSingleton('eav/config')->getAttribute('customer','prod_codes');
$prodCodeOptions = $prodCode->getSource()->getAllOptions(false);
$prodOptions = array();
foreach($prodCodeOptions as $k)
$prodOptions[$k['value']] = $k['label'];
$this->addColumn('prod_codes', array(
'header' => Mage::helper('customer')->__('Product Code'),
'width' => '100',
'index' => 'prod_codes',
'type' => 'options',
'options' => $prodOptions,
'filter_condition_callback'
=> array($this, '_filterProdOptionsCondition'),
));
Run Code Online (Sandbox Code Playgroud)
我的属性已添加到Grid.php顶部的集合中:
->addAttributeToSelect('prod_codes')
这是我的_filterProdOptionsCondition
方法:
protected function _filterProdOptionsCondition($collection, $column) {
if(!$value = $column->getFilter()->getValue()) {
return;
}
$this->getCollection()->addFieldToFilter('prod_codes', array('finset' => $value));
#print($collection->getSelectSql());
}
Run Code Online (Sandbox Code Playgroud)
现在,这项工作很好,很正常,如果我只有一的选项中选择,我一次申请多个选项的客户属性,我将获得管理网格内的一个空白的结果,但是它仍然是搜索.
仔细查看未print($collection->getSelectSql());
注释我发现在逗号分隔列表中返回属性ID值.
现在问题的背景是,有一种方法或"Magento"方式在管理网格中显示这些多选项,我只是不知道?或者我是否需要简单地将逗号值展开并调用新集合来构建显示值?任何帮助赞赏!