К примеру есть база с таблицей
category
в таблице вот такие ичейки
id(auto_includ),name(text),category(Тут ид категории которой эта категория принадлежит)
Ограничений в уровнях нет тобиш может быть хоть по 100 пот категорий в пот категориях поткатегорий итд
Вопрос как вывести древо категорий ? ))
Бо не знаю как по хитрому сделать цикл чтобы выполнялся до последней категории и собирал как надо _)
Спустя 2 минуты, 51 секунда (14.12.2011 - 18:48) Игорь_Vasinsky написал(а):
а где наработка???
с помощью рекурсивной функции.
с помощью рекурсивной функции.
Спустя 4 минуты, 51 секунда (14.12.2011 - 18:53) lans8097 написал(а):
Цитата (Игорь_Vasinsky @ 14.12.2011 - 15:48) |
а где наработка??? с помощью рекурсивной функции. |
так то даж нароботкой незя назвать
Написал пару уровней но понял что так оно будит работать толклько прописаное количество раз
Что здесь не подходит так как в одной категории может быть 20 категорий а в другой 1
Уже читаю про то что ты мне дал
Спустя 30 минут, 31 секунда (14.12.2011 - 19:23) Invis1ble написал(а):
Спустя 48 минут, 37 секунд (14.12.2011 - 20:12) Эдик написал(а):
// Выбор из таблицы всего дерева
$sql="SELECT * FROM category;";
$result=mysql_query($sql,$connect);
// формируем массив результатов
$res=array();
while($row=mysql_fetch_assoc($result)){
$res[]=$row;
}
// собственно сама функция
function get_tree($res,$root,$connect){
$out="";
foreach($res as $row){
if($res['category']==$root && isset_child($res['id'],$connect)==TRUE){
$out.="<li>".$row['name']."<ul>";
$out.=get_tree($res['id']);
}
else
$out="<li>".$row['name']."</li>";
}
$out.="</ul></li>";
return $out;
}
// функция проверки есть ли у данного id потомки
function isset_child($id,$connect){
$out=FALSE;
$isset='no';
$sql="SELECT id from category WHERE id=".$id.";";
$result=mysql_query($sql,$connect);
while($row=mysql_fetch_assoc($result)){
$isset=$row['id'];
}
if($isset!='no')
$out=TRUE;
return $out;
}
// Вызов функции
echo "<ul>";
echo get_tree($res,"",$connect);
echo "</ul>";
Вроде так
Спустя 9 минут, 14 секунд (14.12.2011 - 20:21) Эдик написал(а):
Я так понимаю, если у id нету родителя, то после с category пустое?
Спустя 1 час, 42 минуты, 27 секунд (14.12.2011 - 22:03) lans8097 написал(а):
Цитата (Эдик @ 14.12.2011 - 17:21) |
Я так понимаю, если у id нету родителя, то после с category пустое? |
Спс за вариант но я уже разобрался ))
Нет. Если пот категории нет то просто 0 тобиш самая главная родительская категория
function ShowTree($ParentID, $lvl) {
global $lvl;
static $menu;
$myrow = mysql_query("SELECT id,name,pot_category FROM category WHERE pot_category='".$ParentID."'");
if(mysql_num_rows($myrow)){
while($result = mysql_fetch_assoc($myrow)){
for($i=1;$i<=$lvl;$i++){$strelka .='--';}
$lvl++;
$menu .=('<option value="'.$result['id'].'">'.$strelka.'> '.$result['name'].'</option>');
ShowTree($result['id'], $lvl);
$lvl--;
}
}
Спустя 1 день, 11 часов, 26 минут, 6 секунд (16.12.2011 - 09:30) lans8097 написал(а):
Немного подправил код
<?php
class menuInc{
private $root;//Дериктория каторую нужно выбрать автоматом
function __construct($root=NULL){
$this->root=$root;
}
function Menu($id,$lvl) {
static $lvl;
static $menu;
$myrow = mysql_query("SELECT id,name FROM category WHERE pot_category='".$id."'");
if(mysql_num_rows($myrow)){
while($result = mysql_fetch_assoc($myrow)){
if($this->root){if($result['id']==$this->root){$checked='selected="selected"';}}
for($i=1;$i<=$lvl;$i++){$strelka .=' ';}
if(!empty($strelka)){$strelka .='-';}
$lvl++;
$menu .=('<option value="'.$result['id'].'" '.$checked.'>'.$strelka.' '.$result['name'].'</option>');
if(!empty($strelka)){unset($strelka);}
if(!empty($checked)){unset($checked);}
$this->Menu($result['id'], $lvl);
$lvl--;
}
}
return $menu;
}
}
?>