freed-master
17.06.2009 - 20:19
Решил все-таки создать отдельную тему, потому как сразу появляются вопросы, решить которые я впринципе смогу, но не так как хотелосьбы.
Вкратце задача: написать меню содержащее 5 разделов по 6 подразделов в каждый из которых (из подразделов) будет добавляться неограниченный список ссылок, а ниже отображаться контент выбранной из списка ссылки.
(Надеюсь понятно описал)
Т.е.
1) В зависимости от выбранного раздела отображаются пункты подразделов.
Для этого присваиваю каждому разделу свой id, пусть это будут буквы: A, B, C, D, E. Информацию про это меню занес в таблицу бд menu_m с полями: id и name.
2) Теперь вывожу пункты раздела из бд циклом do while и гэтом передаю id раздела для отображения нужных пунктов подменю.
Выглядит это примерно так:
PHP |
<?php do { ?> <a href="index.php?page=<?php echo $row_menu_m['id']; ?>"><?php echo $row_menu_m['name']; ?></a> <?php } while ($row_menu_m = mysql_fetch_assoc($menu_m)); |
3) И вот первая трудность как привязать id раздкла к пунктам подразделов?
Создал таблицу бд menu_s с полями id_m (содержит id разделов) id_s (содержит id подразделов - цифровые значения - от 1 до 6) и name; всего получилось 30 строк.
Далее получаю значение переменной и вывожу пункты подменю:
PHP |
<?php do { ?> <a href="index.php?page=<?php echo $row_menu_s['id_m'].$row_menu_s['id_s']; ?>"><?php echo $row_menu_s['name']; ?></a> <?php } while ($row_menu_s = mysql_fetch_assoc($menu_s)); |
До этого момента что здесь не так?
Спустя 9 минут, 54 секунды (17.06.2009 - 19:29) Kuliev написал(а):
freed-masterЧто то типа
этого??? Спустя 4 минуты, 5 секунд (17.06.2009 - 19:33) twin написал(а):
Начинаем курс противопоповщины. Блин.
Он и сам давно не рад этому ляпу наверняка, но из песни слов не выкинешь.
ЦИКЛ do... while ИСПОЛЬЗУЕТСЯ ТОЛЬКО В ТОМ СЛУЧАЕ, КОГДА БЕЗ ПРОХОЖДЕНИЯ ПЕРВОЙ ИНТЕРАЦИИ НЕЛЬЗЯ ОПРЕДЕЛИТЬ УСЛОВИЕ ВЫХОДА ИЗ ЦИКЛА.
Другими словами. Если есть определенный массив, и он разбирается в цикле (а это в случае с запросами так и есть), то нужно использовать цикл while, потому что он предполагает, что может и не быть ни одной интерации, то есть витка. Если запрос вернул пусто. Ни одной строки. А do... while обязывает, что бы была хотя бы одна запись, удовлетворяющая условию запроса. Это не корректно и нелогично и неправильно по определению.
Спустя 2 минуты, 26 секунд (17.06.2009 - 19:35) Kuliev написал(а):
Цитата (twin @ 17.06.2009 - 21:33) |
Начинаем курс противопоповщины. Блин. Он и сам давно не рад этому ляпу наверняка, но из песни слов не выкинешь.
ЦИКЛ do... while ИСПОЛЬЗУЕТСЯ ТОЛЬКО В ТОМ СЛУЧАЕ, КОГДА БЕЗ ПРОХОЖДЕНИЯ ПЕРВОЙ ИНТЕРАЦИИ НЕЛЬЗЯ ОПРЕДЕЛИТЬ УСЛОВИЕ ВЫХОДА ИЗ ЦИКЛА. Другими словами. Если есть определенный массив, и он разбирается в цикле (а это в случае с запросами так и есть), то нужно использовать цикл while, потому что он предполагает, что может и не быть ни одной интерации, то есть витка. Если запрос вернул пусто. Ни одной строки. А do... while обязывает, что бы была хотя бы одна запись, удовлетворяющая условию запроса. Это не корректно и нелогично и неправильно по определению. |
+1 мне лень было ему это писать.
Спустя 2 минуты, 11 секунд (17.06.2009 - 19:37) freed-master написал(а):
Я не знаю попова и не видел его курсы!
Сейчас напишу с чем столкнулся используя вышеописанный мной код...
Спустя 7 минут, 27 секунд (17.06.2009 - 19:45) freed-master написал(а):
Кажется надо объединить поля id_m и id_s таблицы menu_s, но...
Есть SQL-запрос на выборку пунктов подменю:
SQL |
SELECT * FROM menu_s WHERE `id_m`='".$id_m."' |
где
PHP |
$id_m = isset($_GET['page'])?$_GET['page']:null; |
нужно сделать что-то типа:
SQL |
SELECT * FROM menu_s WHERE `id_m` содержит $id_m |
Спустя 1 минута, 1 секунда (17.06.2009 - 19:46) kirik написал(а):
do-while можно уже называть "методом Попова"
Спустя 3 минуты, 43 секунды (17.06.2009 - 19:50) Kuliev написал(а):
Цитата (kirik @ 17.06.2009 - 21:46) |
do-while можно уже называть "методом Попова" |
Аха, так сказать его визитной карточкой.
Спустя 3 минуты, 10 секунд (17.06.2009 - 19:53) freed-master написал(а):
Цитата |
ЦИКЛ do... while ИСПОЛЬЗУЕТСЯ ТОЛЬКО В ТОМ СЛУЧАЕ, КОГДА БЕЗ ПРОХОЖДЕНИЯ ПЕРВОЙ ИНТЕРАЦИИ НЕЛЬЗЯ ОПРЕДЕЛИТЬ УСЛОВИЕ ВЫХОДА ИЗ ЦИКЛА. |
Я работаю в Дримвевере, а он сам вставляет нужный, по его мнению, код. Так значительно быстрее. Я конечно потом редактирую в ручную, но только то что можно, иначе не смогу дальше кодировать средствами Дрима.....
Спустя 3 минуты, 26 секунд (17.06.2009 - 19:56) Kuliev написал(а):
Цитата (freed-master @ 17.06.2009 - 21:53) |
Цитата | ЦИКЛ do... while ИСПОЛЬЗУЕТСЯ ТОЛЬКО В ТОМ СЛУЧАЕ, КОГДА БЕЗ ПРОХОЖДЕНИЯ ПЕРВОЙ ИНТЕРАЦИИ НЕЛЬЗЯ ОПРЕДЕЛИТЬ УСЛОВИЕ ВЫХОДА ИЗ ЦИКЛА. |
Я работаю в Дримвевере, а он сам вставляет нужный, по его мнению, код. Так значительно быстрее. Я конечно потом редактирую в ручную, но только то что можно, иначе не смогу дальше кодировать средствами Дрима..... |
Я бы посоветовал пользоваться БЛОКНОТОМ так сказать память рук развивает.
Спустя 3 минуты, 6 секунд (17.06.2009 - 19:59) freed-master написал(а):
Хорошо, от ныне буду кодить вручную!
И все таки можно-ли осуществить запрос типа:
SQL |
SELECT * FROM menu_s WHERE `id_m` содержит $id_m |
Спустя 7 минут, 37 секунд (17.06.2009 - 20:07) Kuliev написал(а):
freed-masterЯ так понимаю вам нужно меню типа этого:
При нажатие ссылкы чтобы открывалось подменю выбранной категории?
Спустя 12 минут, 43 секунды (17.06.2009 - 20:20) freed-master написал(а):
Мне нужно:
Раздел 1
Подраздел 1
Ссылка на страницу 1
Ссылка на страницу 2
Ссылка на страницу 3
...
И таких 5 разделов по 6 подразделов с ссылками на конечные страницы.
При этом все храниться в бд + возможность через админку добавлять и редактировать подразделы (не более 6 - ограничено дизайном) и ссылки на конечные страницы (с их контентом)
Вобщем сейчас начну писать код вручную... будут конкретные вопросы буду спрашивать... думаю они не заставят долго ждать...
Спустя 5 минут, 7 секунд (17.06.2009 - 20:25) sergeiss написал(а):
Я тоже в Дримвивере работаю
![smile.gif](http://phpforum.ru/html/emoticons/smile.gif)
Но только при написании кода пишу его тут же сам, в текстовом режиме. И только благодарю ДримВивер за любезно предоставляемые подсказки
А вот чтобы он сам за меня писал ПХП код... Может, в моей версии этого нету?
![rolleyes.gif](http://phpforum.ru/html/emoticons/rolleyes.gif)
Но мне и не надо.
По сути вопроса.
Мне кажется, ты сам себя загоняешь в угол тем, что присваиваешь null как дефолтовую величину. Я это говорил в другой теме, и не поленюсь повторить тут.
А код с условием "содержит" такой примерно (хотя я и не понял пока, зачем это нужно):
SQL |
where `id` in (1, 4, 5) |
Спустя 32 минуты, 55 секунд (17.06.2009 - 20:58) freed-master написал(а):
Пока получилось вот что:
PHP |
<?php require_once('inc/config.php'); $id_menu = isset($_GET['page'])?$_GET['page']:null; id_m =
$menu_m = mysql_query("SELECT * FROM `menu_m`") or die (mysql_error()); $menu_s = mysql_query("SELECT * FROM `menu_s` WHERE `id` LIKE '".$id_menu."%'") or die (mysql_error()); $menu_l = mysql_query("SELECT * FROM `menu_l` WHERE `id_s`='".$id_m."'") or die (mysql_error()); ?>
<?php while($row = mysql_fetch_assoc($menu_m)) { ?> <a href="index.php?page=<?php echo $row['id']; ?>"><?php echo $row['name']; ?></a> <?php } ?> <br /> <?php while($row = mysql_fetch_assoc($menu_s)) { ?> <a href="index.php?page=<?php echo $row['id']; ?>"><?php echo $row['name']; ?></a> <?php } ?> <br /> <?php while($row = mysql_fetch_assoc($menu_l)) { ?> <a href="index.php?page=<?php echo $id_menu; ?>&id=<?php echo $row['id_l']; ?>"><?php echo $row['name']; ?></a><br /> <?php } |
Возник вопрос: как считать с переменной $id_menu первый символ и присвоить его переменной $id_m?
Спустя 6 минут, 33 секунды (17.06.2009 - 21:04) sergeiss написал(а):
Цитата (freed-master @ 17.06.2009 - 21:58) |
Возник вопрос: как считать с переменной $id_menu первый символ и присвоить его переменной $id_m? |
substr(....)
Спустя 7 минут, 48 секунд (17.06.2009 - 21:12) freed-master написал(а):
да, спосибо уже разобрался:
PHP |
$id_m = substr($id_menu, 0, 1); |
Спустя 18 минут, 21 секунда (17.06.2009 - 21:30) freed-master написал(а):
Теперь что скажите:
PHP |
<?php require_once('inc/config.php'); $path_m = isset($_GET['page'])?$_GET['page']:A1; $path = substr($path_m, 0, 1);
$menu_m = mysql_query("SELECT `id`, `name` FROM `menu` WHERE `type`='m'") or die (mysql_error()); $menu_s = mysql_query("SELECT `id`, `name` FROM `menu` WHERE `id` LIKE '".$path."%' AND `type`='s'") or die (mysql_error()); $menu_l = mysql_query("SELECT * FROM `content` WHERE `path`='".$path_m."'") or die (mysql_error()); ?>
<?php while($row = mysql_fetch_assoc($menu_m)) { ?> <a href="index.php?page=<?php echo $row['id']; ?>"><?php echo $row['name']; ?></a> <?php } ?> <br /> <?php while($row = mysql_fetch_assoc($menu_s)) { ?> <a href="index.php?page=<?php echo $row['id']; ?>"><?php echo $row['name']; ?></a> <?php } ?> <br /> <?php while($row = mysql_fetch_assoc($menu_l)) { ?> <a href="index.php?page=<?php echo $path_m; ?>&id=<?php echo $row['id']; ?>"><?php echo $row['title']; ?></a><br /> <?php } |
Спустя 1 час, 11 минут, 15 секунд (17.06.2009 - 22:42) sergeiss написал(а):
1. А1 надо в кавычки заключить, т.к. это символьная строка, а не константа.
2. А вот циклы у тебя не совсем правильные, по-моему... Потому что тут, как я понимаю, должны быть вложенные циклы. Или я не понял логику того, как ты хочешь сделать.
Спустя 32 минуты, 34 секунды (17.06.2009 - 23:14) freed-master написал(а):
Сейчас все работает правильно... ведь помимо приведенного php есть еще и html...
Теперь пытаюсь показать посетителю в каком разделе он находится.
Сейчас класс присвоин статически:
PHP |
<?php while($row = mysql_fetch_assoc($menu_m)) { ?> <td class="mm_off"><a href="index.php?page=<?php echo $row['id']; ?>"><?php echo $row['name']; ?></a></td> <?php } |
а нужно что-бы он присваивался в зависимости отполученного гэтом значения переменной page. Если совпадает - mm_on, если нет - mm_off
Спустя 7 часов, 5 минут, 11 секунд (18.06.2009 - 06:19) Kuliev написал(а):
sergeiss
Цитата |
2. А вот циклы у тебя не совсем правильные, по-моему... Потому что тут, как я понимаю, должны быть вложенные циклы. Или я не понял логику того, как ты хочешь сделать. |
Что-то я тоже не понял, что он с циклами намутил
Спустя 39 минут, 7 секунд (18.06.2009 - 06:59) freed-master написал(а):
Чего это вас мои циклы не устраивают?...
А как бы вы сделали? Хоть примерно набросайте?
Код страницы (на данный момент) целиком:
PHP |
<?php require_once('inc/config.php'); $path_m = isset($_GET['page'])?$_GET['page']:"A1"; $path = substr($path_m, 0, 1); $id = isset($_GET['id'])?$_GET['id']:null; $menu_m = mysql_query("SELECT `id`, `name` FROM `menu` WHERE `type`='m'") or die (mysql_error()); $menu_s = mysql_query("SELECT `id`, `name` FROM `menu` WHERE `id` LIKE '".$path."%' AND `type`='s'") or die (mysql_error()); $menu_l = mysql_query("SELECT * FROM `content` WHERE `path`='".$path_m."'") or die (mysql_error()); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> <link rel="stylesheet" type="text/css" href="inc/style.css"/> <meta name="description" content="" /> <meta name="keywords" content="" /> </head>
<body> <table cellpadding="0" cellspacing="0"> <tr class="BookAntiqua"> <td rowspan="2" id="d_left_t"> </td> <?php while($row = mysql_fetch_assoc($menu_m)) { ?> <td class="mm_off"><a href="index.php?page=<?php echo $row['id']; ?>"><?php echo $row['name']; ?></a></td> <?php } ?> <td colspan="2" class="search"> <form method="post" action="inc/search.php"> <input type="text" name="query" id="search" /> <input type="submit" value="Найти" /> </form> </td> <td rowspan="2" id="d_right_t"> </td></tr> <tr id="d_submenu" class="BookAntiqua"> <td colspan="7"> <?php while($row = mysql_fetch_assoc($menu_s)) { ?> <div class="sm_off"><a href="index.php?page=<?php echo $row['id']; ?>"><?php echo $row['name']; ?></a></div> <?php } ?> </td></tr> <tr> <td rowspan="2" id="d_left"> </td> <td colspan="7" class="Verdana"> <div class="lm_link"><ol> <?php while($row = mysql_fetch_assoc($menu_l)) { ?> <li><a href="index.php?page=<?php echo $path_m; ?>&id=<?php echo $row['id']; ?>"><?php echo $row['title']; ?></a></li> <br /> <?php } ?> </ol></div> </td> <td rowspan="2" id="d_right"> </td> </tr> <tr><td colspan="7" id="content" class="BookAntiqua"> <?php if (isset($id)) { $content = mysql_query("SELECT `title`, `content`, `description`, `keywords`, `date`, `auther`, `count` FROM `content` WHERE `id`='".$id."'") or die (mysql_error()); $row = mysql_fetch_assoc($content); ?> <h1><?php echo $row['title']; ?></h1> <?php echo $row['content']; } ?> </td></tr> <tr> <td id="d_coner_l"> </td> <td colspan="7" id="d_bottom"><p class="Verdana">www.justit.com | 2009 © Черненков Василий</p></td><td id="d_coner_r"> </td> </tr> </tab |
Спустя 1 час, 35 минут, 7 секунд (18.06.2009 - 08:34) glock18 написал(а):
Цитата |
Возник вопрос: как считать с переменной $id_menu первый символ и присвоить его переменной $id_m? |
если один символ строки нужен, то всегда проще (и, думаю, лучше) взять его
А меню я тоже че-т не осилил. Странное какое-то, по-моему
![smile.gif](http://phpforum.ru/html/emoticons/smile.gif)
Такое ощущение, что показывается только большое меню, и одно подменю у того, которое выбрано. остальные не показываются/грузятся. так?
Спустя 1 час, 48 минут, 4 секунды (18.06.2009 - 10:22) Kuliev написал(а):
Я так и не понял где тут у тебя многоуровневое меню но на мой взгляд оно должно выглядеть так.
Прошу сильно не пинать.
PHP |
<?php $country = array ("Россия" => array ( "Москва" => array("Мира","Ленина","Лесная","Затонная"), "Питер" => array("Карбышева","Юбилейная","Гоголя","Сталина"), "Самара" => array("Чайкиной","Вокзальная"), "Орел" => array("Пушкина","Морская","Грибная")), "Украина"=> array("Донецк","Житомир","Одесса"), "США"=> array ("Техас","Калифорния","Мичиган","Ойева"));
$city = isset($_GET['city'])? $_GET['city'] : null; $street = isset($_GET['street'])? $_GET['street'] : null;
echo "<ul>\n";
foreach ($country as $key=>$val) { echo "<li class=li_><a href='".$_SERVER['PHP_SELF']."?city=".$key."'>".$key."</a>\n\r";
if ($city != $key) continue;
echo "<ul type=square>\n";
foreach ($country[$city] as $k=>$v) { if (!is_array($v)) { echo "<li class=li><a href='".$_SERVER['PHP_SELF']."?city=".$city."&link=".$v."&street=".$k."'>".$v."</a>\n"; } else { echo "<li class=li><a href='".$_SERVER['PHP_SELF']."?city=".$city."&link=".$v."&street=".$k."'>".$k."</a>\n"; } if ($street != $k) continue;
echo "<ul type=disc style='color:red'>\n"; foreach ($v as $str) { echo "<li>".$str."\n"; } echo "</ul>\n\r";
}
echo "</ul>\n";
}
echo "</ul>\n";
/*
echo "<pre>"; print_r($country);
*/
|
Должно получиться вот так:
Спустя 4 часа, 6 минут, 11 секунд (18.06.2009 - 14:28) freed-master написал(а):
Цитата |
Такое ощущение, что показывается только большое меню, и одно подменю у того, которое выбрано. остальные не показываются/грузятся. так? |
Именно так все и есть!
Цитата |
Я так и не понял где тут у тебя многоуровневое меню |
Цитата |
Код страницы (на данный момент) целиком: |
меню у меня не вертикальное, а горизонтальное и тесно переплитается с html-кодом...
_____________
Всем, кто заинтересован, могу помочь начать
зарабатывать на forex.
Пишите в личку или на e-mail:
flash-dirt@yandex.ru