是否有可能在magento中有一个主题继承自1个以上的其他主题(除了基础)
典型的层次结构是主题 - >默认 - >基础。
我想要以下内容:
主题 - > theme2 - >默认 - >基地
这可能吗?如果没有,任何人都可以提供magento代码库中的任何兴趣点,以便我调查可能的解决方案。
提前致谢?
答案 0 :(得分:0)
您寻求的答案在课程Mage_Core_Model_Design_Package
中。特别是_fallback
方法:
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);
}
正如您所看到的,它将遍历一个回退包/主题组合列表,直到找到包含它正在查找的文件的组合。如果没有找到它,最终将使用base / default。
不幸的是,传递给fallbackScheme
的数据在同一个类中是硬编码的,正如您可以通过此调用看到的那样(尽管还有另一种类似的方法,即getSkinUrl
):
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;
}
对于包含some_package
和主题some_theme
的典型请求,它将是以下内容:
array(3) {
[0]=>
array(0) {
}
[1]=>
array(1) {
["_theme"]=>
string(1) "some_theme"
}
[2]=>
array(1) {
["_theme"]=>
string(7) "default"
}
}
如果您真的想要多个主题继承,则需要重写上述两种方法并添加额外的回退。
幸运的是,主题将成为Magento2的模块,它将解决这个问题。