我制作了一个模块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>
我只是在寻找一个真正指向何处的指针;我不确定下一个故障排除选项是什么。
答案 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出现套管问题的最简单方法(即使您在同一标识符中有多个单词)。