2011-11-30 54 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類從未加載或始終加載的執行鏈。 –