Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> HTML и массив хэшей, Шаблон вывода 
:(
    Опции темы
Paul56
Дата 16.2.2009, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 19.9.2008
Где: Екатеринбург

Репутация: нет
Всего: нет



Уважаемые коллеги, прошу у Вас помощи.
Необходимо вывести полученное дерево из БД в следующий HTML код.
Сейчас выводится так:
____
|___|
|___|
|___|
|___|
|___|
|___|

не могу привести к такому виду.
_____________
|___|____|____|
|___|____|____|
|___|____|____|
|___|____|____|

Получается родитель должен быть в начале столбца.

Прилагаю свой код.
Код

use strict;
use warnings;
use DBI;
use CGI qw/:standard/;
use CGI::Carp qw(fatalsToBrowser);
use Data::Dumper;
# Вывод поля заголовка о типе содержимого
my $q = new CGI;
print $q->header;

# Подключаемые модули
my $db_name = '****';        # Имя базы данных
my $db_host = '****';# Имя хоста сервера баз данных
my $db_port = '****';     # Порт
my $db_user = '****';     # Имя пользователя
my $db_passwd = '****';      # Пароль

my $dbh = DBI->connect("DBI:mysql:$db_name:$db_host:$db_port", $db_user, $db_passwd) or die print $!;
my @result = @{ $dbh->selectall_arrayref("SELECT NodeID, ParentID, name, seq FROM test ORDER BY seq", { Slice => {} }) } ;


my $tree = { 0 => { id => 0, name => 'ROOT', children => [] } };
# первый проход
for my $item (@result)
{
    my $node = exists $tree->{ $item->{id} } ? $tree->{ $item->{NodeID} } : { children => [] };
    # добавляемся в детишки к родителю
    # а заодно автоматом создаем ноду родителя $tree->{ $item->{parent} }, если таковой еще нет
    push @{$tree->{ $item->{ParentID} }{children}}, $node;

    # заполняем информацией свою ноду. 
    # при этом помним, что дети добавляются в свойство-массив children этой ноды независимо 
    # либо раньше, либо позже в зависимости от порядка выборки. кодом выше
    $node->{id} = $item->{NodeID};
    $node->{name} = $item->{name};
    $tree->{$item->{NodeID}} = $node;
}

# второй проход - вывод
print '<table width=200 border=1>';
outNode($tree->{0});
print '</table>';
sub outNode
{
   my $node = shift;
   my $level = shift;
   my $indent = ' - ' x $level;
   print '<tr>' ;
   print '<td>';
   print $indent, $node->{name}, "- $level";
   print '</td>';
   print '</tr>',"\n";
   for my $child ( @{ $node->{children} } ) 
   {
      outNode($child, $level + 1);
   }
}

$dbh->disconnect;



PM ICQ   Вверх
NuINu
Дата 16.2.2009, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 131
Регистрация: 19.7.2008

Репутация: 5
Всего: 6



а вы как все дерево разом одним sql запросом выбираете? нуну.

покажите вывод что у вас получается после этого цикла: for my $item (@result)

Dumper($tree);
интересно...а то нифига из программы я не понял.

вот откуда здесь
my $node = exists $tree->{ $item->{id} } ? $tree->{ $item->{NodeID} } : { children => [] };

$item->{id}?


PM MAIL   Вверх
Paul56
Дата 16.2.2009, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 19.9.2008
Где: Екатеринбург

Репутация: нет
Всего: нет



Вообще вот результат работы.
Но это всё один столбец, мне необходимо извернуться и каждую ветку в свой столб поставить.
Я правильно понимаю, видимо необходимо всё перебрать и выделить каждую ветку в свой массив?



ROOT 
- \ 
- - Node1 
- - - Child2OfNode1 
- - Node2 
- - - Child2OfNode2 
- - - Child3OfNode2 
- \ 
- - Node3 

А хочу получить такй код.

<table border=1>
<tr>
   <td>- Node 1</td>
   <td>- Node 2</td>
   <td>- Node 3</td>
</tr>
<tr>
<td>- - - Child1OfNode1</td>
<td>- - - Child1OfNode2</td>
<td>- - - Child1OfNode3</td>
</tr>
<tr>
<td>- - - Child2OfNode1</td>
<td>- - - Child2OfNode2</td>
<td>&nbsp;</td>
</tr>

</table>

Это сообщение отредактировал(а) Paul56 - 16.2.2009, 13:43
PM ICQ   Вверх
NuINu
Дата 16.2.2009, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 131
Регистрация: 19.7.2008

Репутация: 5
Всего: 6



в общето это оношение один ко многим, а не дерево... и я не представляю как в эту структуру воткнуть 3 уровень


Paul56, 
я верю что у вас все красиво печатается, просто я хотел посмотреть другое. но ваше право отвечать или нет.

на вопрос о $item->{id}? вы тоже не ответили... я возомжто тоже что то не заметил, и вы некий элемент с полем id откуда то выдергиваете, но мне оно не понятно.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0468 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.