これを調べたところ、新しくインストールしたバージョンの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);
}
The_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
ミックスに挿入されています。
(答えが見つかった場合は、お知らせください)