|
|
|
|
|
для: Trianon
(05.10.2009 в 10:36)
| | Получилось, спасибо.
Теперь пробелы перед опшенами неправильно выставляются, если уровень ненулевой. Не могу сообразить, как на последующих уровнях число пробелов увеличивать.
<?php
function Tree($parent,$level,$nbsp) {
//коннект с базой, список
global $list, $link;
$q = "SELECT * FROM `menu_items` WHERE `menu_items_pid` = " . $parent . " ORDER BY pos,menu_items_id";
$result = mysql_query($q);
if(!$result) exit(mysql_error());
if ($parent > 0 && mysql_num_rows($result) > 0) {
$nbsp = str_repeat(" ",7);
}else $nbsp = '';
while ($row = mysql_fetch_assoc($result)) {
$list .= "<option value = '" . $row['menu_items_id'] . "'>" . $nbsp .
htmlspecialchars($row['menu_items_name']) . "</option>";
$list .= Tree($row['menu_items_id'],$nbsp);
}
}
$list .= "<form action = '' method = 'post' name = 'myform'>";
$list .= "<select>";
Tree(0,0);
$list .= "</select>";
$list .= "<input type = 'submit' value = 'Отправить' name = 'mybutton'>";
$list .= "</form>";
?>
|
| |
|
|
|
|
|
|
|
для: Лена
(05.10.2009 в 10:31)
| | Первичный ключ по определению уникален, а значит любая сортировка после него уже ничего не даст.
Обычно в таких ситуациях pos - более приоритетный критерий, чем первичный ключ.
ORDER BY pos,menu_items_id | |
|
|
|
|
|
|
| Возможно ли при рекурсии отсортировать записи в нужном порядке?
Коротко, код такой(все, что не касается проблемы, выбросила):
<?php
function Tree($parent,$level,$n) {
$q = "SELECT * FROM `menu_items` WHERE `menu_items_pid` = " . $parent . " ORDER BY menu_items_id,pos";
//здесь опущена обработка запроса
while ($row = mysql_fetch_assoc($result)) {
$list .= "<option value = '" . $row['menu_items_id'] . "'>" . $n . htmlspecialchars($row['menu_items_name']) . "</option>";
//рекурсивный вызов
$list .= Tree($row['menu_items_id'],$level+1,$n . $nbsp);
}
}
//вызов
Tree(0,0,' ');
?>
|
ORDER BY menu_items_id,pos - ни по id`ам, ни по позиции сортировка не происходит | |
|
|
|
|