Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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
1-61155
micolka
2002-09-07 08:26
2002.09.19
прошу помощи...


1-61071
Демонов Е.В.
2002-09-09 16:37
2002.09.19
нетипизированный параметр-переменная функции


1-61053
Mazenrat
2002-09-08 20:13
2002.09.19
Нужен АЙПишный аналог.


4-61348
adept_
2002-07-27 09:36
2002.09.19
WM_ERASEBKGND


1-61206
Anar
2002-09-08 23:28
2002.09.19
Кнопки как в





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский