Виджеты в табах
18.01.2011Голосование
Голосование на
Виджеты в табах
Всего проголосовало:
6
| Тип | Задача |
| Состояние | Исправлено |
| Приоритет | Средний |
| Версия | 4.14 |
| Система | * |
| Воспроизводимость | Нет |
| Автор | Sergey |
| Исполнитель | Блоголётчик |
Хочу упаковать виджеты в табы, вот такая конструкция:
<div class="section">
<ul class="tabs">
<li class="current"><a href="#">Рубрики</a></li><li><a href="#">Архивы</a></li>
</ul>
<div class="box visible">Содержимое рубрик</div>
<div class="box">Содержимое архивов</div>
</div><!-- .section -->
Возможно ли это?
Таким вариантом наверно работать не будет:
<div class="section">
<ul class="tabs">
<li class="current"><a href="#">$sidebar.categories.title</a></li><li><a href="#">$sidebar.archives.title</a></li>
</ul>
<div class="box visible">$sidebar.categories.items</div>
<div class="box">$sidebar.archives.items</div>
</div><!-- .section -->
Подозреваю что для этого придется добавлять новый класс, чтото типа:$template.sidebar.tabs.
Реально что либо придумать, или слишком трудоемко?
RSS комментарии к этой записи
Рубрики: Задачи
← Ранее Размещение и удаление ссылок
Позже Теги виджетов в шаблонах →
Комментарии (7) на запись “Виджеты в табах”
Оставить комментарий
Задача полностью решаема средствами только темы. Что для этго нужно? Во первых скрипт самих табов, например в админке я использую табы из библиотеки UI., подгружаю их в скрипте. Предположим, что тем или иным способом подключен скрипт табов, то остается задача сделать такой шаблон виджета, чтобы он был в работал с табами. Во первых, очевидно, что потребуется промежуточный скрипт (на самом деле есколько строк), который бы по первому клику на виджет в списке табов отдавал бы контент (создавал бы) для таба..
Перед тем, как продолжу рассуждения, могу заметить, что задача мне интересна и она решаема. Буду исходить из того, что скрипт табов из UI - я им умею пользоваться, а других решений я по правде и не пробывал, поскольку это полностью удовлетворяло мои требования. И так подключение табов по запросу:
function inittabs(sel, callback) {
$(document).ready(function() {
$('<link rel="stylesheet" type="text/css" href="'+ ltoptions.files + '/js/jquery/ui/ui-lightness/jquery-ui-1.8.7.custom.css" />').appendTo("head");
$.getScript(ltoptions.files + '/js/jquery/ui/jquery-ui-1.8.7.custom.min.js', function() {
$(sel).tabs({ cache: true });
if (typeof callback=== "function") callback();
});
});
}
Эту функцию я написал сам и она находится в файле js/litepublisher/admin.js. Как альтернативный вариант (скорее всего более предпоччительный, особено на этапе тестирования) объявить стиль и скрипт в виде тегов секции head. Путь к скрипту табов это
$site.files/js/jquery/ui/jquery-ui-1.8.7.custom.min.js
разворачивании контента виджета из html комментария в контент таба. Вернусь к шаблону виджета. Идея состоит в
sidebar.widget = [
<li ><a href="#tab-$id"><span>$title</span></a></li>
$items = [
<!--
<ul>
$item = [<li><a rel="$rel" href="$link" title="$title">$icon$text</a>$subitems = [<ul>$item</ul>]</li>]
</ul>
-->
]
]
Как видим, контент находится в html комментарии и никак не отобразится на странице и не помешает скрипту табов. Остается одно - извлечь текст из комментария и поместить его в соответствующий див. Можно поступить двумя спосабами для ui: перед инициализзацией табов заполнить соответствующие дивы, либо отдавать контент по требованию (то биш по клику).Я приведу шаблон табов к шаблону для ui:
<div id='tabs'>
<ul>
$template.sidebar
</ul>
</div>
Объеденяя два шаблона вместе мы получим примерно следующий html код, с ккторым можно будет работать:
<div id='tabs'>
<ul>
<li ><a href="#tab-1"><span>Название виджета</span></a></li>
<!--
контент виджета, из шаблона это будет список ul
-->
</ul>
</div>
Далее прошу снисходительно отнестись к моему коду на jquery, ибо с ним я познакомился едва ли больше месяца назад. Надо получить список всех ссылок, возле которого будет контент.
$(document).ready(function(){
$("#tabs ul").find("a").each(function (i) {
//найти комментарий, widgets.findcomment функция из скриптов движка для аяксовых виджетов
var comment = widgets.findcomment(this, false);
if (comment) {
var content = comment.nodeValue;
var href = $(this).attr("href");
var id = href.substr(1);
// добавляем новый див с нужным id
$("#tabs").append('<div id="' + id + '">' + content + '</div>');
}
});
//инициализация табов
$("#tabs").tabs({ cache: true });
});
Получилось несколько академично, но надеюсь подсказал если уже не рабочий код (после тестирования должен заработать), то хотя бы направление куда копать
Жалко не работает такая комбинация:
$custom.cat.title = [$template.sidebar.categories.title]$custom.cat = [$template.sidebar.categories.items]
Еслиб такой вариант работал то из движка можно былоб как из конструктора собирать, все что угодно и пихать любые данные куда угодно.
Буду продолжать извращатса чтоб заставить работать табы без УИ...
С комментариями я что то слишком намудрил, можно обычный виджет с контентом сконвертироватьсредствами jquery в требуемое тобой. Да, к сожалению, предложенные тобой конструкциине работают и вряд ли будут реализованы в будущем. Проблема состоит не в специальных тегах, а в генерации движком требуемого контента. Вероятно твою задачу можно решить с помощью плагина, который бы все это делал.
Пока что остается способ сконвертировать обычный виджет в табы
Я сейчас подумал про новые объекты - виджеты, например для рубрик было бы $categories.title, $categories.items. Скорее всего эту фичу следует добавить в ядро. С этими тегами естьь теоритическая проблема: номер сайдбара, который нужен для того, чтобы виджет смог сгенерировать html. Другими словами какв шаблоне (она же тема) указать что это виджет из какого сайдбара. Как вариант можно ввести длинные имена тегов, где много точек, а сейчас теги одного уровня (либо с одной точкой либо без точки).
Добавить новые теги $categories.* не проблема, проблема как разрулить номера сайдбаров, как указать все это в шаблонах.
http://litepublisher.ru/task/tegi-vidzhetov-v-shablonax.htm