Краткий мануал по работе с блоками или как правильно изменять шаблоны LS

Уже второй день разбираюсь с LS — добился того, что нужно, при этом пришлось прочитать много инфы. Учитывая, что я ни разу не программист, изначально многое не понятно в движке, так как большая часть документации и объяснений находится в разных топиках, комментариях, мануалах.

Надеюсь данный топик поможет начинающим понять структуру LS, как с ним работать, как редактировать шаблоны и как добавлять нужные блоки на сайт.



Итак, если вам нужно просто добавить пару строк текста на все страницы, то проще всего, сделать это в файлах самого скина, которые находятся в templates/skin/имя скина. Когда откроете, то увидите там кучу файлов. Как же разобраться в том, какой шаблон за что отвечает? В этом очень помогает небольшой хак, который можно узнать в этой статье http://livestreet.ru/blog/dev_documentation/10395.html. Не забудьте только после всего, удалить скомпилированный шаблон с папки templates/compiled/ваш шаблон, чтобы увидеть изменения. Теперь, когда в коде страницы сразу видно где работает определенный шаблон, то все просто — берете этот шаблон и вставляете туда то, что надо.

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

Кто знаком с wordpress, то скажу, что инфа в LS строится по типу виджетов в wordpress. Т.е. для начала нам нужно создать зону для вывода блоков, а потом поместить туда блоки с определенными условиями. Сделать это можно 2 способами — или через встроенные функции движка или через плагин. Теперь по порядку.

Для начала создадим зону вывода — это нужно делать в любом случае. Допустим сделаем зону с названием «high»

{if isset($aBlocks.high)}
        {foreach from=$aBlocks.high item=aBlock}
                {if $aBlock.type=='block'}
                        {insert name="block" block=$aBlock.name params=$aBlock.params} 
                {/if}
                {if $aBlock.type=='template'}                                            
                        {include file=$aBlock.name params=$aBlock.params}
                {/if}   
        {/foreach}                      
{/if}


Само название задается в $aBlocks.high — т.е. если нужна зона fuckzona, то нужно писать $aBlocks.fuckzona
Также можете воспользоваться топиком http://livestreet.ru/blog/dev_documentation/8443.html, там есть похожий, но чуть расширенный пример.

Теперь нужно создать сам блок. Вообще, у движка есть свои системные блоки, они находятся в classes/blocks. Сами блоки, это работа двух составляющих — php кода, который создает динамику блока и шаблона вывода в формате .tpl. В моем случае, нужно было вывести обычный блок с html кодом, поэтому можно использовать только шаблон вывода tpl, об этом чуть ниже.

Чтобы создать шаблон блока, вам нужно в папке своего скина создать файлик, к примеру, block.toptext.tpl — куда и запихнете тот код, который нужно вывести.

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

Первый способ можно подсмотреть в файле конфигурации — config/config.php — с этим файлом вы скорее всего часто будете работать.

Возьмем к примеру с конфига такой код

$config['block']['rule_index_blog'] = array(
	'path' => array(
		'___path.root.web___/blog$',
		'___path.root.web___/blog/*$',
		'___path.root.web___/blog/*/page\d+$',
		'___path.root.web___/blog/*/*\.html$',
		'___path.root.web___/blog/*\.html$',
		'___path.root.web___/top(|(/.+))$',
	),
	'action'  => array(
			'index', 'new'
		),
	'blocks'  => array(
			'right' => array('stream'=>array('priority'=>100),'tags'=>array('priority'=>50),'blogs'=>array('params'=>array(),'priority'=>1))
		),
	'clear' => false,
);


path — тут указывается условие на урл. При этом ___path.root.web___/ — означает корень сайта, все остальное — это регулярные выражения. Далее идет action. Actions — это важная часть движка — это как бы действия, подробно о них в вики. Если быть кратким, то пример, страничка livestreet.ru/topic/edit/10343/, Action — это topic, а Event — это edit. Список action можно глянуть в конфиге где-то на 333 строчке, они все имеют понятные имена.

Добавлю также, что action нужно писать в любом случае. Если хотите, чтобы не было привязки к экшенам, то оставьте это поле пустым.
Неплохой топик описывающий правила блоков — http://livestreet.ru/blog/10343.html

Но перейдем к нашему примеру. Допустим нужно вывести все, что хранится в созданном шаблоне block.toptext.tpl в зону high, причем вывод должен происходить исключительно на главной странице сайта. Код будет такой

$config['block']['toptext'] = array(
        'action'  => array('index'),
        'blocks' => array('high' => array('block.toptext.tpl'=> array('priority'=>95))),
                        );


['toptext'] — здесь я указываю уникальное имя(правило) блока
'blocks' => array('high' => array('block.toptext.tpl'=> array('priority'=>95))) — здесь массив, в котором указана зона high, а также указан шаблон block.toptext.tpl — причем у него priority(преимущество) — 95. Это означает, что если в зону будет выводится несколько блоков, то первым будет идти тот блок, у которого преимущество выше. Обратите внимание также на action — я указал его index — это action отвечающий за обработку главной страницы. Если бы я указал там blog — то этот блок выводился бы на страницах блогов и т.д. Также еще нужно сказать, что если в массиве вы укажите не имя шаблона block.toptext.tpl, а просто имя, например, toptext — то этот блок будет искаться движком в папке системных блоков.

Очень много примеров с разными условиями вы найдете в самом конфиге. Также добавлю, что обычно есть 2 файла конфига, это congig.php и config.local.php, в основном обычно хранятся важные системные настройки, которые лучше не ковырять, а все правила для вашего сайта выносить в local

Теперь перейдем к более расширенному управлению блоков, с помощью плагина aceBlockManager. Все топики плагина раскиданы по времени, а жаль, они содержат много примеров. Вот напишу некоторые

livestreet.ru/blog/addons/2378.html
livestreet.ru/blog/3426.html
livestreet.ru/blog/4478.html
livestreet.ru/blog/8805.html
livestreet.ru/blog/9372.html

В конфиге плагина aceblockmanager/config/config.local.php — есть немало примеров. По большому счету он делает все тоже, что я описывал выше, но с гораздо более расширенными условиями вывода и управления. Рассмотрим все на нашем примере. Допустим, нужно создать такой блок, который выводился бы только на странице blog/questions/new.

Активируем плагин, создаем блоковую зону и шаблон вывода блока, как описано выше, а теперь в конфиге плагина пишем следующий код

$config['blocks'][] = array(
    'block' => 'block.toptext.tpl', // название шаблона блока
   'position' => 'high', // зона блока
   'priority' => 100, 
  'params' => array(), //здесь пишем параметры
    'include'=>array('blog/questions/new'), //сюда вставляем наш урл
);


Многие примеры есть в конфиге самого плагина и на страницах топиков. Важный еще момент, который я упустил сразу. В примерах, часто указывается в параметрах 'plugin' => 'aceblockmanager', если вы оставите вот именно так, то тогда шаблон для вывода будет парсится не с папки темы, а с папки темы расположеной именно в папках плагина, а именно aceblockmanager/templates/skin/название скина, или же с папки aceblockmanager/classes/blocks, если вы захотите создать динамику в блоке.

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

Вот и все, удачи в изучении.
Качественное продвижение сайтов в поисковых системах.

2 комментария

avatar
вот еще одну вещь важную заметил, 2 часа убил на неё. Если вы воспользовались хаком, который добавляет комментарии о шаблонах (описан в самом начале), то перед доктайпом появятся тоже комментарии, из-за этого в ИЕ могут быть проблемы, так как доктайп станет неверным.
  • ETNO
  • 0
avatar
хорошая статья!
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.