Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Данные из базы в массив
 
 автор: sirop   (08.01.2007 в 06:31)   письмо автору
 
 

<?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")));
?>

Как можно из базы данных вывести значения полей в приведённый массив для генерирования динамического меню?

   
 
 автор: cheops   (08.01.2007 в 14:02)   письмо автору
 
   для: sirop   (08.01.2007 в 06:31)
 

А как пункты меню хранятся в базе данных?

   
 
 автор: sirop   (08.01.2007 в 16:17)   письмо автору
 
   для: 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   (09.01.2007 в 01:20)   письмо автору
 
   для: sirop   (08.01.2007 в 06:31)
 

Никто не знает как это сделать? У меня никак не получается. помогите, плиз!!!! очень нужно

   
 
 автор: Trianon   (09.01.2007 в 01:34)   письмо автору
 
   для: sirop   (09.01.2007 в 01:20)
 

Мало данных.
Неясно, где храниятся названия пунктов, а где имена файлов.

   
 
 автор: sirop   (09.01.2007 в 02:54)   письмо автору
 
   для: 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`";

// и далее необходимый код
?>

Выбрать я знаю как.
А вот как после выборки основного меню и после выборки подпунтиков всё это дело вывести в тот массив?

   
 
 автор: Trianon   (09.01.2007 в 15:29)   письмо автору
 
   для: 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   (09.01.2007 в 14:59)   письмо автору
 
   для: sirop   (08.01.2007 в 06:31)
 

Этот массив нужен для двухуровневого меню, которое генерируется динамически.
Может это не лучшее решение использовать такой массив в подобных целях?
Кто подскажет может другой априант как можно делать двухуровневое динамическое меню (данные находятся в базе MySql)?

   
 
 автор: sirop   (10.01.2007 в 01:53)   письмо автору
 
   для: 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, 'форум о программировании');

   
 
 автор: Trianon   (10.01.2007 в 10:09)   письмо автору
 
   для: 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); 
?> 

   
 
 автор: sirop   (10.01.2007 в 15:56)   письмо автору
 
   для: Trianon   (10.01.2007 в 10:09)
 

Trianon, огромное спасибо! То, что нужно

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования