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

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

4 страниц Открыть меню   1 2 3 > »   
Ответить в данную темуНачать новую тему
> Разбираем шаблонизатор системы
Z1dan3
сообщение 2009-05-11, 10:45
Сообщение #1
Invision Power
Иконка группы

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

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


И так господа, предлагаю разобраться в шаблонизаторе этой замечательнйо системы :big_boss: . Урок будет состоять из несольких частей и потребует от вас усилий, прочитав это, человек имеющий даже мизерные знания в вёрстке, поймет как создаються шаблоны :punish2: .
<u>Сразу нужно отметить, что в Eleanor CMS предусмотено ДВА шаблонизатора: HTML и PHP</u>. Первый полезен для простых файлов шаблона; второй же для более изощренного и более гибкого использования всех наворотов верстальщика. Тип шаблонизатора определяется типом файла, если найдено два файла для обеих шаблонизаторов (например Base.php и Base.html), предпочтение отдается HTML шаблонизатору (Base.html). На шаблонизаторе PHP я детально останавливаться не буду - использует он синтаксис PHP и тем, кто уже сталкивался с такими шаблонизаторами все должно быть предельно понятно.
Детальнее рассмотрю HTML шаблонизатор.

1. Переменные в шаблонизаторе выделяются в фигурные скобки. Например {title}, {text}.. И вставляются в нужных местах шаблона.
2. Логические выражения имеют синтаксис [переменная]ДА[-переменная]НЕТ[/переменная]. При этом секцию [-переменная] можно опустить. Например:
[title]{title}[-title]Заголовка нет![/title]


Логика работы этого куска очень просто: если заголовок есть - он будет выведен, если он пустой - будет выведена строка "Заголовка нет".

Имена переменных НЕ чувствительны к регистру.

Важно отметить, что в обоих шаблонизаторах есть несколько нестандартных переменных:
<?php echo$HEAD?> (всегда большими буквами) - сгенерированная секция <head><?php echo$HEAD?></head>. Содержит meta атрибуты, стили, RSS ссылки.
{module} (всегда маленьки буквами) - содержимое, которое сгенерирует модуль.
Обе этих переменных не поддерживают логические условия. Т.е. Вы не можете записать [module]...[/module]
Также еще есть переменные [blocks_ТипБлока][/blocks_ТипБлока] чтобы можно было узнать, есть ли на странице блоки какого-то определенного типа.

И так рассмотрим детальнее это на примерах:

1) <u>index.php</u>:
Пожалуй начнем с разбора аргументов и функций:

{%BLOCKS admin%} - верхняя админ панель.Аргумент может быть установлен в любом удобном месте, желательно конечно сверху.
{%BLOCKS top_menu%} - верхнее меню с ссылкамии (Главная,FAQ,Новости,Аккаунт).
{%BLOCKS center_up%} - верхние центральные блоки.
{module} - модуль, загружаемый на главной странице (центр. блоки) - стандартный загрузочный модуль - Новости.
{%BLOCKS center_down%} - нижние центральный блоки.
{%BLOCKS right%} - правые блоки.
{%BLOCKS left%} - левые блоки.
{%STATIC login%} - блок статистического логина (может быть слева и\или справа).
{%BLOCKS bottom_menu%} - нижнее меню с ссылками (Главная,FAQ,Новости,Аккаунт).
<?=$copyright?> - копирайт системы.
{page status} - время генерации.

А теперь разберем конкретный пример на шаблоне Uniel:

<div id="maincol[blocks_right]R[/blocks_right]">
			<div class="baseblock"><div class="dtop"><div class="dbottom">
				<div class="dcont" id="resizedimage">
				{%BLOCKS center_up%}
				{module}
				{%BLOCKS center_down%}
				<script type="text/javacript">AddOnLoadEvent('ResizeBigImages(Id("resizedimage"),530,75)',true);</scrip</span>t>
				</div>
			</div></div></div>
		</div>
		[blocks_right]<div id="rightcol">
			{%BLOCKS right%}
		</div>[/blocks_right]
	</div>

В системе есть функция проверки: если в модуле нету правых блоков, то центр. блоки автоматически должены растягиваться на 100%. За этот параметр отвечает функция [blocks_right] [/blocks_right]. А теперь понятнее:
<div id="maincol[blocks_right]R[/blocks_right]">
Див maincol будет грузиться если правые блоки отсутсвуют. Див maincolr будет грузиться если правые блоки присутствуют. Так же необходимя вставлять этот проверочный аргумент когда в шаблон вводяться правые блоки: [blocks_right]<div id="rightcol">{%BLOCKS right%}</div>[/blocks_right] .

2) <u>Base.html</u>:
Аргументы:

