X   Сообщение сайта
(Сообщение закроется через 2 секунды)

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Индивидуальное оформление.
Atix
сообщение 2013-01-27, 19:30
Сообщение #1
Любитель
Иконка группы

Группа: Дизайнеры
Сообщений: 322
Регистрация: 2008-12-12
Из: Россия

Репутация:   нет  
Всего: 14


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


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

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



Сообщение отредактировал Atix - 2013-01-27, 19:43
Перейти в начало страницы
+Цитировать сообщение
Alexander
сообщение 2013-01-27, 20:12
Сообщение #2
Eleanor developer
Иконка группы

Группа: Администраторы
Сообщений: 5 261
Регистрация: 2008-11-11
Из: Николаев
Версия системы: RC5

Репутация:   нет  
Всего: 67


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

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

Только так писать нельзя:
Цитата (Atix @ 2024-03-19 07:58)
if($section==account)

account нужно брать в апострофы или кавычки.
Перейти в начало страницы
+Цитировать сообщение
Kaname26
сообщение 2013-01-30, 13:19
Сообщение #3
Любитель
Иконка группы

Группа: Eleanor user
Сообщений: 395
Регистрация: 2010-03-09

Репутация:   нет  
Всего: нет


Я думаю это надо в гугле отправить http://code.google.com/p/eleanor-cms/
Перейти в начало страницы
+Цитировать сообщение
Гость_One_*
сообщение 2013-07-14, 18:37
Сообщение #4



Гости





Atix, подскажите пожалуйста, а можно
Цитата (Atix @ 2024-03-19 07:58)
Находим в корне сайта файл index.php, где то на 195 строчке ищем такой код
не в нем менять, а в каком нибуть другом файле, который в папке с темой оформления будет находится, может какая конструкция есть ?
Перейти в начало страницы
+Цитировать сообщение
leshij
сообщение 2013-07-14, 19:56
Сообщение #5
Любитель
Иконка группы

Группа: Пользователи
Сообщений: 149
Регистрация: 2013-04-14

Репутация:   нет  
Всего: нет


Цитата (One @ 2024-03-19 07:58)
не в нем менять, а в каком нибуть другом файле, который в папке с темой оформления будет находится, может какая конструкция есть ?

так эти файлы и так в в папке с темой оформления находятся
Перейти в начало страницы
+Цитировать сообщение
Гость_One_*
сообщение 2013-07-14, 22:59
Сообщение #6



Гости





leshij, повнимательней.

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


Мне нужно что бы только в теме была возможность поменять, вот я например сделал что то, решил этим поделиться, мне потом каждому инструкцию писать, это не удобно. Ну так что по моему вопросу, может мне кто ни будь подсказать ?
Перейти в начало страницы
+Цитировать сообщение
wormen
сообщение 2013-07-14, 23:51
Сообщение #7
Опытный
Иконка группы

Группа: Eleanor user
Сообщений: 800
Регистрация: 2012-09-13

Репутация:   нет  
Всего: нет


скорее всего была опечатка по поводу корня сайта
Перейти в начало страницы
+Цитировать сообщение
Maximkaboom
сообщение 2013-07-15, 0:08
Сообщение #8
Опытный
Иконка группы

Группа: Eleanor user
Сообщений: 766
Регистрация: 2010-04-08
Версия системы: RC5

Репутация:   нет  
Всего: 1


One, в принципе это возможно, но действовать надо немного по другому.

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

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

Цитата (Atix @ 2024-03-19 07:58)
перед ним добавляем


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

С этим вы помоему перемудрили))) можно просто поменять название шаблона Base на своё)
Перейти в начало страницы
+Цитировать сообщение
wormen
сообщение 2013-07-15, 0:41
Сообщение #9
Опытный
Иконка группы

Группа: Eleanor user
Сообщений: 800
Регистрация: 2012-09-13

Репутация:   нет  
Всего: нет


