|
|
|
| Объясню проше.
Есть таблица catalog с полями id, name (название раздела/подраздела), id_parent.
Выводится таблица с помощью нижеприведенного кода:
<A href=index.php?section=1>Недвижимость</A>
Далее, если кликаем по ссылке, "движок" выводит подразделы "Недвижимости" (в соответствии с id_parent). Например,
<A href=index.php?section=2>Сдача/Наём</A>
<A href=index.php?section=3>Продажа</A> и т.д.
Вывести "адресную навигацию" в следующем виде: Главная > Недвижимость; Главная > <Сдача/Наём; Главная > Продажа - просто. Так как выводится всё из одной таблицы.
А вот как сделать чтобы при переходе в подраздел (например, Сдача/Наём. Кликаем Сдача/Наём) сохранялась ссылка на "родительский" раздел: Главная > Недвижимость > Сдача/Наём
<?php
// Устанавлинваем соединение с базой данных
require_once("config.php");
// Если значение параметра secid не установлено, следовательно, выбран самый верхний уровень меню
if(!isset($_GET['secid'])) $_GET['secid'] = 0;
// Если имеет дело не с корневым каталогом, то выводим ссылку на уровень выше и
// воспроизводим вышележащее меню
if($_GET['secid'] != 0)
{
// Воспроизводим меню древовидного меню
$query = "SELECT * FROM catalog
WHERE hide='show' AND id_catalog=".$_GET['section']."";
$ctgc = mysql_query($query);
if(!$ctgc) puterror("Ошибка при обращении к древовидному меню");
// Выводим список каталогов
while($catc = mysql_fetch_array($ctgc))
{
// Выводим ссылку для возврата в предыдущее меню
echo "<A href=$_SERVER[PHP_SELF]?section=".$_GET['id_catalog'].">Главная</A> > ".$catc['name']."<BR><BR>";
}
// Воспроизводим меню верхнего уровня
$query = "SELECT * FROM catalog
WHERE hide='show' AND id_parent=".$_GET['section']."";
$prev = mysql_query($query);
if(!$prev) puterror("Ошибка при обращении к каталогу");
// Выводим список каталогов
while($pmenu = mysql_fetch_array($prev))
{
echo "<A href=$_SERVER[PHP_SELF]?section=".$pmenu['id_catalog'].">".$pmenu['name']."</A><BR>";
}
}
// Если вышележащий каталог совпадает с текущим, и у него имеются подкаталоги, то выводим их:
elseif($_GET['section'] == $pmenu['id_parent'])
{
// Формируем и осуществляем SQL-запрос, извлекающий подкаталоги текущего кателога
$query = "SELECT * FROM catalog
WHERE hide='show' AND id_parent=".$_GET['section']."
ORDER BY pos";
$ctg = mysql_query($query);
if (!$ctg) puterror("Ошибка при обращении к каталогу");
// Если SQL-запрос вернул хотя бы одну запись, выводим подкаталоги.
if(mysql_num_rows($ctg)>0)
{
while($cat = mysql_fetch_array($ctg))
{
// Выводим список каталогов
echo "<A href=$_SERVER[PHP_SELF]?section=".$_GET['id_catalog'].">".$cat['name']."</A><BR>";
}
}
}
// Если это корневой каталог, просто выводим его подкаталоги
else
{
// Выводим список подкаталогов
$query = "SELECT * FROM catalog
WHERE hide='show' AND id_parent = 0
ORDER BY pos";
$ctg = mysql_query($query);
if (!$ctg) puterror("Ошибка при обращении к каталогу");
while($cat = mysql_fetch_array($ctg))
{
// Выводим список подкаталогов корневого каталога
echo "<A href=$_SERVER[PHP_SELF]?section=".$cat['id_catalog'].">".$cat['name']."</A><BR>";
}
}
?>
|
Заранее спасибо. | |
|
|
|
|
|
|
|
для: Shadow69
(14.08.2007 в 11:07)
| | Trianon, помоги. Ты же знаешь. | |
|
|
|
|
|
|
|
для: Shadow69
(15.08.2007 в 10:11)
| | По-моему, надо просто вывести обратный (ну или прямой путь) к корню.
Уж коль скоро Вы знаете, что я знаю, могли бы и поискать соответствующий ответ в форуме. :) | |
|
|
|
|
|
|
|
для: Trianon
(15.08.2007 в 20:08)
| | Trianon, извини, не сообразил. :-)
Из этого топика узнал в кратце, суть "рекурсии". Не более.
"По-моему, надо просто вывести обратный (ну или прямой путь) к корню".
Вопрос как? Если не трудно, на каком-нибудь стандартном примере. | |
|
|
|
|
|
|
|
для: Shadow69
(16.08.2007 в 13:54)
| | >Из этого топика узнал в кратце, суть "рекурсии". Не более.
Интересно, как Вам это удалось?
В этом топике не было никакой рекурсии.
>"По-моему, надо просто вывести обратный (ну или прямой путь) к корню".
>Вопрос как? Если не трудно, на каком-нибудь стандартном примере.
Зато в нем был вывод пути. На самом что ни на есть стандартном примере.
PS. Как обычно, если Вам нужно решение "под ключ", я готов рассмотреть Ваше предложение. приватом. | |
|
|
|
|
|
|
|
для: Trianon
(16.08.2007 в 14:32)
| | Который раз уже добиваюсь! Продемонстрируете вывод сбалансированного дерева кто-нибудь! Мне самому интересно что MySQL предлагает на этот счет. | |
|
|
|
|
|
|
|
для: oradev
(16.08.2007 в 14:36)
| | Я готов подискутировть на этот предмет, но не в ближайшие дни.
Сейчас я готовлюсь к командировке, и нормально смогу появиться на форуме не раньше среды. | |
|
|
|
|
|
|
|
для: Trianon
(16.08.2007 в 17:36)
| |
Ок, приятной командировки ( много не пить) :)
|
| |
|
|
|
|
|
|
|
для: Trianon
(16.08.2007 в 14:32)
| | >>Из этого топика узнал в кратце, суть "рекурсии". Не более.
>
>Интересно, как Вам это удалось?
>В этом топике не было никакой рекурсии.
Не так выразился. Из вышеуказанного топика, я узнал о существовании "рекурсии". :-) | |
|
|
|