|
|
|
|
<?php
$menu_array = array(array("Меню 1", "menu1.php",
array("Пункт 1-1" => "point11.php",
"Пункт 1-2" => "point12.php",
"Пункт 1-3" => "point13.php")),
array("Меню 2 (без подменю)", "Menu 2.php"),
array("Меню 3", "menu3.php",
array("Пункт 3-1" => "point31.php",
"Пункт 3-2" => "point32.php",
"Пункт 3-3" => "point33.php")),
array("Меню 4 (без ссылки)", "",
array("Пункт 4-1" => "point41.php",
"Пункт 4-2" => "point42.php",
"Пункт 4-3" => "point43.php")));
?>
|
Как можно из базы данных вывести значения полей в приведённый массив для генерирования динамического меню? | |
|
|
|
|
|
|
|
для: sirop
(08.01.2007 в 06:31)
| | А как пункты меню хранятся в базе данных? | |
|
|
|
|
|
|
|
для: cheops
(08.01.2007 в 14:02)
| | Вот таблица основных пункто меню:
CREATE TABLE `main_menu` (
`id` int(11) NOT NULL auto_increment,
`order` int(11) NOT NULL default '0',
`menu` varchar(50) NOT NULL default ''
PRIMARY KEY (`id`)
) ENGINE=MyISAM
|
order - По этому полю проходит сортировка ( order by `order` )
menu - собственно, само название пунктика
А это таблица подменю:
CREATE TABLE `sub_menu` (
`id` int(11) NOT NULL auto_increment,
`main_menu_id` int(11) NOT NULL default '0',
`order` int(11) NOT NULL default '0',
`sub_menu` varchar(50) NOT NULL default ''
PRIMARY KEY (`id`)
) ENGINE=MyISAM
|
main_menu_id - для связи с таблицей основного меню
другие поля такие же, как и в предыдущей таблице | |
|
|
|
|
|
|
|
для: sirop
(08.01.2007 в 06:31)
| | Никто не знает как это сделать? У меня никак не получается. помогите, плиз!!!! очень нужно | |
|
|
|
|
|
|
|
для: sirop
(09.01.2007 в 01:20)
| | Мало данных.
Неясно, где храниятся названия пунктов, а где имена файлов. | |
|
|
|
|
|
|
|
для: Trianon
(09.01.2007 в 01:34)
| | В таблице main_menu в поле menu хранится название главного пункта меню (Меню 1, Меню 2, Меню 3....... и т.д.)
В таблице sub_menu в поле sub_menu хранится название подпунктика (Пункт 1-1, Пункт 1-2, .... , Пункт 2-1, Пункт 2-2, ....... и т.д.). У каждого "Пункт .. " есть идентификатор ( поле: main_menu_id ) для связи с таблицей main_menu
Ссылки генерируются динамически такого вида : подменю - index.php?main_menu_id=22&sub_menu=15 ; меню - index.php?main_menu_id=22
(в приведённом мной варианте просто названия файлов взяты "с потолка")
Например, чтобы выбрать все подпунктики какого-то основного меню:
<?php
$query = "SELECT main_menu_id sub_menu FROM sub_menu WHERE main_menu_id='".$_GET['main_menu_id ']."' ORDER BY `order`";
// и далее необходимый код
?>
|
Выбрать я знаю как.
А вот как после выборки основного меню и после выборки подпунтиков всё это дело вывести в тот массив? | |
|
|
|
|
|
|
|
для: sirop
(09.01.2007 в 02:54)
| |
<?php
$sql = "SELECT main_menu.id as mid, main_menu.menu, sub_menu.id as sid, sub_menu.sub_menu
FROM main_menu JOIN sub_menu ON main_menu_id = main_menu.id
ORDER BY main_menu.order, sub_menu.order";
$res = mysql_query($sql);
$menu = array();
while($row = mysql_fetch_row($res))
{
list($mid, $menu, $sid, $item) = $row;
if(!isset($menu[$mid]))
$menu[$mid] = array($menu, "menu$mid.php", array());
if(!isset($menu[$mid][2][$item]))
$menu[$mid][2][$item] = "point$mid$sid.php";
}
echo '<pre>';
print_r($menu);
?>
|
| |
|
|
|
|
|
|
|
для: sirop
(08.01.2007 в 06:31)
| | Этот массив нужен для двухуровневого меню, которое генерируется динамически.
Может это не лучшее решение использовать такой массив в подобных целях?
Кто подскажет может другой априант как можно делать двухуровневое динамическое меню (данные находятся в базе MySql)? | |
|
|
|
|
|
|
|
для: sirop
(09.01.2007 в 14:59)
| | чего-то не работает :(
пробовал разные "извращения" на основе предлеженного, но тоже ничего не вышло
прилагаю полный код меню в аттаче (без запроса к базе) может натолкнет на мысль
и дамп таблиц:
CREATE TABLE main_menu (
id int(11) NOT NULL auto_increment,
`order` int(11) NOT NULL default '0',
menu varchar(50) NOT NULL default '',
PRIMARY KEY (id)
) ENGINE=MyISAM;
INSERT INTO main_menu VALUES (1, 1, 'главная');
INSERT INTO main_menu VALUES (2, 2, 'контакты');
INSERT INTO main_menu VALUES (3, 3, 'форум');
INSERT INTO main_menu VALUES (4, 4, 'курсы');
CREATE TABLE sub_menu (
id int(11) NOT NULL auto_increment,
main_menu_id int(11) NOT NULL default '0',
`order` int(11) NOT NULL default '0',
sub_menu varchar(50) NOT NULL default '',
PRIMARY KEY (id)
) ENGINE=MyISAM;
INTO sub_menu VALUES (1, 2, 1, 'Карта');
INSERT INTO sub_menu VALUES (2, 2, 2, 'Адрес');
INSERT INTO sub_menu VALUES (3, 2, 3, 'Как проехать');
INSERT INTO sub_menu VALUES (4, 2, 4, 'Телефоны');
INSERT INTO sub_menu VALUES (5, 3, 6, 'форум о курсах');
INSERT INTO sub_menu VALUES (6, 3, 5, 'форум о программировании');
|
| |
|
|
|
|
|
|
|
для: sirop
(10.01.2007 в 01:53)
| |
<?php
$sql = "SELECT main_menu.id as mid, main_menu.menu, sub_menu.id as sid, sub_menu.sub_menu
FROM main_menu LEFT JOIN sub_menu ON main_menu_id = main_menu.id
ORDER BY main_menu.order, sub_menu.order";
$res = mysql_query($sql);
$menu = array();
while($row = mysql_fetch_row($res))
{
list($mid, $mmenu, $sid, $item) = $row;
if(!isset($menu[$mid]))
$menu[$mid] = array($mmenu, "menu$mid.php", array());
if($item != null && !isset($menu[$mid][2][$item]))
$menu[$mid][2][$item] = "point$mid$sid.php";
}
echo '<pre>';
print_r($menu);
?>
|
| |
|
|
|
|
|
|
|
для: Trianon
(10.01.2007 в 10:09)
| | Trianon, огромное спасибо! То, что нужно | |
|
|
|
|