{title} - заголовок (новости).
{whopost} - кто разместил (ник).
{date} - дата размещения.
{comments} - кол-во коментариев к новости.
{category} - категория новости.
{content} - собственно содержание новости, тобишь контент.
{rating} - рейтинг новости.
{more} - ссылка "подробнее" (переход к полной новости).

Кокретный пример:
                    
<div class="base">
						<div class="heading"><div class="binner">
							<h3>{title}</h3>
							<div class="moreinfo">
								<span class="arg">{whopost}</span>
								<span class="arg">{date}</span>[comments]
								<span class="arg">[b]{comments}[/b]</span>[/comments]
								<span class="arg">{category}</span>
								<div class="clr"></div>
							</div>
							<div class="clr"></div>
						</div></div>
						<div class="maincont"><div class="binner">
							{content}
							<div class="clr"></div>
						</div></div>
						<div class="morelink"><div class="binner">
							<div class="ratebase">{rating}</div>
							<span class="argmore">{more}</span>
							<div class="clr"></div>
						</div></div>
					</div>


Аргумент {comments} должен выводиться с проверкой как и правые блоки, т.е. [comments]{comments}[/comments].

3) <u>Base--full.php</u>:
Аргументы:

<?=$title?> - заголовок (новости).
<?=$whopost?> - кто разместил (новость).
<?=$date?> - дата публикации.
<?=(isset($category) ? $category : '')?> - категория (новости).
<?=$content?> - содержание (новости).
<?php if(!empty($tags)): ?><br /><br /><?php echo $Mainclass->lang['main']['tags'].': '.$tags; endif?> - теги (новости).
<?php if($moder): ?><?=$moder?><?php endif?> - модераторские опции (изменение,удаление (новости)).
<?=$rating?> - рейтинг (новости).


4) <u>Comment.php</u>:
Аргументы:

<?=$comment_id?> - номер коментария.
<?=$avatar?><?php if($a_width):?>width="<?=$a_width?>" <?php endif?><?php if($a_height):?>height="<?=$a_height?>" <?php endif?> - автар пользователя + проверка высоты и ширины аватара.
<?=$name?> - имя пользователя.
<?=$link_to?> - ссылка на коментарий.
<?=$text?> - собственно сам коментарий.
<?=$signature?> - подпись пользователя.
<?php if ($profile):?><a href="#" onclick="if (act_editor) eval(act_editor+'.SetSelectedText(\'<b><?=$name?>,\')'); return false;"><?=$name?></a><?php else:?><?=$name; endif;?><?=$lang['writes'];?> - вставить ник в форму поста коментария.

<?php
echo $dates;
- дата коментария.
if ($profile)
echo ' | <a href="'.$profile.'">'.$lang['profile'].'</a>';
- ссылка на профиль.
if ($icq)
echo ' | ICQ: '.$icq;
- icq пользователя.
if ($yahoo)
echo ' | '.$yahoo;
- yahoo пользователя.
if ($msn)
echo ' | '.$msn;
- msn пользователя.
if ($website)
echo ' | '.$website;
- сайт пользователя.
if ($ip)
echo ' | '.$ip;
- ip адрес пользователя.
?>

<?php if ($moder):?>
<a href="#" onclick="return <?=$u?>.Delete(<?=$comment_id?>);">
- удалить коментарий
<a href="#" onclick="return <?=$u?>.Edit(<?=$comment_id?>);"> - редактировать коментарий
<?php endif?>
            
<?php if ($answer_to):?>
<a href="#" onclick="return <?=$u?>.AnswerTo(<?=$comment_id?>,<?=$n?>);">
- цитата коментария.
<?php endif?>

<span style="color:#FF0000">Внимание! Аргументы с внедрением php элементов (начинаються с <?php) нельзя разрывать дивами, т.е. они должны быть одним целым, пример:
<?php
						echo $dates;
						if ($profile)
							echo ' | <a href="'.$profile.'">'.$lang['profile'].'</a>';
						if ($icq)
							echo ' | ICQ: '.$icq;
						if ($yahoo)
							echo ' | '.$yahoo;
						if ($msn)
							echo ' | '.$msn;
						if ($website)
							echo ' | '.$website;
						if ($ip)
							echo ' | '.$ip;
					?>

Во всех файлах PHP шаблониазтора переменные выводятся как <?=$varname?>, кроме переменных {module}, <?php echo$HEAD?> и блоков. Все переменные ХТМЛ шаблониазтора выводятся как {varname}. Пример (ввода шаблона): {theme} для HTML и <?=$theme?> для PHP.


И так господа спасибо за внимание. Если вы прочитали этот топик, то вы хотите чему-то научиться и сделать это самому, а это меня радует :friends: .В будущем статья будет дополняться\обновляться. Если возникли какие-нибудь вопросы, то с удовольствием на них отвечу.</b>

Обновил до 5 рцшки.

