2011-11-30 59 views
0

我们将Magento与EE一起用于我们的网站。在我的模板之一,我有这样的代码加载Magento的对象模型在模板中使用:ExpressionEngine - >可以将Magento代码包含在一个模板中,但不包含在其他模板中

include_once($_SERVER['DOCUMENT_ROOT'] . '/store/app/Mage.php'); 
Mage::app(); 

模板加载罚款和代码工作。

但如果我包括另一个模板完全相同的代码,我得到这个:

Fatal error: Uncaught exception 'Exception' with message 'Warning: include(Query.php): 
failed to open stream: 
No such file or directory in /srv/www/htdocs/store/lib/Varien/Autoload.php on line 93' in /srv/www/htdocs/store/app/code/core/Mage/Core/functions.php:245 

Stack trace: 
#0 /srv/www/htdocs/store/lib/Varien/Autoload.php(93): mageCoreErrorHandler(2, 'include(Query.p...', '/srv/www/htdocs...', 93, Array) 
#1 /srv/www/htdocs/store/lib/Varien/Autoload.php(93): Varien_Autoload::autoload() 
#2 [internal function]: Varien_Autoload->autoload('query') 
#3 [internal function]: spl_autoload_call('query') 
#4 /srv/www/htdocs/na_cms/expressionengine/libraries/Template.php(1089): class_exists('query') 
#5 /srv/www/htdocs/na_cms/expressionengine/libraries/Template.php(968): EE_Template->process_tags() 
#6 /srv/www/htdocs/na_cms/expressionengine/libraries/Template.php(497): EE_Template->tags() 
#7 /srv/www/htdocs/na_cms/expressionengine/libraries/Template.php(248): EE_Template->parse('?? 

这些模板不嵌套。

任何想法为什么发生这种情况,以及如何解决它?

+0

似乎'Varien_Autoload'无法找到并加载类Query的文件(Query.php),我认为它是ee中的一些类,它的文件必须包含在代码中的某处。 – Zyava

+0

但为什么它在一个模板上而不是另一个模板上工作?它的工作模板位于/j.group文件夹中,并且位于/ inc文件夹中,位于我的目录结构中。 – MB34

+0

我不知道为什么,因为我没有看到你的项目。您可以尝试在您的IDE中使用调试器来查找差异。 – Zyava

回答

2

在您的代码或EE代码中的某个点,您尝试使用名为“Query”的类。该类未定义,因此PHP尝试使用其自动装载机制来加载类Query。

上面的代码表示Magento的自动加载尝试加载类Query。这失败了(因为这个类不是Magento类)。另外,看起来你是在Magento的开发者模式中,所有的声明和警告都变成了异常。由于自动加载失败并出现警告,所以会引发致命异常。

所以,问题可能是两件事。首先是某人试图实例化一个不存在的Query类。如果是这种情况,请停止这样做。

第二个是Query类存在,但EE的自动加载器从来没有机会加载它,因为Magento的自动加载首先尝试。如果是这种情况,您需要在某处插入一些代码,以便自动加载器跳过来更改它们的顺序。您也可以尝试手动包含Query类来修复此特定实例。

+0

看到我上面的评论。 – MB34

+0

@ MB34可能是因为您的其他模板涉及到确保Query类从未加载或始终加载的执行链。 –