Недавно делал небольшой проект для личных нужд, потребовалась именно такая возможность, но проделанная ранее работа не сохранилась, на форуме все советы оказались кусками в разных темах, сам к сожалению мало, что помнил, пришлось напрячь мозги и потратить много времяни, которого и так очень мало. В итоге смог реализовать желаемый результат под последнию версию.
Чтобы в предь не мучаться и не искать решение задачи, решил запостить тут тему, как манул. Возможно в дальнейшем это будет интересно, и данную функцию реализуют в Eleanor CMS по умолчанию, в более удобном (уверен, еще и более грамотно реализованно, чем это получилось у меня, так как у меня это получилось не совсем правильно, но мне хватает).
И так поехали:
1. Создаем индивидуальное оформление скилета главных страниц модуля main и news
Заходим в каталог активной темы оформления, по умолчанию это "Uniel", находим index.php создаем 2 копии этого файла и переименовываем первую копию в main.php вторую в index-news.
Находим в корне сайта файл index.php, где то на 195 строчке ищем такой код
#Предопределенные функции.
function Start($tpl='index',$code=200)
{global$Eleanor,$jscripts,$head,$title,$tcover,$thead;
if($Eleanor->started)
return;
if($code==200)
Eleanor::AddSession();
Eleanor::HookOutPut('Finish',$code);
$Eleanor->started=true;
после него добавляем такой код
# Наш код
$general=$GLOBALS['Eleanor']->module['general'];
$section=$GLOBALS['Eleanor']->module['section'];
# Если на главной странице, используем main.php, иначе index.php
if($general==true)
{$tpl='main';} else {$tpl='index';};
# Если на главной странице модуля новости, используем index-news.php, иначе index.php
if($general==false & $section==news)
{$tpl='index-news';} else {$tpl='index';};
# ---
сохраняем, все теперь за главную страницу отвечает файл шаблона main.php, за главную страницу модуля новости index-news.php.
2. Создаем индивидуальный вывод различных модулей на главной странице, на главной в родительском модуле, и при подробном просмотре.
Для примера берем модуль новости.
Заходим в каталог активной темы оформления, по умолчанию это "Uniel", находим base.php и создаем 3 копии этого файла и переименовываем первую копию в news-base-main (будет отвечать за вывод модуля новости на главной странице сайта) вторую в news-base (будет отвечать за вывод на главной странице модуля новости) третью в news-base-full (будет отвечать за вывод на главной странице модуля новости при подробном просмотре).
Открываем файл templates/Uniel/Classes/UserNews.php
Находим примерно на 97 строчке
$T->$tpl(array(
'top'=>array(
'published'=>sprintf(static::$lang['published_'],Eleanor::$Language->Date($v['date'],'fdt')),
'category'=>isset($data['cats'][$v['_cat']]) ? sprintf(static::$lang['category_'],'<a href="'.$data['cats'][$v['_cat']]['_a'].'">'.$data['cats'][$v['_cat']]['t'].'</a>') : false,
'comments'=>$lc($v['comments'],'<a href="'.$v['_url'].'#comments">'.$v['comments'].'</a>'),
'author'=>sprintf(static::$lang['publisher_'],$v['author_id'] ? '<a href="'.Eleanor::$Login->UserLink($v['author'],$v['author_id']).'" rel="author">'.$v['author'].'</a>' : $v['author']),
),
Перед ним добавляем
# Наш код
$section=$GLOBALS['Eleanor']->module['section'];
$general=$GLOBALS['Eleanor']->module['general'];
if($general==true)
{$tpl=$section.'-base-main';} else {$tpl=$section.'-base';};
дальше ищем где то уже на 457 строчке такой код
$marks=range(Eleanor::$vars['publ_lowmark'],Eleanor::$vars['publ_highmark']);
if(false!==$z=array_search(0,$marks))
unset($marks[$z]);
return static::TopMenu()
перед ним добавляем
# наш код
$section=$GLOBALS['Eleanor']->module['section'];
$general=$GLOBALS['Eleanor']->module['general'];
if($general==false)
{$tpl=$section.'-base-full';};
Все, готово. Теперь за вывод новостей на главной странице сайта отвечает файл news-base-main.php, за вывод новостей в родительском модуле news-base.php, а за подробный просмотр файл news-base-full.php.
3. Грузим только нужные css файлы.
Тагже для каждого модуля можем подгружать только необходимые нам css, так нет нужды грузить лишнее, не сочтите меня за пораноика, но проста не люблю лишнее.
Так, открываем Uniel/index.php
после кода
<?php
/*
Скелет основного шаблона.
*/
if(!defined('CMS'))die;
$ltpl=Eleanor::$Language['tpl'];?><!DOCTYPE html>
<html prefix="og: http://ogp.me/ns#">
<head>
{head}
<script type="text/javascript" src="js/menu_multilevel.js"></script>
Вставляем
<?php
$section=$GLOBALS['Eleanor']->module['section'];
$general=$GLOBALS['Eleanor']->module['general'];
$reduction='<link media="screen" href="'.$theme.'style/';
$end='" type="text/css" rel="stylesheet" />';
if($general==0)
{
if($section==account){echo$reduction.'account.css'.$end;}
if($section==news){echo$reduction.'news.css'.$end;}
if($section==search){echo$reduction.'search.css'.$end;}
if($section==menu){echo$reduction.'menu.css'.$end;}
if($section==contacts){echo$reduction.'contacts.css'.$end;}
} else {echo$reduction.'main.css'.$end;};
?>
после чего удаляем строчку
<link media="screen" href="<?php echo$theme?>style/main.css" type="text/css" rel="stylesheet" />
Она нам больше не нужна, я думаю обьяснять дальше нет смысла, все и так понятно.
Не знаю пригодится ли вам эта информация и станет ли она вам полезна, но мне в последнем проекте для реализации поставленной задачи очень помагла.