|
|
|
| Мне нужно вывести потомков и родителей в два столбца таблицы. Все это - с рекурсией. Сейчас я не могу закрыть строку, не получается.
Код такой:
<?php
include("../configs/dbopen.php");
$list = "";
function showTree($parent_id,$level) {
global $link, $list;
$sql = "SELECT * FROM admin WHERE pid = ". $parent_id ." ORDER BY id";
$result = mysql_query($sql);
if(!$result) exit(mysql_error());
if($level == 0){
$i = 0;
if(!($i%2)) $list .= "<tr>";
$list .= "<td>";
}
$list .= "<ul>";
while ($row = mysql_fetch_row($result)) {
$list.= "<li><a href=''>" . htmlspecialchars($row[2]). "</a></li>";
showTree($row[1],$level+1);
}
$list .= "</ul>";
if($level == 0){
$list .= "</td>";
if(!($i+1%2)) $list .= "</tr>";
$i++;
}
}
$list .= "<table>";
showTree(0,0);
$list .= "</table>";
print $list;
?>
|
| |
|
|
|
|
|
|
|
для: Лена
(13.09.2009 в 12:23)
| | Задачу лучше разделить на две: (1) создание массива с отступами и иерархией и (2) вывод такого массива в два столбца. | |
|
|
|
|
|
|
|
для: Лена
(13.09.2009 в 12:23)
| | попытался представить себе вывод дерева в две колонки... и не смог. | |
|
|
|
|
|
|
|
для: Trianon
(13.09.2009 в 13:12)
| | Если у дерева несколько вершин (корневых каталогов), то в принципе это реально. Только ориентироваться нужно имено на корневые каталоги, выделив построение иерархии в отдельную функцию. | |
|
|
|
|
|
|
|
для: cheops
(13.09.2009 в 13:35)
| | >Если у дерева несколько вершин (корневых каталогов),
то оно называется лесом, и первый уровень из рекурсии уносят, как Вы правильно заметили , в отдельную функцию.
Остается задача без рекурсии. | |
|
|
|
|
|
|
|
для: Trianon
(13.09.2009 в 17:15)
| | Поломав голову, сделала без рекурсии.
Если будет время, еще подумаю, пока сделала вывод категорий и во вложенном цикле - вывод подкатегорий. Осталось убрать html в шаблон, и будет готово. | |
|
|
|
|
|
|
|
для: Лена
(13.09.2009 в 17:53)
| | Сделала. Может, кому-то нужно будет. Да и мне ,если понадобится, по поиску найду :)
Вывод, сама логика:
<?php
include("configs/dbopen.php");
require_once ("smarty/Smarty.class.php");
$smarty = new Smarty;
$sql = "SELECT * FROM admin WHERE pid=0 ORDER BY id";
$result = mysql_query($sql);
if(!$result) exit(mysql_error());
for($i = 0;$main = mysql_fetch_assoc($result);) {
$m[] = htmlspecialchars($main['admin_title']);
//вкладываем подкатегории
$sql1 = "SELECT * FROM admin WHERE pid =" . $main['id'] . " ORDER BY id";
$result1 = mysql_query($sql1);
if(!$result1) exit(mysql_error());
if(mysql_num_rows($result1)>0){
while($sub = mysql_fetch_assoc($result1)){
$key = $main['id']-1;
$s[$key][] = htmlspecialchars($sub['admin_title']);
}
}else print "</td>";
}
//print_r($m);
//print_r($s);
//направляем полученные массивы в шаблон
$smarty->assign("main", $m);
$smarty->assign("sub", $s);
$smarty->display("theme/default/adm.tpl");
?>
|
И шаблон adm.tpl, где уже раскладывается в таблицу. Смарти.
<table border = '1px'>
{foreach from=$main item=one key=keys}
{if !($keys%2)}<tr>{/if}
<td>
<a href=''>{$one}</a><br />
<ul>
{foreach from=$sub item=sub_one key=ks}
{if $ks==$keys}
{foreach from=$sub_one item=s key=k}
<li><a href=''>{$s}</a></li>
{/foreach}
{/if}
{/foreach}
</ul>
</td>
{if !($keys+1%2)}</tr>{/if}
{/foreach}
</table>
|
| |
|
|
|