我对此进行了调查,但无法在新安装的 1.7.0.1 版本上重现该问题。这意味着您的系统配置有所不同。可能是文件权限问题,可能是一些更改的 Magento 代码,可能是我没有考虑的问题。
这意味着要弄清楚发生了什么,唯一的方法是通过 Magento 如何确定模板路径的漫长而艰难的调试过程。在正常系统操作下,这永远不会返回 null。出于某种原因,在您的系统上是这样。我将在下面概述此类调用的正常调用堆栈。希望这将为您提供使系统运行所需的信息。
此外,在我们进入调用堆栈之前,您的继承链和/或模板块方法可能已经被弄乱了。该null
值是Varien_Object
调用 a 的魔法设置器但未设置任何值时返回的值。检查您的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
and _renderFilename
methods.
#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;
}
Somewhere along this path your null
正在被插入到混合中。
(如果您最终找到答案,请告诉我们)