Magento Mass Action,网格不更新

时间:2015-05-06 18:40:24

标签: magento

好的,所以这不是我的第一次群众行动,但这确实让我摸不着头脑。

我制作了一个模块CLR_exportMassAction。将它部署在好的旧localhost上没有任何问题。但是当我将文件移到我的服务器时,没有任何反应。我已经重新索引并刷新了缓存。我感觉它的一些配置怪异和magento没有在我的模块中挂钩。

这是我的代码: \本地\ CLR \ exportMassAction \等\ 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>

本地\ CLR \ exportMassAction \模型\ 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)),
                   ));
        }
}



}

本地\ CLR \ exportMassAction \控制器\ Adminhtml \目录\ 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');
        }

    }



}

应用\等\ CLR_exportMassAction.xml

<config>
    <modules>
        <CLR_exportMassAction>
            <active>true</active>
            <codePool>community</codePool>
        </CLR_exportMassAction>
    </modules>
</config>

我只是在寻找一个真正指向何处的指针;我不确定下一个故障排除选项是什么。

1 个答案:

答案 0 :(得分:0)

最有可能的是,您的本地设置是在不区分大小写的文件系统上运行(您是在Windows上吗?),而您的服务器是在区分大小写的文件系统(可能是Linux)上运行。

Magento进行了大量的字符串操作,将类名转换为文件名等。例如,请参阅Varien_Autoload::autoload(),我认为这会导致您的问题:

$classFile = str_replace(' ', DIRECTORY_SEPARATOR, ucwords(str_replace('_', ' ', $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,并确保所有类名和文件名字恰好匹配。这是避免Magento出现套管问题的最简单方法(即使您在同一标识符中有多个单词)。