Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Динамичное меню из БД, Динамичное меню из БД 
V
    Опции темы
nightvi
Дата 3.10.2010, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 78
Регистрация: 20.7.2007

Репутация: нет
Всего: нет



Народ помогите решить проблему мне надо реализовать появление подменю при нажатии на пункте меню 
есть 2 таблицы одна с пунктами меню а вторая с подпунтками в которой просто проставляется id соответсвующего пункта таблицы меню:
вот что у меня пока получилось 


Код

<?


$result2 = mysql_query ("SELECT * FROM gl", $db);
if (!$result2)
{
echo "<p>Запрос на выборку данных из базы не выполнен<br>
<b>Код ошибки:</b>
</p>";
exit(mysql_error());
}
if (mysql_num_rows($result2)>0)
{
$myrow2 = mysql_fetch_array($result2);
$result4 = mysql_query ("SELECT * FROM podgl WHERE gl='$id'", $db);
$myrow4 = mysql_fetch_array($result4);
if (isset ($myrow4["gl"])){
do
{
if ($myrow4["gl"] = $myrow2["id"]){
printf ("<p><a href='index.php?id=%s'>%s</a></p>", $myrow2["id"], $myrow2["title"]);
do
{
printf ("<p><a href='izd.php?id=%s'>>%s</a></p>", $myrow4["id"], $myrow4["title"]);
}
while ($myrow4 = mysql_fetch_array($result4));
}
else{
printf ("<p><a href='index.php?id=%s'>%s</a></p>", $myrow2["id"], $myrow2["title"]);
}

}
while ($myrow2 = mysql_fetch_array($result2));
}


else {
do
{
printf ("<p><a href='index.php?id=%s'>%s</a></p>", $myrow2["id"], $myrow2["title"]);


}
while ($myrow2 = mysql_fetch_array($result2));

}

}
else
{
echo "<p>Информация по запросу не может быть извлечена<br>
<b>Код ошибки:</b>
</p>";
exit(mysql_error());
}

Помогите найти решение

?>


Добавлено через 8 минут и 58 секунд
Или вот такой вариант но под меню всегда появляется под последним пунктом а не под нужным

Код

<?
$result2 = mysql_query ("SELECT * FROM gl", $db);
if (!$result2)
{
echo "<p>Запрос на выборку данных из базы не выполнен<br>
<b>Код ошибки:</b>
</p>";
exit(mysql_error());
}
if (mysql_num_rows($result2)>0)
{
$myrow2 = mysql_fetch_array($result2);
$result4 = mysql_query ("SELECT * FROM podgl WHERE gl='$id'", $db);
$myrow4 = mysql_fetch_array($result4);
if (isset ($myrow4["gl"])){
do
{
printf ("<p><a href='index.php?id=%s'>%s</a></p>", $myrow2["id"], $myrow2["title"]);
}
while ($myrow2 = mysql_fetch_array($result2));
do
{
printf ("<p><a href='izd.php?id=%s'>>%s</a></p>", $myrow4["id"], $myrow4["title"]);
}
while ($myrow4 = mysql_fetch_array($result4));
}
else
{
do
{
printf ("<p><a href='index.php?id=%s'>%s</a></p>", $myrow2["id"], $myrow2["title"]);
}
while ($myrow2 = mysql_fetch_array($result2));
}
}
else
{
echo "<p>Информация по запросу не может быть извлечена<br>
<b>Код ошибки:</b>
</p>";
exit(mysql_error());
}
?>


Добавлено через 13 минут и 5 секунд
Пример реализации меню

Когда открыта главная станица меню выглядит так

>Главная
>Вторая
>Третья
>Четвертая

А когда нажимаем на любую другую должно выглядеть так к примеру

>Главная
>Вторая
>Третья
>> Третья один
>>Третья два
>>Третья три
>Четвертая
PM MAIL   Вверх
ayax2005
Дата 3.10.2010, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


echo $smile
**


Профиль
Группа: Участник
Сообщений: 516
Регистрация: 17.4.2008
Где: Питер

Репутация: 2
Всего: 11



Лучше вот так:

Код

