Теги виджетов в шаблонах
19.01.2011Голосование
| Тип | Задача |
| Состояние | Исправлено |
| Приоритет | Низкий |
| Версия | 4.14 |
| Система | * |
| Воспроизводимость | Нет |
| Автор | Блоголётчик |
| Исполнитель | Блоголётчик |
Уже поднимался вопрос о б отдельных для каждого из стандартных виджетов тегах. То есть чтобы в шаблоне темы можно было указать $categories.title, $categories.content. Для чего это нужно? Для решения задач без программирования на php и без влезания в другие дебри движка. Этому препятствует несколько причин:
- текущая модель виджетов, которые управляются из админки, а именно добавление, удаление, редактирование, перемещение
- для этих тегов тоже нужны шаблоны, откуда их брать? Вопрос решается за счет унаследованных шаблонов или
- не определен сайдбар для шаблона, ну например для первого сайдбара не нужно указывать номер сайдбара. А как быть со вторым сайдбаром? Как указать контекст - номер сайдбара?
Постараюсь, путем рассуждений, решить эти вопросы. Противоречие между админкой и расстановкой виджетов в шаблоне обойти невозможно: либо одно, либо другое. Можно разрешить оба. Тогда желательно будет помечать темы не поддерживающие виджеты из админки. Идеальным было бы решение, когда админка сохраняла бы расположение виджетов в виде шаблона. Пока это не так и трудозатраты для реализации этой функции (сохранение и обратное чтение шаблонов виджетов) будет более затратным, чем полученный результат.
Чем плохо одновременное использование виджетов из админки и виджетов прямо в теме? Да ни чем катастрофичным это не грозит, кроме жалоб пользователей установивших такую тем на то, что невозможно удалить/переместить некоторый виджет, указанный прямо в теме. Также возможно дублирование виджетов. у
Путей точно указать номер сайдбара я не вижу вообще. Номер сайдбара меняется или указывается при помощи тегов $template.sidebar* С объявлением шаблонов с указанием что этот виджет зафиксирован именно здесь я тоже пока не вижу.
После решения этих вопросов реализовать эту функциональность будет делом одного дня.
← Ранее Виджеты в табах
Комментарии (12) на запись “Теги виджетов в шаблонах”
Оставить комментарий
sidebar1 = [
<h3>$categories.title</h3><div>$categories.items</div>
<h3>$archives.title</h3><div>$archives.items</div>
]
А шаблоны самих итемс пусть остаются снаружи:
$categories.items = [...]
$archives.items = [...]
А в моем случае для табов тогда как раз можно вывести так:
sidebar1 = [
<h3>$categories.title</h3><h3>$archives.title</h3>
<div>$categories.items</div><div>$archives.items</div>
]
Сейчас я написал и проверил работоспособность нового плагина - теги виджетов, однозначно будет в новом релизе (когда не знаю), а если срочно, то из репозитория:
http://litepublisher.googlecode.com/svn/trunk/lib/theme.class.php
обновить файл в lib и сам плагин:
http://litepublisher.googlecode.com/svn/trunk/plugins/widget-tags
Забыл написатьь как использовать, после инсталяции доступны все стандартные виджеты кроме свежих комментариев, у каждого виджета доступны свойства:
получаются теги вида $categories.title, $archives.items, $tags.content и так далее.
Теги можно использовать абсолютно в любом месте темы
Вылезли варнинги при активизации:
Warning: Cannot modify header information - headers already sent by (output started at X:\home\seodiz.ru\www\plugins\widget-tags\widgettags.plugin.php:1) in X:\home\seodiz.ru\www\lib\kernel.php on line 1727
Warning: Cannot modify header information - headers already sent by (output started at X:\home\seodiz.ru\www\plugins\widget-tags\widgettags.plugin.php:1) in X:\home\seodiz.ru\www\lib\kernel.php on line 1728
Warning: Cannot modify header information - headers already sent by (output started at X:\home\seodiz.ru\www\plugins\widget-tags\widgettags.plugin.php:1) in X:\home\seodiz.ru\www\lib\kernel.php on line 1730
Warning: Cannot modify header information - headers already sent by (output started at X:\home\seodiz.ru\www\plugins\widget-tags\widgettags.plugin.php:1) in X:\home\seodiz.ru\www\lib\kernel.php on line 1731
Warning: Cannot modify header information - headers already sent by (output started at X:\home\seodiz.ru\www\plugins\widget-tags\widgettags.plugin.php:1) in X:\home\seodiz.ru\www\lib\kernel.php on line 1732
Но после рефреша и отправки данных повторно вроде пропали, тестим дальше...
Все выводится супер, теперь даже можно будет виджет похожих записей в пост запихать, только как сделать чтоб они неотображались в сайдбаре если вызываем их напрямую? назначить им левый зайдбар с пустыми шаблонами? Или просто удалить виджеты а движок их сам соберет когда найдет переменную?
Warning: Cannot modify header information - headers already sent by (output started at X:\home\seodiz.ru\www\plugins\widget-tags\widgettags.plugin.php:1) in X:\home\seodiz.ru\www\lib\kernel.php on line 1730
Warning: Cannot modify header information - headers already sent by (output started at X:\home\seodiz.ru\www\plugins\widget-tags\widgettags.plugin.php:1) in X:\home\seodiz.ru\www\lib\kernel.php on line 1731
Warning: Cannot modify header information - headers already sent by (output started at X:\home\seodiz.ru\www\plugins\widget-tags\widgettags.plugin.php:1) in X:\home\seodiz.ru\www\lib\kernel.php on line 1732
А с виджетом комментов ничего несделать? Он бы супер смотрелся во вкладке табов в паре со свежими записями.
А зачем мне номер сайтбара? Он совсем и не нужен. Просто удаляю виджеты задействованные в табах в админке, а нужные прописываю в index.tml в нужной мне конструкции и в нужном порядке и вуаля! Айди сайдбара ненужен совсем для вывода!
У меня шас виводятся табы вот в такой конструкции:
<div class="section">
<ul class="tabs"><li class="current">$categories.title</li><li>$archives.title</li></ul>
<div class="rtop clear"></div>
<div class="box visible">$categories.items</div>
<div class="box">$archives.items</div>
<div class="rbtm"></div>
</div><!-- .section -->
Вот таким коротеньким скриптом:
$(function(){$('ul.tabs').delegate('li:not(.current)','click',function(){$(this).addClass('current').siblings().removeClass('current').parents('div.section').find('div.box').hide().eq($(this).index()).fadeIn(500);})})(jQuery)
CSS обязательно:
.tabs {position:relative;}
.tabs li {float:left;} /выстраиваем титле в линию/
.box {display: none;}
.box.visible {display: block;}
Можешь попробовать.
Caught exception:
Unknown "options" widget
<h1>0 plugins\widget-tags\widgettags.plugin.php(36): tdata->error('Unknown "option...')</h1>
<h1>1 [internal function]: twidgettags->getvar('options')</h1>
<h1>2 lib\kernel.php(504): call_user_func_array(Array, Array)</h1>
<h1>3 lib\kernel.php(465): tevents->callevent('gettemplatevar', Array)</h1>
<h1>4 lib\theme.class.php(137): tevents->__call('gettemplatevar', Array)</h1>
<h1>5 lib\theme.class.php(137): tclasses->gettemplatevar('options')</h1>
<h1>6 lib\theme.class.php(163): ttheme->getvar('options')</h1>
<h1>7 [internal function]: ttheme->parsecallback(Array)</h1>
<h1>8 lib\theme.class.php(182): preg_replace_callback('/\$(\w\w*+)\.(\...', Array, '<h2>$lang.info<...')</h1>
<h1>9 lib\htmlresource.class.php(102): ttheme->parse('<h2>$lang.info<...')</h1>
<h1>10 lib\htmlresource.class.php(61): tadminhtml->parsearg('<h2>$lang.info<...', Object(targs))</h1>
<h1>11 lib\admin.service.class.php(25): tadminhtml->__call('info', Array)</h1>
<h1>12 lib\admin.service.class.php(25): tadminhtml->info(Object(targs))</h1>
<h1>13 lib\menu.class.php(350): tadminservice->getcontent()</h1>
<h1>14 lib\theme.class.php(170): tmenu->__get('content')</h1>
<h1>15 [internal function]: ttheme->parsecallback(Array)</h1>
<h1>16 lib\theme.class.php(182): preg_replace_callback('/\$(\w\w*+)\.(\...', Array, '<div class="pos...')</h1>
<h1>17 lib\theme.class.php(199): ttheme->parse(Object(tthemeprops))</h1>
<h1>18 lib\menu.class.php(426): ttheme::parsevar('menu', Object(tadminservice), Object(tthemeprops))</h1>
<h1>19 lib\template.class.php(203): tmenu->getcont()</h1>
<h1>20 lib\template.class.php(43): ttemplate->getcontent()</h1>
<h1>21 lib\theme.class.php(170): ttemplate->__get('content')</h1>
<h1>22 [internal function]: ttheme->parsecallback(Array)</h1>
<h1>23 lib\theme.class.php(182): preg_replace_callback('/\$(\w\w*+)\.(\...', Array, '???<!DOCTYPE ht...')</h1>
<h1>24 lib\theme.class.php(206): ttheme->parse('???<!DOCTYPE ht...')</h1>
<h1>25 lib\template.class.php(71): ttheme->gethtml(Object(tadminservice))</h1>
<h1>26 lib\kernel.php(1445): ttemplate->request(Object(tadminservice))</h1>
<h1>27 lib\kernel.php(1406): turlmap->GenerateHTML(Array)</h1>
<h1>28 lib\kernel.php(1318): turlmap->printcontent(Array)</h1>
<h1>29 lib\kernel.php(1307): turlmap->dorequest('/admin/service/')</h1>
<h1>30 index.php(81): turlmap->request('seodiz.ru', '/admin/service/')</h1>
<h1>31 {main}
Значит под виджеты в табах нада каждому персонально там указать шаблон, а иначе все остальные виджеты будут выводится также.