Краткий мануал по работе с блоками или как правильно изменять шаблоны LS
Уже второй день разбираюсь с LS — добился того, что нужно, при этом пришлось прочитать много инфы. Учитывая, что я ни разу не программист, изначально многое не понятно в движке, так как большая часть документации и объяснений находится в разных топиках, комментариях, мануалах.
Надеюсь данный топик поможет начинающим понять структуру LS, как с ним работать, как редактировать шаблоны и как добавлять нужные блоки на сайт.
Итак, если вам нужно просто добавить пару строк текста на все страницы, то проще всего, сделать это в файлах самого скина, которые находятся в templates/skin/имя скина. Когда откроете, то увидите там кучу файлов. Как же разобраться в том, какой шаблон за что отвечает? В этом очень помогает небольшой хак, который можно узнать в этой статье http://livestreet.ru/blog/dev_documentation/10395.html. Не забудьте только после всего, удалить скомпилированный шаблон с папки templates/compiled/ваш шаблон, чтобы увидеть изменения. Теперь, когда в коде страницы сразу видно где работает определенный шаблон, то все просто — берете этот шаблон и вставляете туда то, что надо.
Но если задача сделать динамический блок, который будет отображаться в зависимости от определенных условий? Здесь чуть сложнее, надо для начала объяснить основную логику шаблонов LS.
Кто знаком с wordpress, то скажу, что инфа в LS строится по типу виджетов в wordpress. Т.е. для начала нам нужно создать зону для вывода блоков, а потом поместить туда блоки с определенными условиями. Сделать это можно 2 способами — или через встроенные функции движка или через плагин. Теперь по порядку.
Для начала создадим зону вывода — это нужно делать в любом случае. Допустим сделаем зону с названием «high»
Само название задается в $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 — с этим файлом вы скорее всего часто будете работать.
Возьмем к примеру с конфига такой код
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, причем вывод должен происходить исключительно на главной странице сайта. Код будет такой
['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.
Активируем плагин, создаем блоковую зону и шаблон вывода блока, как описано выше, а теперь в конфиге плагина пишем следующий код
Многие примеры есть в конфиге самого плагина и на страницах топиков. Важный еще момент, который я упустил сразу. В примерах, часто указывается в параметрах 'plugin' => 'aceblockmanager', если вы оставите вот именно так, то тогда шаблон для вывода будет парсится не с папки темы, а с папки темы расположеной именно в папках плагина, а именно aceblockmanager/templates/skin/название скина, или же с папки aceblockmanager/classes/blocks, если вы захотите создать динамику в блоке.
Очень удобной функцией плагина является и то, что вы через конфиг можете управлять не только обычными статическими блоками, но и блоками, в которых работают плагины. В конфиге есть пример как установить блок онлайн пользователей и управлять им.
Вот и все, удачи в изучении.
Надеюсь данный топик поможет начинающим понять структуру 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 комментария