Сайдбар в Livestreet — вывод и очередность блоков
Так уж сложилось, что тематика Livestreet завлекла меня еще на один день. Нельзя сказать, что это было приятное времяпровождение, просто я решил все же «добить» имеющиеся задачи и довести работу над блогом про гаджеты до конца. Собственно, своими знаниями за сегодня я с вами и поделюсь. Напомню только, что ранее в блоге вы также можете найти посты про шаблон Livestreet (+впечатления от системы), а также механизм добавления Sape в Livestreet. Не следует переживать, что блог вдруг резко и надолго стал посвящен данной CMS — обещаю, сегодня последняя статья про нее:) Поговорим про сайдбар (боковую колонку) сайта.
Файлы шаблона для моего сайта находятся в директории /templates/skin/social-jquery. Действуя по законам логики я отыскал, как мне казалось, файл сайдбара sidebar.tpl, который в том же wordpress позволяет задавать отображение всех нужных блоков. На самом же деле в нем был совершенно стандартный и общий для системы код:
<div id="sidebar"> {if isset($aBlocks.right)} {foreach from=$aBlocks.right 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} </div> |
Методом тыка в той же директории /templates/skin/social-jquery нашел некоторые файлы, что могли мне помочь — блок тегов (block.tags.tpl), комментариев (block.stream.tpl) и т.п. В каждом из них можно было добавить свой код, например, для той же биржи Sape, но очередность и новые элементы мне не поддавались.
Для начала по простому добавил в конец сайдбара (файл sidebar.tpl) вывод тегов:
<div class="block stream" id="block_stream"> <div class="sidetags"> {insert name="block" block=tags} </div> </div> |
Как видите, это оказалось не сложно. Структура облака задана в block.tags.tpl, а код выше данный файл и отображает. Заметьте синтаксис: в insert — указываете имя block, а потом нужный вам элемент tags. По аналогии, думаю, можно выводить и остальные блоки, если понадобиться. Тем не менее, этот вариант не совсем правильный.
Расположение тегов в самом конце сайдбара меня не особо устраивало, хотелось поменять очередность блоков. Но в Livestreet новичку сделать это нереально сложно — экшены, модули, хуки, блоки, разбираться во всем этом можно вечно. Безусловно, я искал решение на тематических блогах и форумах, но перепробовав 4-5 вариантов, все равно ничего не добился. В принципе, создается впечатление, что решить ту или иную задачу можно разными способами, но разобраться в специфике CMS и шаблона так как это можно с wordpress не суждено. Под конец дня мне казалось, будто я пересмотрел добрую половину файлов системы и шаблона, перепробовав все, что только можно. К счастью, нужный вариант все же нашелся.
Заходим в файл системы config.php, который располагается в директории с таким же названием (config). Здесь есть следующий код:
$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),'blogs'=>array('params'=>array(),'priority'=>150),'tags'=>array('priority'=>120)) ), 'clear' => false, ); |
Место с «blocks» задает какие именно блоки будут отображаться в сайдбаре (right), причем для каждого из них определяется приоритет. Есть список категорий (blogs), комментарии (stream) и теги (tags). Сами же файлы шаблона с HTML кодом отображаемого в этих элементах следует уже искать в директории шаблона — /templates/skin/social-jquery — block.blogs.tpl, block.stream.tpl, block.tags.tpl и т.п.
Казалось бы не особо сложно, но это очередность только для главной страницы, чуть ниже в файле конфига config.php имеются и другие варианты. Так, например, на странице тегов у меня отображалось только облако без категорий и комментариев, поэтому исходный код заменил на:
$config['block']['rule_tag'] = array( 'action' => array( 'tag' ), 'blocks' => array( 'right' => array('blogs','tags','stream') ), ); |
Здесь, почему-то, в коде элементы сайдбара просто выводились по порядку без приоритетов. Много в Livestreet каких-то непонятных моментов. За примером далеко ходить не нужно. Выше я уже рассказал, что задал расположение блоков сайдбара для главной, а заодно и страницы категорий + теги. Попытки сделать что-то с полным отображением поста (топика) никак не завершались успехом. Признаться я уже было думал публиковать пост без этого, как в последний момент наткнулся на плагины.
Сначала пытался использовать в качестве «зацепки» тот факт, что на странице с постом отображается блок «Похожие статьи» (модуль similar), но просмотрев абсолютно все его файлы, ничего не нашел. И лишь потом меня осенило — а может все дело в модуле, который заменяет обычные URL страниц на красивые ссылки (NiceURL) — ведь в конфигах часто проскальзывала привязка в URL. И что бы вы думали — открываю директорию plugins/niceurl/config, в ней файл config.php и нахожу код:
/** * Настройка блоков для отображения на странице топиков */ $aBlocks=array( array( 'group' => 'right', 'name' => 'stream', 'params' => array(), 'priority' => 50, ), array( 'group' => 'right', 'name' => 'blogs', 'params' => array(), 'priority' => 150, ), array( 'group' => 'right', 'name' => 'tags', 'params' => array(), 'priority' => 100, ), ); |
Собственно, знакомые уже приоритеты и названия блоков — можно добавлять новые и менять их порядок. И главное по простому все так, с описанием и комментариями в коде… но скажите кто мог изначально догадаться, что пройдя путь от файлов шаблона, конфига самой Livestreet, нужно заглянуть именно сюда?
Поставив точку в эпопеи разбора шаблона Livestreet испытываю двоякие чувства. С одной стороны, маленькую крохотную радость, что все разрешилось, с другой — негодование от количества потраченного времени. Хотя проблема даже не во времени, а в том, что я встретил на своем пути. Чем-то это напомнило настройку VaM Shop, но там пришлось возиться исключительно с шаблоном, здесь же все намного сложнее, наворочено столько всего, что кошмар — переменные, настройки, коды слились воедино… Возможно специалисту разобраться не так сложно, но новичку… Новичку, я бы советовал дважды подумать, чем с этим связываться. Хотя для справедливости следует заметить, что поднять социальную сеть на других CMS может оказаться еще более сложной задачей. Ну и, конечно, Smarty — зло.
P.S. На сайте Electrostancii.com.ua найдете интернет магазин где представлены дизельные генераторы и различные электростанции с подробным описанием и возможностью заказа.
Если изначально потратить 15 минут на чтение конфига config.php, то можно в итоге сэкономить кучу времени. А если еще понимать, что различные плагины в силу своей специфики могут переопределять основной конфиг и иметь свой, то все сводится к правки конфигов.
И правка основного конфига config.php плохая практика — все изменения нужно вносить в config.local.php (если нет — копировать нужные параметры), это позволит избежать проблем при обновлении движка.
ort, в принципе, с основного конфига я и начинал, про переопределения тоже подумывал, но слишком много информации сразу и слишком много нюансов, это очень запутывает. За пару часов, как я хотел, разобраться не получилось:)
Если что-то очень не получается — следует поотключать плагины и попробовать снова, т.к. некоторые плагины делегируют часть настроек и/или кода.
zedget все верно, часто бывает так, что плагины конфликтуют, если их немного, можно попробовать по одному (два-три) выключать их, и смотреть что изменится
Пытаюсь в своем шаблоне найти как в сайдбаре перемещать блоки. Эта статья и комментарии подсказали ,что нужно обратить внимание на плагины, за что большущее спасибо. Буду пробовать.