我已经在magento中编写了一个付款插件,它(几乎)完美无缺。前端付款正在通过我认为一切都已完成。但现在我偶然发现了一个问题。
我正在使用自己的自动加载器,注册事件为controller_front_init_before
,效果很好。当我创建一个调用Mage::app();
的脚本,然后当我尝试编辑我从Mage::getModel("sales/order")->getCollection();
获得的订单时,我收到一个错误,我的类没有加载。我尝试将事件更改为resource_get_tablename
,但错误仍然存在。解决此错误的唯一方法是在小脚本中注册我在插件中使用的相同自动加载器,这对我来说是一个问题。脚本如下
require_once "app/Mage.php";
Mage::app();
$orders = Mage::getModel("sales/order")->getCollection();
foreach ($orders as $order) {
echo "ORDER id " . $order->getId() . " #" . $order->getIncrementId()."\n";
$order->setData('status',Mage_Sales_Model_Order::STATE_COMPLETE);
$order->save();
}
是否有人知道可能使用哪个事件以便此脚本无需使用spl_autoload_register...
方法即可运行?
谢谢!
修改
代码/ communinty /付款/模块/ config.xml中
<config>
<global>
<events>
<resource_get_tablename>
<observers>
<payment_module>
<class>Payment_Module_Model_Autoloader</class>
<method>addAutoloader</method>
<type>singleton</type>
</payment_module>
</observers>
</resource_get_tablename>
</events>
</global>
</config>
代码/小区/付款/模块/型号/ Autoloader.php
class Payment_Module_Model_Autoloader extends Mage_Core_Model_Observer
{
protected static $registered = false;
public function addAutoloader(Varien_Event_Observer $observer)
{
if (self::$registered) {
return;
}
spl_autoload_register(array($this, 'autoload'), false, true);
self::$registered = true;
}
public function autoload($class)
{
$classFile = COMPILER_INCLUDE_PATH . DIRECTORY_SEPARATOR . $class . '.php';
include $classFile;
}
}