$result2a = mysql_query ("SELECT * FROM gl", $db);
while($result2 = mysql_fetch_array($result2a))
{
echo "<a>меню</a>";
$result4a = mysql_query ("SELECT * FROM podgl WHERE gl='{$result2['id']}', $db);
while(while($result4 = mysql_fetch_array($result4a)))
{
echo "<a>подменю</a>";
}
}


Играйтесь с видимостью блоков, содержащих подменю для того, что бы это дело скрывалось-раскрывалось по мышке, проверяйте id страницы на наличие в $result4 для отображения блоков по умолчанию.

Это сообщение отредактировал(а) ayax2005 - 3.10.2010, 11:56


--------------------
все вопросы - из-за неверной формулировки задачи
PM MAIL ICQ   Вверх
Muerto
Дата 3.10.2010, 11:58 (ссылка)   | (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1207
Регистрация: 23.9.2006

Репутация: 3
Всего: 4



Нафиг тебе меню с бд делать  smile 
xml файл используй или вообще какой нить php файл


--------------------
user posted image
PM MAIL   Вверх
gta4kv
Дата 3.10.2010, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

Репутация: 21
Всего: 91



Цитата(Muerto @ 3.10.2010,  11:58)
Нафиг тебе меню с бд делать  smile 
xml файл используй или вообще какой нить php файл

Просто потрясающий совет!
PM MAIL   Вверх
nightvi
Дата 3.10.2010, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 78
Регистрация: 20.7.2007

Репутация: нет
Всего: нет



ayax2005
 Спасибо

Muerto мне жуно вывод из бд чтобы корректно сделать систему управления и возможности добавления или удалению пунктов меню


вот что сделал
но появляются все подменю и сразу 
Код

<?

$result2a = mysql_query ("SELECT * FROM gl", $db);
while($result2 = mysql_fetch_array($result2a))
{
printf ("<p><a href='index.php?id=%s'>%s</a></p>", $result2["id"], $result2["title"]);
$result4a = mysql_query ("SELECT * FROM podgl WHERE gl='{$result2['id']}'", $db);
while($result4 = mysql_fetch_array($result4a))
{
printf ("<p><a href='izd.php?id=%s'>>>>%s</a></p>", $result4 ["id"], $result4 ["title"]);
}
}

?>


Не могу понять как сделать проверку для скрытия ненужного

Добавлено через 8 минут и 14 секунд
попробовал изменить концовку на 

Код

if (isset ($result4a)) {
while($result4 = mysql_fetch_array($result4a))
{
printf ("<p><a href='izd.php?id=%s'>>>>%s</a></p>", $result4 ["id"], $result4 ["title"]);
}
}
}


но безрезультатно
PM MAIL   Вверх
bars80080
Дата 3.10.2010, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



вот у вас есть переход по ссылке index.php?id=4

на странице соответственно виден входящий параметр:
$id = (empty($_GET['id'])) ? 0 : intval($_GET['id']);

остаётся этот id сравнить:

Код

<?php

$id = (empty($_GET['id'])) ? 0 : intval($_GET['id']);

$result2a = mysql_query ("SELECT * FROM gl", $db);
while($result2 = mysql_fetch_array($result2a)) {
    $cls = 'hide';
    if($id == $result2['id']) { $cls = 'show'; }
    printf ("<p><a href='index.php?id=%s'>%s</a></p>", $result2["id"], $result2["title"]);
    $result4a = mysql_query ("SELECT * FROM podgl WHERE gl='{$result2['id']}'", $db);
    while($result4 = mysql_fetch_array($result4a)) {
        printf ("<p class="%s"><a href='izd.php?id=%s'>>>>%s</a></p>", $cls, $result4 ["id"], $result4 ["title"]);
    }
}
?>


где 

Код

.show { display: block; }
.hide { display: none; }



хотя, если страница каждый раз перезагружается, то непонятно зачем вообще выводить скрытые элементы. тогда надо было бы вообще указать:
Код


<?php

$id = (empty($_GET['id'])) ? 0 : intval($_GET['id']);

$result2a = mysql_query ("SELECT * FROM gl", $db);
while($result2 = mysql_fetch_array($result2a)) {
    printf ("<p><a href='index.php?id=%s'>%s</a></p>", $result2["id"], $result2["title"]);
    $result4a = mysql_query ("SELECT * FROM podgl WHERE gl='{$result2['id']}'", $db);
    while($result4 = mysql_fetch_array($result4a)) {
        if($id != $result4['gl']) { continue; }
        printf ("<p><a href='izd.php?id=%s'>>>>%s</a></p>", $result4 ["id"], $result4 ["title"]);
    }
}
?>

PM MAIL WWW   Вверх
nightvi
Дата 3.10.2010, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 78
Регистрация: 20.7.2007

Репутация: нет
Всего: нет



Спасибо все заработало!
Можете объяснить суть строки, я ее что то не понимаю

$id = (empty($_GET['id'])) ? 0 : intval($_GET['id']);

Еще раз всем огромное спасибо за помощь

и это строка означает 
 if($id != $result4['gl']) { continue; }

если переменная  $id не равна результату то мы переходим к следующему пункту меню. Так?
PM MAIL   Вверх
Muerto
Дата 3.10.2010, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1207
Регистрация: 23.9.2006

Репутация: 3
Всего: 4



nightvi, В таком случае, при добавлении меню через админ панель, нужно изменить xml файл... или же отредактировать php

Все это не делается в ручную, а делается скриптом...  и с моей точки зрения правильней чем на прямую через БД


Это сообщение отредактировал(а) Muerto - 3.10.2010, 19:28


--------------------
user posted image
PM MAIL   Вверх
bars80080
Дата 3.10.2010, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



Цитата(Muerto @  3.10.2010,  19:27 Найти цитируемый пост)
и с моей точки зрения правильней чем на прямую через БД

интересно, с чего вы взяли, что он будет в случае построения меню на БД корректировать меню прямыми запросами, а xml будет формировать через админ панель. может наоборот, у него уже есть панелька для работы с БД, а для xml ему ещё придётся писать админку?
PM MAIL WWW   Вверх
ayax2005
Дата 3.10.2010, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


echo $smile
**


Профиль
Группа: Участник
Сообщений: 516
Регистрация: 17.4.2008
Где: Питер

Репутация: 2
Всего: 11



А я не могу не согласится с Muerto. Меню не такая динамическая структура, что бы меняться каждый день - логично подгружать её из xml или другого сгенерированного скрипта.


--------------------
все вопросы - из-за неверной формулировки задачи
PM MAIL ICQ   Вверх
enoff
Дата 3.10.2010, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 30.6.2010
Где: Санкт-Петербург

Репутация: 11
Всего: 13



ayax2005, почему логичнее?
PM MAIL ICQ Skype GTalk   Вверх
Muerto
Дата 3.10.2010, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1207
Регистрация: 23.9.2006

Репутация: 3
Всего: 4



В общем главное что проблема решена  smile 


--------------------
user posted image
PM MAIL   Вверх
bars80080
Дата 3.10.2010, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



Цитата(enoff @  3.10.2010,  22:00 Найти цитируемый пост)
почему логичнее? 

потому что использовать постоянную динамику с кучей запросов не имеет смысла, если обновление происходит редко. тогда лучше один раз записать файл, а затем подгружать его каждый раз. меньше расход ресурсов


но я не про то возражал, а про неожиданный вывод, что у автора есть админка для правки меню с xml, но нет админки для правки меню с БД.
по-моему, обычно ситуация как раз обратная

Это сообщение отредактировал(а) bars80080 - 3.10.2010, 22:16
PM MAIL WWW   Вверх
Muerto
Дата 3.10.2010, 23:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1207
Регистрация: 23.9.2006

Репутация: 3
Всего: 4



bars80080, Я как раз посчитал что судя по вопросу у него и ни того и ни этого... так уж лучше по правильному сразу сделать  smile 


--------------------
user posted image
PM MAIL   Вверх
nightvi
Дата 4.10.2010, 06:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 78
Регистрация: 20.7.2007

Репутация: нет
Всего: нет



я XML вообще не знаю а пхп чуть чуть вот и работаю с тем что знаю
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0655 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.