Результат, как вы понимаете, есть большушая строка.
Нужно теперь как-то все это отсортировать.
Главная категория имеет определенное значение ID, а вложенная в нее подкатегория имеет значение parentid=ID родительской категории. Так формируется как-бы дерево всех категорий.
Вот я вывел все эти категории на сайт большущим списком, как теперь мне их отсортировать, чтобы оно и на сайте выглядело примерно как дерево. Можно и подругому(например для каждой категории создается блок <div>, в котором списком <ul> идут все ее подкатегории)
Надеюсь, хоть понятно объяснил =)
Жду ваших советов.
Спустя 44 минуты, 4 секунды (24.12.2008 - 17:21) asse написал(а):
посмотрел...там в результате получаем вот такой кусок кода
PHP |
function db_line($data, $parent=0, $level=0) { $arr = $data[$parent];
for($i = 0; $i < count($arr); $i++) { echo '<span style="padding-left:'.($level*30).'px">'.$arr[$i]['name'].'</span><br />'; if(count($data[$arr[$i]['id']])) db_line($data, $arr[$i]['id'], $level + 1); } }
$arr = array( array('id'=>1, 'pid'=>0, 'name'=>'Comment 1'), array('id'=>2, 'pid'=>1, 'name'=>'Comment 1.1'), array('id'=>4, 'pid'=>2, 'name'=>'Comment 1.1.1'), array('id'=>5, 'pid'=>2, 'name'=>'Comment 1.1.2'), array('id'=>7, 'pid'=>2, 'name'=>'Comment 1.1.3'), array('id'=>3, 'pid'=>1, 'name'=>'Comment 1.2'), array('id'=>6, 'pid'=>1, 'name'=>'Comment 1.3'), array('id'=>8, 'pid'=>0, 'name'=>'Comment 2'), );
for($i = 0, $c = count($arr); $i < $c; $i++) { $new_arr[$arr[$i]['pid']][] = $arr[$i]; }
db_line($new_arr); |
я не совсем еще разбираюсь в PHP...кое что понял, кое что нет...
FatCat, можешь помочь мне сделать на основе этого кода сортировку типа:
допустим есть общий <div> для категории. id категории равно 9, все элементы у которых parentid=9(следовательно они являются подпунктами категории с ид 9) выстраиваются в этом же диве, но дам с паддингом или br, не важно.
и так пока цикл не переберет все пункты таблицы. И каждая новая родительская категория шла бы в новый div
буду очень благодарен за помощт ;-)
Спустя 48 минут, 54 секунды (24.12.2008 - 18:10) FatCat написал(а):
Сорри, сейчас другой работы много.
Спустя 4 минуты, 44 секунды (24.12.2008 - 18:14) asse написал(а):
жаль.. а сложно это сделать?
Спустя 2 часа, 15 минут, 24 секунды (24.12.2008 - 20:30) Гость написал(а):
Сделай вывод вот такого массива как в примере
$arr
то есть подставь в него свои значения
а потом немного измени функцию db_line
видишь там padding /// вот и пиши свои дивы , а может тебе и падинг подойдёт
Спустя 38 минут, 45 секунд (24.12.2008 - 21:09) kirik написал(а):
PHP |
function db_line($data, $parent=0, $level=0) { $arr = $data[$parent];
for($i = 0; $i < count($arr); $i++) { echo '<span style="padding-left:'.($level*30).'px">'.$arr[$i]['name'].'</span><br />'; if(count($data[$arr[$i]['id']])) db_line($data, $arr[$i]['id'], $level + 1); } }
$b=$db->query ("SELECT * from `dle_category` ORDER BY `posi`"); while ($row=$db->get_array($b)) { $new_arr[$row['parentid']][] = $row; }
db_line($new_arr); |
Вот так попробуй=)
Спустя 36 минут, 10 секунд (24.12.2008 - 21:45) asse написал(а):
kirik мега респект тебе!!!!! бывай тут иногда, может еще помощь таких профессионалов потребуется!
Спустя 29 минут, 29 секунд (24.12.2008 - 22:14) asse написал(а):
kirik, можешь еще подсказать, как упорядочить вывод...
т.е.:
HTML |
<div> <span>категория</span> <ul> <li>подкатегория 1</li> <li>подкатегория 2</li> <li><div><span>подкатегория3 (у нее еще есть подпункты)</span> <ul> <li>подпункт 3-1</li> <li>подпункт 3-2</li> <li>подпункт 3-3</li> </ul> </div></li> </ul> </div>
|
и так далее
т.е. если есть несколько вложенностей категорий
Спустя 4 часа, 44 минуты, 19 секунд (25.12.2008 - 02:58) kirik написал(а):
asse, а сам подумать? Напиши, как ты видишь реализацию "ступенчатости" категорий, и тебе подскажут где ты не прав (а может и сам разберешься! =)).
Спустя 8 часов, 32 минуты, 16 секунд (25.12.2008 - 11:31) asse написал(а):
просто я полохо очень разбираюсь в PHP :-(
в твой код я добавил формирование правельных ссылок...
PHP |
function db_line($data, $parent=0, $level=0) { $arr = $data[$parent];
for($i = 0; $i < count($arr); $i++) { echo '<div style="border: 2px red solid; padding-left:'.($level*30).'px"><a href="index.php?do=cat&category='.$arr[$i]['alt_name'].'">'.$arr[$i]['name'].'</a></div><br />'; if(count($data[$arr[$i]['id']])) db_line($data, $arr[$i]['id'], $level + 1); } }
$b=$db->query ("SELECT * from `dle_category` ORDER BY `posi`"); while ($row=$db->get_array($b)) { $new_arr[$row['parentid']][] = $row; $new2_arr[$row['alt_name']][] = $row; }
db_line($new_arr);
|
а вот как сделать правильной условие, знаний не хватает...
я дуаю там должно быть что-то типа:
если id=parentid, то ссылки идут в <li>
иначе ссылки идут в div
Спустя 14 минут, 11 секунд (25.12.2008 - 11:45) kirik написал(а):
Цитата (asse @ 25.12.2008 - 03:31) |
если id=parentid |
А в каком случае это получается? Меню, которое и родительское и дочернее?))
Смотри..
PHP |
for($i = 0; $i < count($arr); $i++) { echo '<div style="padding-left:'.($level*30).'px">'.$arr[$i]['name'].'</div><br />'; // Тут выводим родительское меню, так? if(count($data[$arr[$i]['id']])) // Если имеем дочерние меню к этому родительскому - db_line($data, $arr[$i]['id'], $level + 1); // выводим их } |
Правильно?
Тоесть если сделаем так -
PHP |
for($i = 0; $i < count($arr); $i++) { echo '<div id="1"> <div style="padding-left:'.($level*30).'px">'.$arr[$i]['name'].'</div><br />'; if(count($data[$arr[$i]['id']])) echo '<div id="sub">'.db_line($data, $arr[$i]['id'], $level + 1).'</div{id="sub"}>'; echo '</div{id="1"}>'; } |
То у нас получится примерно это -
PHP |
<div id="1"> <div style="padding-left:0px">Меню 1</div><br /> <div id="sub"> <div style="padding-left:30px">Меню 1.1</div><br /> <div style="padding-left:30px">Меню 1.2</div><br /> </div{id="sub"}> </div{id="1"}> |
Прально?
Подумай, как можно в li перевести =)
Спустя 15 минут, 32 секунды (25.12.2008 - 12:00) asse написал(а):
по идее вот так вот
PHP |
for($i = 0; $i < count($arr); $i++) { echo '<div id="1"> <div style="padding-left:'.($level*30).'px">'.$arr[$i]['name'].'</div><br />'; if(count($data[$arr[$i]['id']])) echo '<ul id="sub"><li>'.db_line($data, $arr[$i]['id'], $level + 1).'</li></ul>'; echo '</div>'; } } |
только на выходе мы имеем для одной категории и 2-субкатегорий:
HTML |
<div id="1"> <div style="padding-left:0px">Представление интересов</div><br /><div id="1"> <div style="padding-left:30px">Представлю интересы</div><br /></div><div id="1"> <div style="padding-left:30px">Нужен представитель</div><br /></div><ul id="sub"><li></li></ul></div>
|
_____________
мы делили апельсин. Много наших полегло О_о