Сообщение отредактировал Z1dan3 - 2010-12-10, 15:16
Перейти в начало страницы
+Цитировать сообщение
Z1dan3
сообщение 2009-05-12, 14:06
Сообщение #2
Invision Power
Иконка группы

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

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


Добавлена еще одна особенность шаблонизатора, каксающаяся функции вывода шаблона ( {theme} и <?=$theme?> ).

Сообщение отредактировал Z1dan3 - 2009-05-12, 14:06
Одобрили: NoIndex
Перейти в начало страницы
+Цитировать сообщение
SiTiS
сообщение 2009-07-26, 14:39
Сообщение #3
Любитель
Иконка группы

Группа: Пользователи
Сообщений: 215
Регистрация: 2008-12-14
Из: Россия, Минусинск

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


Заметил что система не может распределять заголовки типа: <h1></h1>, <h2></h2> и тд. Всё идет одной высотой, стандартной. Как это исправить?
Перейти в начало страницы
+Цитировать сообщение
Alexander
сообщение 2009-07-26, 19:04
Сообщение #4
Eleanor developer
Иконка группы

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

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


Цитата (SiTiS @ 26.7.2009, 14:39)
система не может распределять заголовки

Что-то я не понял: проблема в системе или в CSS?
Перейти в начало страницы
+Цитировать сообщение
SiTiS
сообщение 2009-07-27, 7:28
Сообщение #5
Любитель
Иконка группы

Группа: Пользователи
Сообщений: 215
Регистрация: 2008-12-14
Из: Россия, Минусинск

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


Я точно не знаю... Да, скорее в CSS. Проблема в том что при заключении строчки текста в заглавные теги, типа <h1> <h2> и тд., после сохранения, высота текста у всех одинаковая, при разных значениях заглавия!
Перейти в начало страницы
+Цитировать сообщение
SiTiS
сообщение 2009-09-30, 17:22
Сообщение #6
Любитель
Иконка группы

Группа: Пользователи
Сообщений: 215
Регистрация: 2008-12-14
Из: Россия, Минусинск

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


Atix, зайди на http://cmsglobal.ru/
блок "привет", выдает такую бяку... попробовал как ты говорил и как Skyff, но вот рамка все ломает!

Да, именно так! Но что бы оно выводилось не в новость, а отдельным блоком, Вот рамку как прям на твоем скрине.
Перейти в начало страницы
+Цитировать сообщение
Atix
сообщение 2009-09-30, 19:06
Сообщение #7
Любитель
Иконка группы

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

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


Это добавь в block.css

Цитата
#my_blocktype1
{
    margin-bottom: 6px;
    width: 528px;
    background: url(../images/my_block.png) no-repeat;
    padding-left: 11px;
    margin-left: -1px;
    margin-top: -7px;
    padding-top: 9px;
}
#my_dbottom
{
    background: url(../images/my_block2.png) no-repeat bottom;
    padding-bottom: 30px;
    margin-left: -11px;
    padding-left: 12px;
    padding-right: 10px;
}


Эти 2 картинки кинь в папку images в твоей теме оформления.
Прикрепленные файлы  images.rar ( 1.53 килобайт ) Скачиваний: 11


Потом создай блок, выбери Текстовый блок.

Вставь

[dohtml]
<div id="my_blocktype1">
<div id="my_dbottom">
<h3>Добро пожаловать на CMSglobal!</h3><br />
Рады Вас видеть на нашем сайте! Данный проект представляет собой базу CMS (систем управления сайтом). Сайт был недавно запущен, поэтому информации на нем мало. Но если Вам понравилась тема проекта и Вы хотите участвовать в его разработке, то будем рады принять Вас в наш круг поддержки!
</div></div>
[/dohtml]


Потом перейди на опции и поставь галочку "Не применять оформление:"

Сообщение отредактировал Atix - 2009-09-30, 19:30

Прикрепленные файлы
Прикрепленные файлы  images.rar ( 1.53 килобайт ) Скачиваний: 11
 
Одобрили: SiTiS
Перейти в начало страницы
+Цитировать сообщение
Hummer
сообщение 2009-10-13, 17:27
Сообщение #8
Любитель
Иконка группы

Группа: Eleanor user
Сообщений: 174
Регистрация: 2009-03-23
Из: Калининград

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


AddCommets.php Сделайте инфу

Сообщение отредактировал Hummer - 2009-10-13, 17:27
Перейти в начало страницы
+Цитировать сообщение
Skyff
сообщение 2009-10-13, 18:50
Сообщение #9
Опытный
Иконка группы

Группа: Eleanor user
Сообщений: 925
Регистрация: 2009-02-08
Из: Литва

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


