X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

Открыть тему
Тема закрыта
> построение иерархического меню на рекурсии
hardlviv
hardlviv
Topic Starter сообщение 19.11.2010, 13:44; Ответить: hardlviv
Сообщение #1


Добрый день уважаемые!
Направьте на путь истинный нуба.

Дано:
есть код рекурсии, что создает иерархическое меню
Вот
[I][I]function ShowTree ($parent_id) {    
    $sql = "SELECT `id`, `parent`, `name` FROM `tree` WHERE `parent` = $parent_id ";
    $result = mysql_query($sql);    
    if (mysql_num_rows($result) > 0) {
        echo '<ul>';        
        while ($row = mysql_fetch_array($result)) {
            echo '<li><a href="/?id='.$row['id'].'">'.$row['name'].'</a></li>';
            ShowTree ($row['id']);                
        }        
        echo '</ul>';
    }    
}

ShowTree (0);
[/I][/I]
[I]

оно создает меню вида
Раздел1
--Раздел1.1
--Раздел1.2
--Раздел1.3
Раздел2
--Раздел2.1
.....
.....
РазделN
--РазделN.1
--РазделN.2


Вобщем вытаскивает всё из базы! Подскажите пожалуйста как мне сделать чтоб на отдельных страницах оно вытаскивало только скажем всё что связано с Разделом4 + Разделом5 + Разделом6 и всё. остальное чтоб не выводило..

Спасибо!
[/I]
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
unnormal
unnormal
сообщение 19.11.2010, 13:52; Ответить: unnormal
Сообщение #2


WHERE `parent` = $parent_id AND `id` IN ('1', '2', '3')
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
evgenijj
evgenijj
сообщение 19.11.2010, 15:56; Ответить: evgenijj
Сообщение #3


А зачем у функции параметр $parent_id? Надо при вызове передать ID нужного раздела. Т.е. чтобы вывести все дерево, передаем 0, чтобы вывести всех потомков какого-то раздела, передаем ID этого раздела.

P.S.
[php]<?php
function ShowTree ( $parents ) {
if ( is_array( $parents ) ) {
foreach ( $parents as $id ) ShowTree ( $id );
return;
}
$query = "SELECT `id`, `parent`, `title` FROM `categories` WHERE `parent` = ".$parents;
$res = mysql_query($query);
if (mysql_num_rows($res) > 0) {
echo '<ul>';
while ($row = mysql_fetch_array($res)) {
echo '<li><a href="/?id='.$row['id'].'">'.$row['title'].'</a></li>';
ShowTree ($row['id']);
}
echo '</ul>';
}
}

$category = 0;
ShowTree ($category);
echo '<hr>';
$categories = array( 2, 19 );
ShowTree ($categories);
?>[/php]P.P.S. Отлажено :)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
unnormal
unnormal
сообщение 19.11.2010, 16:08; Ответить: unnormal
Сообщение #4


[php]function ShowTree ($parent_id, $sections = array()) {
if (!empty($sections))
$and = "AND `id` IN ('".implode("','", $sections)."')";
$sql = "SELECT `id`, `parent`, `name` FROM `tree` WHERE `parent` = $parent_id ".$and;
$result = mysql_query($sql);
if (mysql_num_rows($result) > 0) {
echo '<ul>';
while ($row = mysql_fetch_array($result)) {
echo '<li><a href="/?id='.$row['id'].'">'.$row['name'].'</a></li>';
ShowTree ($row['id'], false);
}
echo '</ul>';
}
}[/php]ShowTree(0, array(1,3,5));

Должен вывести в дереве только разделы 1,3,5 (не занимался отладкой :) )
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
hardlviv
hardlviv
Topic Starter сообщение 19.11.2010, 16:53; Ответить: hardlviv
Сообщение #5


Спасибо! Догнал теперь.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
varvashenia
varvashenia
сообщение 24.11.2010, 15:04; Ответить: varvashenia
Сообщение #6


Для работы с деревьями давно использую данные в виде Nested Sets - при этом прилично усложняются телодвижения с узлами, зато делать выборки - просто прелесть. Данные в любую строну выбираются одним sql-запросом и без рекурсий.
PS: Вдруг пригодится кому.

Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Тема имеет прикрепленные файлыПеренести меню
1 Викторио_mw 1452 28.8.2018, 0:10
автор: TimurR
Открытая тема (нет новых ответов) Необходимо разрезать и установить Меню для группы ВКонтакте
2 boltuk 3398 4.12.2017, 14:44
автор: tezoro
Открытая тема (нет новых ответов) Помогите с меню - переделать в выпадающее
1 lepota 1128 4.12.2017, 13:29
автор: yury_mw
Открытая тема (нет новых ответов) Слайдер под меню
0 Olya_Poy 4633 29.11.2017, 11:09
автор: -garmoni-
Открытая тема (нет новых ответов) На разных разрешениях меню выглядит по разному
0 SPiar 4812 28.9.2017, 17:45
автор: -korotkov-


 



RSS Текстовая версия Сейчас: 28.3.2024, 14:05
Дизайн