Magento Mass Action,网格不更新
Magento Mass Action, grid does not update
好吧,这不是我的第一次大规模行动,但这确实让我摸不着头脑。
我制作了一个模块CLR_exportMassAction。毫无问题地将其部署在良好的旧本地主机上。但是,当我将文件移出到我的服务器时,什么也没有发生。我已经重新索引并刷新了缓存。我有一种感觉,它的一些配置很奇怪,而且 magento 没有挂钩我的模块。
这是我的代码:
\local\CLR\exportMassAction\etc\config.xml
<?xml version="1.0" encoding="UTF-8"?>
<config>
<global>
<models>
<CLR_exportMassAction>
<class>CLR_exportMassAction_Model</class>
</CLR_exportMassAction>
</models>
</global>
<adminhtml>
<events>
<adminhtml_block_html_before>
<observers>
<CLR_exportMassAction>
<type>singleton</type>
<class>CLR_exportMassAction/observer</class>
<method>addExportMassactionToProductGrid</method>
</CLR_exportMassAction>
</observers>
</adminhtml_block_html_before>
</events>
</adminhtml>
<admin>
<routers>
<adminhtml>
<args>
<modules>
<CLR_exportMassAction before="Mage_Adminhtml">CLR_exportMassAction_Adminhtml</CLR_exportMassAction>
</modules>
</args>
</adminhtml>
</routers>
</admin>
</config>
local\CLR\exportMassAction\Model\Observer.php
<?php
class CLR_exportMassAction_Model_Observer
{
public function addExportMassactionToProductGrid($observer)
{
$block = $observer->getBlock();
if($block instanceof Mage_adminHtml_Block_Catalog_Product_Grid) {
$block ->getMassactionBlock()->addItem('export', array(
'label' => Mage::helper('catalog')->__('Export to CSV'),
'url' => $block->getUrl('*/*/massExport', array('_current'=>true)),
));
}
}
}
local\CLR\exportMassAction\controllers\Adminhtml\Catalog\ProductController.php
<?php
class CLR_exportMassAction_Adminhtml_Catalog_ProductController extends Mage_Adminhtml_Controller_Action
{
public function massExportAction()
{
$productIds = $this->getRequest()->getParam('product');
if (!is_array($productIds)) {
$this->_getSession()->addError($this->__('Please select product(s).'));
$this->_redirect('*/*/index');
}
else {
//write headers to the csv file
$content = "id,name,url,sku\n";
try {
foreach ($productIds as $productId) {
$product = Mage::getSingleton('catalog/product')->load($productId);
$content .= "\"{$product->getId()}\",\"{$product->getName()}\",\"{$product->getProductUrl()}\",\"{$product->getSku()}\"\n";
}
} catch (Exception $e) {
$this->_getSession()->addError($e->getMessage());
$this->_redirect('*/*/index');
}
$this->_prepareDownloadResponse('export.csv', $content, 'text/csv');
}
}
}
app\etc\CLR_exportMassAction.xml
<config>
<modules>
<CLR_exportMassAction>
<active>true</active>
<codePool>community</codePool>
</CLR_exportMassAction>
</modules>
</config>
我只是在寻找一个真正关于从这里去哪里的指针;我不确定下一个故障排除选项是什么。
最有可能的是,您的本地设置 运行 在不区分大小写的文件系统上(您在 Windows 上吗?),而您的服务器 运行 在区分大小写的文件系统上文件系统(可能 Linux)。
Magento 做了很多字符串操作来将 class 名称转换为文件名等。例如,请参阅 Varien_Autoload::autoload()
,我认为这是导致您的问题的原因:
$classFile = str_replace(' ', DIRECTORY_SEPARATOR, ucwords(str_replace('_', ' ', $class)));
如果你插入你的观察者class(CLR_exportMassAction_Model_Observer
,解析后CLR_exportMassAction/observer
),你会得到:
str_replace('_', ' ', 'CLR_exportMassAction_Model_Observer')
= 'CLR exportMassAction Model Observer'
ucwords('CLR exportMassAction Model Observer')
= 'CLR ExportMassAction Model Observer'
str_replace(' ', DIRECTORY_SEPARATOR, 'CLR ExportMassAction Model Observer')
= 'CLR/ExportMassAction/Model/Observer'
因此,Magento 正在寻找一个名为 CLR/ExportMassAction/Model/Observer.php
的文件,但您的文件名为 CLR/exportMassAction/Model/Observer.php
- 请参阅小写 e
?
可能还有其他一些大小写问题,但这是最突出的一个。
我建议将您的模块命名空间从 CLR
重命名为 Clr
,并将您的实际模块从 exportMassAction
重命名为 Exportmassaction
,并确保您的所有 class 名称和文件名精确匹配。这是避免 Magento 大小写问题的最简单方法(即使您在同一标识符中有多个单词)。
好吧,这不是我的第一次大规模行动,但这确实让我摸不着头脑。
我制作了一个模块CLR_exportMassAction。毫无问题地将其部署在良好的旧本地主机上。但是,当我将文件移出到我的服务器时,什么也没有发生。我已经重新索引并刷新了缓存。我有一种感觉,它的一些配置很奇怪,而且 magento 没有挂钩我的模块。
这是我的代码: \local\CLR\exportMassAction\etc\config.xml
<?xml version="1.0" encoding="UTF-8"?>
<config>
<global>
<models>
<CLR_exportMassAction>
<class>CLR_exportMassAction_Model</class>
</CLR_exportMassAction>
</models>
</global>
<adminhtml>
<events>
<adminhtml_block_html_before>
<observers>
<CLR_exportMassAction>
<type>singleton</type>
<class>CLR_exportMassAction/observer</class>
<method>addExportMassactionToProductGrid</method>
</CLR_exportMassAction>
</observers>
</adminhtml_block_html_before>
</events>
</adminhtml>
<admin>
<routers>
<adminhtml>
<args>
<modules>
<CLR_exportMassAction before="Mage_Adminhtml">CLR_exportMassAction_Adminhtml</CLR_exportMassAction>
</modules>
</args>
</adminhtml>
</routers>
</admin>
</config>
local\CLR\exportMassAction\Model\Observer.php
<?php
class CLR_exportMassAction_Model_Observer
{
public function addExportMassactionToProductGrid($observer)
{
$block = $observer->getBlock();
if($block instanceof Mage_adminHtml_Block_Catalog_Product_Grid) {
$block ->getMassactionBlock()->addItem('export', array(
'label' => Mage::helper('catalog')->__('Export to CSV'),
'url' => $block->getUrl('*/*/massExport', array('_current'=>true)),
));
}
}
}
local\CLR\exportMassAction\controllers\Adminhtml\Catalog\ProductController.php
<?php
class CLR_exportMassAction_Adminhtml_Catalog_ProductController extends Mage_Adminhtml_Controller_Action
{
public function massExportAction()
{
$productIds = $this->getRequest()->getParam('product');
if (!is_array($productIds)) {
$this->_getSession()->addError($this->__('Please select product(s).'));
$this->_redirect('*/*/index');
}
else {
//write headers to the csv file
$content = "id,name,url,sku\n";
try {
foreach ($productIds as $productId) {
$product = Mage::getSingleton('catalog/product')->load($productId);
$content .= "\"{$product->getId()}\",\"{$product->getName()}\",\"{$product->getProductUrl()}\",\"{$product->getSku()}\"\n";
}
} catch (Exception $e) {
$this->_getSession()->addError($e->getMessage());
$this->_redirect('*/*/index');
}
$this->_prepareDownloadResponse('export.csv', $content, 'text/csv');
}
}
}
app\etc\CLR_exportMassAction.xml
<config>
<modules>
<CLR_exportMassAction>
<active>true</active>
<codePool>community</codePool>
</CLR_exportMassAction>
</modules>
</config>
我只是在寻找一个真正关于从这里去哪里的指针;我不确定下一个故障排除选项是什么。
最有可能的是,您的本地设置 运行 在不区分大小写的文件系统上(您在 Windows 上吗?),而您的服务器 运行 在区分大小写的文件系统上文件系统(可能 Linux)。
Magento 做了很多字符串操作来将 class 名称转换为文件名等。例如,请参阅 Varien_Autoload::autoload()
,我认为这是导致您的问题的原因:
$classFile = str_replace(' ', DIRECTORY_SEPARATOR, ucwords(str_replace('_', ' ', $class)));
如果你插入你的观察者class(CLR_exportMassAction_Model_Observer
,解析后CLR_exportMassAction/observer
),你会得到:
str_replace('_', ' ', 'CLR_exportMassAction_Model_Observer')
= 'CLR exportMassAction Model Observer'
ucwords('CLR exportMassAction Model Observer')
= 'CLR ExportMassAction Model Observer'
str_replace(' ', DIRECTORY_SEPARATOR, 'CLR ExportMassAction Model Observer')
= 'CLR/ExportMassAction/Model/Observer'
因此,Magento 正在寻找一个名为 CLR/ExportMassAction/Model/Observer.php
的文件,但您的文件名为 CLR/exportMassAction/Model/Observer.php
- 请参阅小写 e
?
可能还有其他一些大小写问题,但这是最突出的一个。
我建议将您的模块命名空间从 CLR
重命名为 Clr
,并将您的实际模块从 exportMassAction
重命名为 Exportmassaction
,并确保您的所有 class 名称和文件名精确匹配。这是避免 Magento 大小写问题的最简单方法(即使您在同一标识符中有多个单词)。