проверку модуля и главной страницы можно и немного по другому сделать, и делается в index.php шаблона, а не в корневом index.php
Перейти в начало страницы
+Цитировать сообщение
Гость_One_*
сообщение 2013-07-15, 0:45
Сообщение #10



Гости





Maximkaboom, опишите пожалуйста ваш вариант, только поподробнее, я с системой еще слабо знаком.

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


а как система поймет что нужно использовать именно этот новый base, есть какие то еще доп функции или требования к названию файла ?
Перейти в начало страницы
+Цитировать сообщение
Maximkaboom
сообщение 2013-07-15, 1:08
Сообщение #11
Опытный
Иконка группы

Группа: Eleanor user
Сообщений: 766
Регистрация: 2010-04-08
Версия системы: RC5

Репутация:   нет  
Всего: 1


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

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

Сообщение отредактировал Maximkaboom - 2013-07-15, 1:08
Перейти в начало страницы
+Цитировать сообщение
Гость_One_*
сообщение 2013-07-15, 1:31
Сообщение #12



Гости





Maximkaboom,
Спасибо, тут и описано во втором варианте как сделать, не внимательно просто прочитал. А по поводу моей проблемы буду ждать,

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


wormen,
Это да, но указать свое оформление не получается, не могу $tpl передать значение main-page. В корне работает, а в шаблоне нет(
Перейти в начало страницы
+Цитировать сообщение
wormen
сообщение 2013-07-15, 1:42
Сообщение #13
Опытный
Иконка группы

Группа: Eleanor user
Сообщений: 800
Регистрация: 2012-09-13

Репутация:   нет  
Всего: нет


а зачем вам $tpl менять? если у вас проверка main-page не работает, значит там по другому надо прописать, в файлах шаблона, это обычное дело...
Перейти в начало страницы
+Цитировать сообщение
Maximkaboom
сообщение 2013-07-15, 1:48
Сообщение #14
Опытный
Иконка группы

Группа: Eleanor user
Сообщений: 766
Регистрация: 2010-04-08
Версия системы: RC5

Репутация:   нет  
Всего: 1


Ну хотя бы так(проверьте меня, с телефона все же пишу))))
Создаём файлы 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
сообщение 2013-07-15, 1:54
Сообщение #15
Опытный
Иконка группы

Группа: Eleanor user
Сообщений: 800
Регистрация: 2012-09-13

Репутация:   нет  
Всего: нет


примерно так получается...
Перейти в начало страницы
+Цитировать сообщение
Гость_One_*
сообщение 2013-07-15, 2:32
Сообщение #16



Гости





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;;};



?>


Спасибо вам за помощь, очень помогли.

Сообщение отредактировал One - 2013-07-15, 2:38
Перейти в начало страницы
+Цитировать сообщение
Maximkaboom
сообщение 2013-07-15, 6:28
Сообщение #17
Опытный
Иконка группы

Группа: Eleanor user
Сообщений: 766
Регистрация: 2010-04-08
Версия системы: RC5

Репутация:   нет  
Всего: 1


Цитата (One @ 2024-03-19 07:58)
придется из index.php все удалить и оставить только этот код.

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

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

Пожалуйста ;)
Перейти в начало страницы
+Цитировать сообщение
Atix
сообщение 2013-07-19, 11:53
Сообщение #18
Любитель
Иконка группы

Группа: Дизайнеры
Сообщений: 322
Регистрация: 2008-12-12
Из: Россия

Репутация:   нет  
Всего: 14


Maximkaboom, One, http://floomby.ru/s2/rYQtS3 так с ошибкой выходит, не лучший вариант.
Перейти в начало страницы
+Цитировать сообщение

Ответить в данную темуНачать новую тему
0 чел. читают эту тему (гостей: 0, скрытых пользователей: 0)
Пользователей: 0

 
RSS Текстовая версия 0.0375 сек.    12 запросов    GZIP включен    Сейчас: 2024-03-19, 7:58