CMS Eleanor - Поиск
Полная версия этой страницы: Официальный форум Eleanor CMS » Индивидуальное оформление.
Официальный форум Eleanor CMS » Для вебмастеров и владельцев сайтов » Комната веб-дизайнеров
Atix
Не первый раз сталкиваюсь с проблемой когда нужно создать отдельное оформление для каждого раздела сайта, последнее время доходит до того, что нужно в одном модуле, например новости создать разное оформление и разный вывод информации на разных страницах сайта. На более ранних версих eleanor были встроенны некоторые фишки, которыми мало кто пользовался и мало кто знал, но они были проста спасительны в таком деле. В 2 последних релизах возможность их использования утрачена, обратившись за помощью к Александру, я получил пару советов как реализовать тот функционал который мне был необходим. Я в итоге смог реализовать желаеемое, но закончив работу для заказчика, не имея опыта работы с кодом и не зная илементарного синтаксиса оформления выражений програмного кода (из за какой то сраной запитой, точки или ковычек сидел часами не понимая что менять и в кокой последовательности), на радостях постарался забыть о потраченных работа-часов на выполнение поставленной задачи (реально сложно пытаться разобраться в том, что ты не когда не делал, не хочешь и совершенно в этом не понимаешь).

Недавно делал небольшой проект для личных нужд, потребовалась именно такая возможность, но проделанная ранее работа не сохранилась, на форуме все советы оказались кусками в разных темах, сам к сожалению мало, что помнил, пришлось напрячь мозги и потратить много времяни, которого и так очень мало. В итоге смог реализовать желаемый результат под последнию версию.

Чтобы в предь не мучаться и не искать решение задачи, решил запостить тут тему, как манул. Возможно в дальнейшем это будет интересно, и данную функцию реализуют в 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" />


Она нам больше не нужна, я думаю обьяснять дальше нет смысла, все и так понятно.

Не знаю пригодится ли вам эта информация и станет ли она вам полезна, но мне в последнем проекте для реализации поставленной задачи очень помагла.

Alexander
Atix, благодарю. Многим, уверен, будет очень полезна.

Добавлено через 0 минут, 54 секунд:

Только так писать нельзя:
Цитата (Atix @ 2024-04-24 09:12)
if($section==account)

account нужно брать в апострофы или кавычки.
Kaname26
Я думаю это надо в гугле отправить http://code.google.com/p/eleanor-cms/
Atix, подскажите пожалуйста, а можно
Цитата (Atix @ 2024-04-24 09:12)
Находим в корне сайта файл index.php, где то на 195 строчке ищем такой код
не в нем менять, а в каком нибуть другом файле, который в папке с темой оформления будет находится, может какая конструкция есть ?
leshij
Цитата (One @ 2024-04-24 09:12)
не в нем менять, а в каком нибуть другом файле, который в папке с темой оформления будет находится, может какая конструкция есть ?

так эти файлы и так в в папке с темой оформления находятся
leshij, повнимательней.

Цитата (Atix @ 2024-04-24 09:12)
Находим в корне сайта файл index.php, где то на 195 строчке ищем такой код


Мне нужно что бы только в теме была возможность поменять, вот я например сделал что то, решил этим поделиться, мне потом каждому инструкцию писать, это не удобно. Ну так что по моему вопросу, может мне кто ни будь подсказать ?
wormen
скорее всего была опечатка по поводу корня сайта
Maximkaboom
One, в принципе это возможно, но действовать надо немного по другому.

wormen, опечатки небыло, если вы про первый пост. И если конечно я правильно понял всю суть, сижу с телефона, мог что нибудь пропустить))))

Добавлено через 6 минут, 44 секунд:

Цитата (Atix @ 2024-04-24 09:12)
перед ним добавляем


# наш код
$section=$GLOBALS['Eleanor']->module['section'];
$general=$GLOBALS['Eleanor']->module['general'];
if($general==false)
{$tpl=$section.'-base-full';};

С этим вы помоему перемудрили))) можно просто поменять название шаблона Base на своё)
wormen
проверку модуля и главной страницы можно и немного по другому сделать, и делается в index.php шаблона, а не в корневом index.php
Maximkaboom, опишите пожалуйста ваш вариант, только поподробнее, я с системой еще слабо знаком.

Цитата (Maximkaboom @ 2024-04-24 09:12)
С этим вы помоему перемудрили))) можно просто поменять название шаблона Base на своё)


а как система поймет что нужно использовать именно этот новый base, есть какие то еще доп функции или требования к названию файла ?
Maximkaboom
One, я с телефона сейчас сижу, если только потом.
Тут система не при чем почти, все что нужно есть в первом посте, далее только php) включительно логику)))
Цитата (One @ 2024-04-24 09:12)
а как система поймет что нужно использовать именно этот новый base, есть какие то еще доп функции или требования к названию файла ?

Я имел ввиду изменять не название самого файла, а изменить название шаблона отвечающего за вывод полной новости, в файле UserNews.php
Не однократно писал об этом на форуме, поищите. Точнее сказать не могу, опять же, потому что с телефона
Maximkaboom,
Спасибо, тут и описано во втором варианте как сделать, не внимательно просто прочитал. А по поводу моей проблемы буду ждать,

Цитата (wormen @ 2024-04-24 09:12)
проверку модуля и главной страницы можно и немного по другому сделать, и делается в index.php шаблона, а не в корневом index.php


wormen,
Это да, но указать свое оформление не получается, не могу $tpl передать значение main-page. В корне работает, а в шаблоне нет(
wormen
а зачем вам $tpl менять? если у вас проверка main-page не работает, значит там по другому надо прописать, в файлах шаблона, это обычное дело...
Maximkaboom
Ну хотя бы так(проверьте меня, с телефона все же пишу))))
Создаём файлы main.php main-news.php и default.php
А в index.php пишем следующее:
$general=$GLOBALS['Eleanor']->module['general'];
$section=$GLOBALS['Eleanor']->module['section'];

if($general==true)
{инклудим main.php}
elseif($general==false & $section==news)
 {инклудим main-news.php} else {инклудим default.php};

Естественно инклуды сделайте нормально. Мне неудобно)
Тут невозможно писать с телефона( не дождусь когда Саша допишет форум и переведет офф сайт на него
wormen
примерно так получается...
Maximkaboom, этот вариант работает но у меня тогда сразу 2 страницы дублируются, сначало результат а потом старый вариант) первоначальный вариант не убирается.

придется из index.php все удалить и оставить только этот код.

<?php
/*
	Скелет основного шаблона.
*/
if(!defined(&apos;CMS&apos;))die;


$general=$GLOBALS[&apos;Eleanor&apos;]->module[&apos;general&apos;];
$section=$GLOBALS[&apos;Eleanor&apos;]->module[&apos;section&apos;];

if($general==true)
{include Eleanor::$root.$theme.&apos;main.php&apos;;}
elseif($general==false & $section==news)
 {include Eleanor::$root.$theme.&apos;main-news.php&apos;;} else {include Eleanor::$root.$theme.&apos;def.php&apos;;};



?>


Спасибо вам за помощь, очень помогли.
Maximkaboom
Цитата (One @ 2024-04-24 09:12)
придется из index.php все удалить и оставить только этот код.

Так и имелось ввиду)

Добавлено через 1 минут, 40 секунд:

Пожалуйста ;)
Atix
Maximkaboom, One, http://floomby.ru/s2/rYQtS3 так с ошибкой выходит, не лучший вариант.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.