[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: структура меню
prst
Пока мистически на мои предыдущие темы (1, 2) попытаюсь спросить на другую тему - меню.
Меню должно быть примерно таким:
<ul>
<li>Об этом (со ссылкой)
<li>Раздел тригидрон: (без ссылки)
<li>литол (со сылкой)
<li>гавнол (со сылкой)
<li>Раздел мегатрон: (без ссылки)
<li>оптимус (без ссылки)
<li>примус (без ссылки)
<li>Новости (со ссылкой)
<li>Гостевая (со ссылкой)
</ul>
Как все это в базе разместить (по какому принципу) и выдергивать из базы чтобы на страничке меню строилась так как я написал. Ну и наверное было бы неплохо предусмотреть вариант если у разделов которые без ссылки вдруг ссылки появились бы...



Спустя 1 час, 6 минут, 7 секунд (17.03.2011 - 16:10) Лена написал(а):
Что значит раздел со ссылкой и раздел без ссылки? Объясните.
Само понятие меню - это и есть ссылки на внутренние страницы сайта, зачем ставить пункт меню без ссылки? Зачем он тогда вообще нужен?

Спустя 5 часов, 37 минут, 48 секунд (17.03.2011 - 21:47) sebastjan написал(а):
Наверное автор имеет ввиду, сделать таблицу в Базе для навигации,
ну а по поводу чтоб сами ссылки в меню появились, так не бывает, само по себе ничего не появляеться.
Нужен модуль адменестрирования этой таблицы навигации, в ручную писать ссылки для базы тоже не выход.
Я думаю так.
На мой взгляд надо сразу продумать логику.
1. делаем систему адменистрирования.
2. создаём в админке пункт создать раздел к примеру (овощи), тем самым создаём таблицу в Базе для овощей (создаст в таблице навигация запись линки для меню навигация -которая
будет адрессованна к таблице (овощи) )
3.создаём в админке пунк добавить в раздел (овощи) к примеру яблоки- тем самым делаем запись в таблицу овощи - яблок.
Примитивная но наверное понятная логика.
Кликнув в меню навигация по (овощи),
1.подключаем Базу
2.Читаем что там есть в (таблице овощи) и выводим.
-----------
Если не охото париться с админкой и линок не много, можно через Mydmin создать таблицу навигация в которой руками прописать линки к тем или иным таблицам наименований разделов.

Спустя 2 часа, 7 минут, 23 секунды (17.03.2011 - 23:55) prst написал(а):
Да нет, у меня вопрос более простой был. На счет ссылок: Просто есть пункты меню которые никуда не ведут, а нужны они для заголовка, выводить по ним странички какие то нет надобности, это просто заголовок. Т.е вот типичное меню и довольно частое мною видимое:

<ul>
<li><a
href="#">Об этом</a></li>
<li>
Раздел тригидрон:</li>
   <li><a href="#">литол</a></li>
   <li><a href="#">гавнол</a></li>
<li>
Раздел мегатрон:</li>
   <li><a href="#">оптимус</a></li>
   <li><a href="#">примус </a></li>
<li><a
href="#">Новости</a></li>
<li><a
href="#">Гостевая</a></li>
</ul>


А вопрос в том как это меню организовать в базе чтобы делать потом вывод на страничку. У меня сейчас сделано криво, а именно в таблице есть имя меню, флаги есть ли ссылка и является ли меню дочерним, ну и сама ссылка если есть. При выводе в зависимости от флагов формируются пункты меню с разными стилями. Но у меня в талице эти меню находятся друг за другом т.е id=1, id=2.. id=10. Правильно ли это? Или это делается по отлаженной схеме и подругому? Все-таки мне кажется такой тип меню очень популярен...

Спустя 5 часов, 2 минуты, 53 секунды (18.03.2011 - 04:58) sebastjan написал(а):
На мой взгляд всё нормально, но я сам то новичёк, так что могу высказать только своё мнение.
А я для простоты понимания сделал несколько таблиц
Навигация-1(там меню такое то)
Навигация-2(там меню другое)
А все ссылки для сайта для всех меню в одной таблице для меня слишком запарно разбираться что и куда.
А сейчас попробовал другой вариант чтоб избежать выпадающих меню, главное меню это список основных разделов .
при клики на раздел выгружаю из Базы всё что касательно этого раздела, к примеру в этом разделе 10-20 записей артиклей.
Всё это выгружаеться на страницу в цикле и представляет из себя мини превьюшки с кратким описанием, каждая эта превьюшка являеться ссылкой на более подробное описание артикля.
На мой взгляд просто и грозно.



Спустя 11 часов, 39 минут, 53 секунды (18.03.2011 - 16:38) prst написал(а):
Всё, знающие люди показали как это делается. В базе создается таблица с полями id,parent_id,name,href. Если меню само по себе - верхнего уровня то оно имеет просто какой то свой id а parent_id=0. Если это пункт подменю, то ему проставляем parent_id = id нужного нам родителя. В приниципе все. Далее выдергиваем:
 $result = mysql_query("SELECT * FROM `menu` WHERE `parent_id` = '0' ORDER BY id", $db);
echo "<ul>";
while($myrow = mysql_fetch_assoc($result))
{



$sub_result = mysql_query("SELECT * FROM `menu` WHERE `parent_id` = '$myrow[id]' ORDER BY id", $db);
if (mysql_num_rows($sub_result)>0)
{//Если найдено подменю

//Выводим заголовок раздела

echo "<li class=\"menuHead\">$myrow[name]";

//Выводим подменюшки
while($sub_myrow=mysql_fetch_assoc($sub_result))
{
echo "<li><a href=\"$sub_myrow[href]\">$sub_myrow[name]</a></li>\n";
}
}

else //Если нет подменю то выводим например со стилем menuHead
{
echo "<li class=\"menuHead\"><a href=\"$myrow[href]\">$myrow[name]</a></li>\n";
}


}

echo "</ul>";

Надеюсь кому-нибудь пригодится тоже.

Спустя 4 минуты, 16 секунд (18.03.2011 - 16:42) inpost написал(а):
prst
Обращение внутри БД - неправильно.
Как писать через echo, как оформлять запросы - глянь в моей подписи под последней ссылкой.

Спустя 2 часа, 29 минут, 3 секунды (18.03.2011 - 19:11) m4a1fox написал(а):
inpost
Я извиняюсь... но у вас в последние подписи чу-чуть пусто.

Спустя 42 минуты, 48 секунд (18.03.2011 - 19:54) inpost написал(а):

Спустя 10 минут, 54 секунды (18.03.2011 - 20:05) m4a1fox написал(а):
inpost
не, ну вы сказали последнее....

Спустя 1 минута (18.03.2011 - 20:06) m4a1fox написал(а):
inpost
Ну и все таки, как быть если необходимо реализовать запрос в запросе?

Спустя 2 часа, 31 минута, 27 секунд (18.03.2011 - 22:37) Snus написал(а):
inpost
У тебя в уроке нелепица написана
http://inpost.dp.ua/lessons/lessons.php?id=2
// инициализируем переменные:
$fio = trim($_POST['fio']) == '' ? trim($_POST['fio']) : '';

// следующую проверку делаем для всех наших данных
if(empty($fio))
$error['fio'] = 'Вы не ввели ФИО';

Спустя 8 минут, 54 секунды (18.03.2011 - 22:46) prst написал(а):
Цитата (inpost @ 18.03.2011 - 13:42)

Обращение внутри БД - неправильно.
Как писать через echo, как оформлять запросы - глянь в моей подписи под последней ссылкой.

Так правильнее?
$result = mysql_query("SELECT * FROM `menu` WHERE 
`parent_id` = '0'
ORDER BY id"

, $db);
$menu = '<ul>';
while($myrow = mysql_fetch_assoc($result))
{
$sub_result = mysql_query("SELECT * FROM `menu`
WHERE `parent_id` = '
{$myrow[id]}'
ORDER BY id"

, $db);
if (mysql_num_rows($sub_result)>0)
{//Если найдено подменю

//Выводим заголовок раздела

$menu .= '<li class="menuHead">$myrow[name]</li>';

//Выводим подменюшки
while($sub_myrow=mysql_fetch_assoc($sub_result))
{
$menu .= '<li><a href="$sub_myrow[href]">$sub_myrow[name]</a></li>\n';
}
}

else //Если нет подменю то выводим например со стилем menuHead
{
$menu .= '<li class="menuHead"><a href="$myrow[href]">$myrow[name]</a></li>\n';
}
}

$menu .= '</ul>';
echo $menu;

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

$menu .= '<li class="menuHead">$myrow[name]</li>';

работает вот так:

$menu .= "<li class=\"menuHead\">$myrow[name]</li>\n";

Спустя 44 минуты, 52 секунды (18.03.2011 - 23:31) inpost написал(а):
Snus
Ага, ошибка в инициализации =) Спасибо, подправлю.

prst
Правила в основном для больших и длинных запросах, $db можно вообще убрать, если работаешь с одной БД, myrow['id'] - в кавычках. Скобки в условиях на уровне сравнения, внутренние процедуры выступать:
{
$menu '<li><a href="$sub_myrow[href]">$sub_myrow[name]</a></li>\n';
}

Не нужно всё в переменную отправлять, если сразу же идёт вывод ($menu),

'<li class="menuHead">'.$myrow[name];
'<li><a href="'.$sub_myrow['href'].'">'.$sub_myrow['name'].'</a></li>'."\n"; // двойные кавычки необходимы для \n
"<li><a href=\"".$sub_myrow['href']."\">".$sub_myrow['name']."</a></li>\n";

Спустя 16 минут, 55 секунд (18.03.2011 - 23:48) Snus написал(а):
inpost
wink.gif
Извини, что в этой теме написал, просто в личке я ББкода не нашел.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.