Воще я думаю что все ФАКИ надо в одном месте держат а то искать не каждый найдет пока не тыкнешь, и правильно ведь все по форуму разбросано :)
Перейти в начало страницы
+Цитировать сообщение
Hummer
сообщение 2009-10-25, 18:41
Сообщение #10
Любитель
Иконка группы

Группа: Eleanor user
Сообщений: 174
Регистрация: 2009-03-23
Из: Калининград

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


а будут работать теги (новости) в коротких новостях?
Перейти в начало страницы
+Цитировать сообщение
termit
сообщение 2009-10-29, 19:28
Сообщение #11
Опытный
Иконка группы

Группа: Бета-тестеры
Сообщений: 705
Регистрация: 2009-06-02
Из: Житомир

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


Помогите. Не могу найти файл оформления меню сайта...
Перейти в начало страницы
+Цитировать сообщение
main
сообщение 2009-12-30, 2:20
Сообщение #12
Заглянувший
Иконка группы

Группа: Eleanor user
Сообщений: 14
Регистрация: 2009-12-28
Из: Ростов

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


хороший урок только для меня не очень привычно.....

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

Если PHP непонимают то пусть с английским всй соотносят!!!!!!

А вобще молодец что такого рода уроки создаёшь... поддерживаю

Сообщение отредактировал main - 2009-12-30, 2:21
Перейти в начало страницы
+Цитировать сообщение
NullMachine
сообщение 2010-02-08, 12:31
Сообщение #13
Любитель
Иконка группы

Группа: Eleanor user
Сообщений: 154
Регистрация: 2010-01-01
Из: Саранск

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


Такой вопрос, на главной странице выводится модуль новости и модуль опросы, почему при выводе модуля опросы над ним есть заголовок с названием выводимого модуля, а у модуля новостей заголовка нет. Если это так задумано, то как мне вывести заголовок модуля у новостей.

И еще какой файл отвечает за оформление выводимого модуля на главной странице. Есть Base, но он оформляет только выводимый контент модуля , а хотелось иметь что то вроде TableOpenNamemodule TableCloseNamemodule который будет отвечать за вывод модуля целиком. Если уже есть такое, то скажите какой файл создать.

Сообщение отредактировал NullMachine - 2010-02-08, 12:46
Перейти в начало страницы
+Цитировать сообщение
Maximkaboom
сообщение 2010-05-14, 0:57
Сообщение #14
Опытный
Иконка группы

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

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


 А как вывести в новости иконку категории, к которой она принадлежит?
Перейти в начало страницы
+Цитировать сообщение
Alexander
сообщение 2010-05-15, 14:56
Сообщение #15
Eleanor developer
Иконка группы

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

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


Есть поле 'image' - его и выводите.
Перейти в начало страницы
+Цитировать сообщение
termit
сообщение 2010-05-23, 0:38
Сообщение #16
Опытный
Иконка группы

Группа: Бета-тестеры
Сообщений: 705
Регистрация: 2009-06-02
Из: Житомир

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


Помогите.
1.Какие файлы отвечают за отображение коментариев?
2.Какие файлы отвечают за отображение информации о пользователе
(напримет на странице вида /index.php?module=account&info=ник)

Сообщение отредактировал termit - 2010-05-23, 0:38
Перейти в начало страницы
+Цитировать сообщение
Maximkaboom
сообщение 2010-06-03, 18:46
Сообщение #17
Опытный
Иконка группы

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

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


Цитата (Alexander @ 2010-05-15, 15:56)
Есть поле 'image' - его и выводите.


Можно на примере?
Перейти в начало страницы
+Цитировать сообщение
Гость_VCITY1_*
сообщение 2010-09-30, 19:45
Сообщение #18



Гости





пытаюсь на основе этого шаблона переделать внешний вид все просмотрел ну во незадача какой файл отвечает за Блоги подскажите пожалуйста .
Перейти в начало страницы
+Цитировать сообщение
sanes
сообщение 2010-09-30, 20:08
Сообщение #19
Аноним
Иконка группы

Группа: Пользователи
Сообщений: 1 180
Регистрация: 2008-12-29
Из: Волгоград

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


templates/Uniel/Classes/Blogs.php
Перейти в начало страницы
+Цитировать сообщение
Phoenix84
сообщение 2010-10-01, 14:14
Сообщение #20
Любитель
Иконка группы

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

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


Цитата
1.Какие файлы отвечают за отображение коментариев?
2.Какие файлы отвечают за отображение информации о пользователе
(напримет на странице вида /index.php?module=account&info=ник)


Может и не вовремя, но:
1) /templates/шаблон/classes/comments.php
2)/modules/account/user/index.php
Перейти в начало страницы
+Цитировать сообщение

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

 
RSS Текстовая версия 0.0467 сек.    11 запросов    GZIP включен    Сейчас: 2020-01-22, 7:35