Форум: "Потрепаться";
Текущий архив: 2002.09.19;
Скачать: [xml.tar.bz2];
ВнизГоспода, помогите с алгоритмом. Найти похожие ветки
← →
ded_di (2002-08-22 17:50) [0]Нужен алгоритм вывода меню.
Подробне...
Имеется таблица
menu
__________
id – натуральные, уникальные.
parent_id
caption
reference
order_no
Нужна функция выводящая меню из данной таблицы (собственно вывод, как вы понимаете, не важен)
Например имеется меню
a
aa
ab
aba
abb
abc
ac
aca
acb
b
ba
bb
bba
bbb
bc
bca
В случае активного пункта, например abc меню должно выглядеть, как вы понимаете, так
a
aa
ab
aba
abb
abc
ac
b
Собственно вопрос в том, как определить какие пункты выводить, а какие нет.
ЗЫ: Могу пояснить, если что не ясно.
Заранее спасибо.
← →
Keyboard Shooter (2002-08-22 17:59) [1]Distinct ParentId по каждому Id.
← →
ded_di (2002-08-22 18:10) [2]Указанное выше меню в базе представляется следующим образом
id | parent_id | caption | остальное не имеет значения
1 | 0 | a |
2 | 0 | b |
3 | 1 | aa |
4 | 1 | ab |
5 | 1 | ac |
6 | 2 | ba |
7 | 2 | bb |
8 | 2 | bc |
9 | 4 | aba |
10 | 4 | abb |
11 | 4 | abc |
12 | 5 | aca |
13 | 5 | acb |
14 | 7 | bba |
15 | 7 | bbb |
16 | 8 | bca |
активный пункт задается переменной position равной id активного пункта
2 Keyboard Shooter:
Сам попробуй, то что ты написал. Это не решение.
← →
ded_di (2002-08-23 16:09) [3]Всем спасибо за помощь :(
Решение на ПХП выглядит так:
function menu_by_path ($path, $pos) {
global $db, $position;
$result = mysql_query("select * from menu where parent_id=" . $path[$pos] . " order by order_no", $db);
if (mysql_num_rows($result) != 0) {
while ($row = mysql_fetch_array($result)) {
if ($position == $row["id"]) {
show_item($row, true); \\ не имеет значения true - активный пункт меню
$result_ch = mysql_query("select * from menu where parent_id=" . $row["id"] . " order by order_no", $db);
if (mysql_num_rows($result_ch) != 0) {
while ($row_ch = mysql_fetch_array($result_ch)) {
show_item($row_ch, false);
}
}
} else {
if ($path[$pos-1] == $row["id"]) {
show_item($row, false);
menu_by_path($path, $pos-1);
} else {
show_item($row, false);
}
}
}
}
}
function show_menu() {
global $db, $position;
$res = $position;
$path[] = $res;
while ($res != 0) {
$result = mysql_query("select parent_id from menu where id=" . $res, $db);
$res = mysql_result($result, 0, "parent_id");
$path[] = $res;
}
menu_by_path($path, count($path)-1);
}
критикуйте если что.
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2002.09.19;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.006 c