Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: разработка для Web > Template Toolkit: вывести дерево


Автор: Logo 15.5.2010, 12:18
Как помощью Template Toolkit выводить древовидные структуры (дерево комментариев)?

Автор: Paul56 16.5.2010, 10:52
Попробую высказать своё мнение а Ваш вопрос.

Мне кажется, что TT это просто удобный шаблонизатор и выводить древовидные структуры наверное им будет не совсем корректно.
Какой уровень вложенности фиксированный или бесконечный...
Все манипуляции по организации структуры данных и как они будут переданы в ТТ вы должны определить сами внутри скрипта.
Разобрать родителей на детей это должен сделать Ваш скрипт и только потом передовать в ТТ.

Это сугубо моё личное мнение.
Учтите, что, если нагрузка на сервер приличная то ТТ относят к тяжеловесам.

Автор: Logo 16.5.2010, 11:40
В TT передается уже готовое дерево. Организовывается в виде дерева, т.к. надо сделать дерево комментариев, вроде youtube, livejournal, habrahabr, где пользователь может ответить на коментарий другого пользователя, и ветку комментариев можно скрыть/раскрыть. Уровень вложенности желательно любой.

Автор: Paul56 17.5.2010, 07:51
Покажите дамп структуры который вы передаёте в ТТ
желательно через           
[% USE Dumper %]
[% Dumper.dump(YouVars) %]

Автор: Logo 17.5.2010, 09:39
Вот:
Код

$VAR1 = [
    {
        'name' => 'name1',
        'content' => '...',
        'children' => [
            {
                name => 'name1.1'
                content => '...',
            },
            {
                name => 'name1.2',
                content => '...',
            },
        ],    
    },
    {
        'name' => 'name2',
        'content' => '...',
    },
];

Автор: Paul56 17.5.2010, 10:18
а где id детей ;)  ?

Код

[% FOREACH item IN node %]
[% Nchildren = sub_children(item.id) %]
[% END %]


скрипт
Код

$vars = {
sub_children => {return функция_с_рекурсией($_[0])}
}





Автор: Logo 17.5.2010, 17:22
Да, у каждого комментария есть id и parent_id.
Можете пояснить код? Что должна возвращать функция с рекурсией, контент элемента? И где $vars используется?

Автор: Paul56 18.5.2010, 09:21
Цитата(Logo @ 17.5.2010,  17:22)
Да, у каждого комментария есть id и parent_id.
Можете пояснить код? Что должна возвращать функция с рекурсией, контент элемента? И где $vars используется?

$vars используется тут:

Код

$tt->process('путь к шаблону', $vars) || die $tt->error;


Функция с рекурсией должна определять есть ли потомок у ответа или темы, если есть уходим ещё глубже и т.д.
Погуглите на тему рекурсия думаю найдёте ответ.

Автор: Logo 18.5.2010, 21:43
По моему тут слишком мало кода. 
Код

[% FOREACH item IN node %]
[% Nchildren = sub_children(item.id) %]
[% END %]


должно как - то вызватся рекурсивно, но как? В этом то и основаная проблемма.

Автор: gcc 19.5.2010, 01:31
я это делал давненько только на HTML::Template

тут вот товарищ http://unixforum.org/index.php?showtopic=85944&hl= 
показал пример на HTML::Template

аналогично точно так же может и везде...

Автор: Paul56 19.5.2010, 09:13
Да согласен с gcc, тогда будет достаточно одного цикла в шаблоне.

Автор: Logo 19.5.2010, 17:49
Всем спасибо, решение нашлось http://www.perlmonks.org/?node_id=570059

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)