Задача:Есть дизайн в котором шапка, меню и подвал — одинаковые на всех страницах, а вот лейаут этих страниц сильно отличается друг от друга.
ИмеетсяJoomla 1.5.9
Из фака"Как сделать разный дизайн для ценра страницы для каждого пункта меню?" — ведет в никуда, поиск по форуму ничего не дал, то что видел при поиске неподходит, т.к. должна быть возможность из админки для страницы поставить шаблон отображения, а не привязываться к ID страницы.
Первые попытки:Сделал шаблон _global в котором определил базовый лейаут страницы (который одинаков для всех страниц).
Внутри этого шаблона в двух местах включаются такие конструкции:
<?php insert("template.php", $this) ?>
<?php insert("title.php", $this) ?>
Функция insert вынесена в файл helper.php (файл подключается: include dirname(__FILE__).DIRECTORY_SEPARATOR.'helper.php'; ):
function insert($filename, $parent)
{
$inherit = dirname(__FILE__)."/../".$parent->template.'/'.$filename;
$global = dirname(__FILE__).DIRECTORY_SEPARATOR.'/'.$filename;
if(file_exists($inherit)){
include $inherit;
} else {
include $global;
}
}
Как видно функция смотрит, есть ли в текущем шаблоне файл $filename и подключает его, если нет, то берет его из шаблона _global.
Что я в итоге получил?Я создал другой шаблон (назовем его inherited), в котором в index.php написал следующее:
include dirname(__FILE__).DIRECTORY_SEPARATOR.'../_global/index.php';
И соответсвенно если я создам в этом inherited шаблоне файл template.php например, то получу страницу с оформлением из _global шаблона куда вставлено все что написано в template.php inherited шаблона.
Т.е. я могу создать кучу шаблонов, которы будут наследовать глобальный шаблон и иметь свой собственный лейаут. Что и было моей задачей.
Все бы хорошо,
Но!Возникла задача перекрыть mod_mainmenu.В доках было найдено, что в директории шаблона создать файл html/mod_mainmenu/default.php, в котором соответственно и перекрывать этот модуль.
Надежда что все заработает если я сделаю такое в _global шаблоне, но страница будет показываться через inherited шаблон, не увенчалась успехом.
Естественно перекрытие не подхватилось.
Положил тоже самое в inherited шаблон и все заработало, но такое решение не подходит, т.к. копировать одно и тоже во все новые шаблоны — неправильно и в дальнейшем могут возникнуть серьезные проблемы (если понадобиться что-то изменить), тем более перекрытие mod_mainmenu связано непосредственно с отображением общего меню.
Долго копал различные доки, гугл и тп, но найти хотя бы что-то близкое к этому не получается.
Соответсвенно возникло
несколько вопросов, которые я хочу задать.
1. Может быть это все делается куда проще чем я тут нагородил?
2. Как можно правильно отнаследовать шаблон (я предполагаю, что есть какая-то функция, которая позволит вытащить глобальный шаблон по имени и отрендерить его подхватив файлы из текущего шаблона)
3. Можно как-то правильнее написать то, что я написал?
Это вобщем-то мое первое знакомство с Joomla, и можно сказать что второе знакомство с PHP.Заранее благодарю всех кто сможет хоть чем-то помочь.