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 大小写问题的最简单方法(即使您在同一标识符中有多个单词)。