我看着這個,我無法在新安裝的1.7.0.1版本上重現問題。這意味着您的系統配置有些不同。可能是一個文件權限的東西,可能是一些改變了Magento的代碼,可能是我不考慮的東西。
這意味着通過Magento如何確定模板路徑,找出發生什麼的唯一途徑就是長時間的調試。在正常的系統操作下,這將從永不返回null。出於某種原因,你的系統是這樣的。我將在下面概述正常的調用棧。希望這會爲您提供所需的信息以使系統正常運行。
此外,在我們進入調用堆棧之前,您的繼承鏈和/或模板塊方法可能已被混淆。 null
值是當一個Varien_Object
的魔術設置器被調用並且沒有設置值時返回的值。檢查您的Mage_Core_Block_Template
類仍然有它的getTemplateFile
方法,以及
class Mage_Core_Block_Template extends Mage_Core_Block_Abstract
abstract class Mage_Core_Block_Abstract extends Varien_Object
請記住下面的文件路徑假設沒有人置於一個類重寫或您的系統
的getTemplatefile
方法是在定義上的某個地方改寫
#File: app/code/core/Mage/Core/Block/Template.php
public function getTemplateFile()
{
$params = array('_relative'=>true);
$area = $this->getArea();
if ($area) {
$params['_area'] = $area;
}
$templateName = Mage::getDesign()->getTemplateFilename($this->getTemplate(), $params);
return $templateName;
}
你可以看到這是一個包裝getTemplateFilename
設計包裝對象。
#File: app/code/core/Mage/Core/Model/Design/Package.php
public function getTemplateFilename($file, array $params=array())
{
$params['_type'] = 'template';
return $this->getFilename($file, $params);
}
這又是一個包裝getFilename
#File: app/code/core/Mage/Core/Model/Design/Package.php
public function getFilename($file, array $params)
{
Varien_Profiler::start(__METHOD__);
$this->updateParamDefaults($params);
$result = $this->_fallback($file, $params, array(
array(),
array('_theme' => $this->getFallbackTheme()),
array('_theme' => self::DEFAULT_THEME),
));
Varien_Profiler::stop(__METHOD__);
return $result;
}
,反過來,是_fallback
#File: app/code/core/Mage/Core/Model/Design/Package.php
protected function _fallback($file, array &$params, array $fallbackScheme = array(array()))
{
if ($this->_shouldFallback) {
foreach ($fallbackScheme as $try) {
$params = array_merge($params, $try);
$filename = $this->validateFile($file, $params);
if ($filename) {
return $filename;
}
}
$params['_package'] = self::BASE_PACKAGE;
$params['_theme'] = self::DEFAULT_THEME;
}
return $this->_renderFilename($file, $params);
}
的_fallback method also calls the validateFile
和_renderFilename
方法的調用。
#File: app/code/core/Mage/Core/Model/Design/Package.php
public function validateFile($file, array $params)
{
$fileName = $this->_renderFilename($file, $params);
$testFile = (empty($params['_relative']) ? '' : Mage::getBaseDir('design') . DS) . $fileName;
if (!file_exists($testFile)) {
return false;
}
return $fileName;
}
...
protected function _renderFilename($file, array $params)
{
switch ($params['_type']) {
case 'skin':
$dir = $this->getSkinBaseDir($params);
break;
case 'locale':
$dir = $this->getLocaleBasedir($params);
break;
default:
$dir = $this->getBaseDir($params);
break;
}
return $dir . DS . $file;
}
在此路徑的某處,您的空
正被插入混合中。
(如果你最終找到答案,請讓我們知道)
奇怪的問題,我無法重現(嘗試了幾個版本)。你是否願意/能夠提供安裝和數據庫轉儲的焦油球? – Vinai
我同意這很奇怪。我要求一個客戶,所以我沒有tarball。 http://www.pulsestorm.net/nofrills-layout-chapter-one#comment-574707059 –