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

Форум PHP

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

 

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

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

тема: Как сделать динамическую навигацию?
 
 автор: Shadow69   (10.04.2006 в 14:39)   письмо автору
 
 

Уважаемые друзьЯ!

Подскажите как сделать динамическую навигацию, вот такого типа:

Например, в левой части страницы index.php, есть навигация, вот такого вида:

<A href="http://yyy.ru/index.php">Главная</A>
<A href="http://yyy.ru/index.php?menu=music">Музыка</A>
<A href="http://yyy.ru/index.php?menu=video">Видео</A>

И в соответствии с этими ссылками выводились определенные данные (как не трудно догадаться, в первом случае - список имеющихся на сайте исполнителей, во втором - список имеющегося на сайте видео).

А далее, например когда выводится список исполнителей, формировалась алфавитная навигация (А Б В и т.д.) со ссылками <A href="http://yyy.ru/index.php?menu=music&cat=А">А</A>

Что в этом стиле.

Просто хочется понять принцип "приклеивания" параметров и запросов http://yyy.ru/index.php/menu=music&cat=ariana&id=1"

Заранее спасибо.

   
 
 автор: cheops   (10.04.2006 в 22:46)   письмо автору
 
   для: Shadow69   (10.04.2006 в 14:39)
 

Подробности зависят от того, где храниться информация в базе данных или в файле. но ко всем параметрам в гиперссылке <A href="http://yyy.ru/index.php?menu=music&cat=А">А</A> вы можете получить доступ при помощи суперглобального массива $_GET
<?php
  
echo $_GET['music']." - ".$_GET['cat']; // music - A
?>

В зависимости от того какие значения принимают элементы $_GET['music'] или $_GET['cat'] можно предпринимать то или иное действие.

   
 
 автор: Shadow69   (11.04.2006 в 08:05)   письмо автору
 
   для: cheops   (10.04.2006 в 22:46)
 

Ой! Спасибо огромное за ответ.

Информация хранится в базе данных mysql.
Значения!? Выводятся текстовая информация, и ссылки... ну, может и картинки ещё.

   
 
 автор: cheops   (11.04.2006 в 14:37)   письмо автору
 
   для: Shadow69   (11.04.2006 в 08:05)
 

Тогда задача сводится к динамическому формированию SQL-запроса
<?php
  $where 
"";
  if(
$_GET['music'] == 'music'$where "WHERE music = 34";
  if(
$_GET['video'] == 'video'$where "WHERE video = 34";
  
$query "SELECT * FROM tbl".$where;
?>

Конечно, реальный код будет зависеть от того, что на самом деле обозначают параметры music и video.

   
 
 автор: Shadow69   (14.04.2006 в 16:49)   письмо автору
 
   для: cheops   (11.04.2006 в 14:37)
 

Что-то не понятно. :-) Но всё равно спасибо.

Объясню точнее.

Вот например GET-ссылка вашего форума: http://softtime.ru/forum/read.php?id_forum=1&id_theme=15886&page=3

Это значит, что файл read.php, обрабатыет переменную id_forum, значение которой 1, переменную id_theme, значение - 15886, переменную page, значение которой = 3.

Это значит, что если ввести выше названную ссылку, то "движок" выведет форум №1, тему №15886, страницу №3.

Вот тоже самое и у меня: если например, в строке браузера набрать http://yyy.ru/index.php?menu=video, то выведется полный список видеоролликов, а если http://yyy.ru/index.php?menu=video&id=1, то уже конкретный видеоролик под номером 1.

Ну, и так далее http://yyy.ru/index.php?menu=music, выводится общий список исполнителей, если http://yyy.ru/index.php?menu=music&cat=abba, то список всех композиций исполнителя abba, http://yyy.ru/index.php?menu=music&id=102, песню 102 исполнителя abba.

Надеюсь, ещё больше на запутал :-)

   
 
 автор: Trianon   (14.04.2006 в 17:05)   письмо автору
 
   для: Shadow69   (14.04.2006 в 16:49)
 

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

   
 
 автор: КРУТО   (14.04.2006 в 21:25)   письмо автору
 
   для: Shadow69   (14.04.2006 в 16:49)
 

http://yyy.ru/index.php?menu=music&id=102, песню 102 исполнителя abba.
не совсем так )
http://yyy.ru/index.php?menu=music&cat=abba&id=102

   
 
 автор: Anwor   (14.04.2006 в 22:57)   письмо автору
 
   для: КРУТО   (14.04.2006 в 21:25)
 

Мне кажется, как и сказал Cheops, надо воспользоваться суперглобальным $_GET. Просто при каждом обновлении страницы проверяете наличие в этом массиве переменных, а в соответствии с их значениями (если они, конечно, заданы) вызываете определенный SQL-запрос. Вот пример.
index.php

<?php
if (isset($_GET['menu'])) {
//если задана только переменная menu, т.е. в URL-запросе: http://yyy.ru/index.php?menu=music
$query=".......";
//формируем выборку по значению music
} else if (isset($_GET['cat'])) {
//если задана дочерняя переменная, т.е. в URL-запросе: http://yyy.ru/index.php?menu=music&cat=abba
$query=".......";
//формируем выборку по значениям music и abba
}
//и т.д., после чего посылаем полученный запрос MySQL'у:
$res=mysql_query($query);
$row=mysql_fetch_array($resmysql_assoc);
//к примеру. А дальше уже идет обработка и вывод на страницу данных, полученных из БД. Нечто вроде:
foreach($row as $value) {
echo 
$value."<br>";
}
//это, конечно, бредовый вариант вывода, так, для примера.
?>
<!-- Дальше идет код самой страницы на ХТМЛ... -->

Возможны, в принципе, и другие варианты, этот может показаться несколько громоздким.

   
 
 автор: Shadow69   (27.04.2006 в 11:29)   письмо автору
 
   для: Anwor   (14.04.2006 в 22:57)
 

Огромнейшее спасибо всем за ответы!

А вот такой вопрос:

Объясните, пожайлуста общий принцип вот такой навигации:

http://yyy.ru/index.php?menu=music (выводит данные по разделу "музыка")
http://yyy.ru/index.php?menu=video (выводит данные по разделу "видео")
http://yyy.ru/index.php?menu=guestbook (выводит данные из гостевой книги)
и т.д.

Чтобы сайт был из одного файла index.php, а с помощью вышеописанных GET-запросов выводил соответствующие данные? Как его реализовать? И как составить таблицу sql в данном случае?

Заранее спасибо.

   
 
 автор: cheops   (27.04.2006 в 12:27)   письмо автору
 
   для: Shadow69   (27.04.2006 в 11:29)
 

Для этого необходимо проверять содержимое GET-параметра menu
<?php 
  
if($_GET['menu'] == 'music')
  {
    
// Содержимое страницы "музыка"
  
}
  if(
$_GET['menu'] == 'video')
  {
    
// Содержимое страницы "видео"
  

  if(
$_GET['menu'] == 'guestbook')
  {
    
// Вывод из гостевой книги
  

?>

Если параметров много - их можно оформить в виде конструкции switch.

   
 
 автор: Shadow69   (22.05.2006 в 11:03)   письмо автору
 
   для: cheops   (27.04.2006 в 12:27)
 

Огромное спасибо.

А посоветуйте, как сделать вывод названий меню (видео, музыка, и т.д.) в заголовке <TITLE>. Как лучше и проще сделать?

   
 
 автор: cheops   (22.05.2006 в 12:34)   письмо автору
 
   для: Shadow69   (22.05.2006 в 11:03)
 

Что в данном случае вызывает сложность? Обычно подставляют переменную
<title><?php echo $title?></title>

Методы передачи этой переменной зависит от структуры страницы: монолитная она или фрагментирована и собирается при помощи require_once().

   
 
 автор: Shadow69   (02.06.2006 в 11:00)   письмо автору
 
   для: cheops   (22.05.2006 в 12:34)
 

Спасибо.

Сложность в практической стороне...

Допустим я ввожу в адресную строку http://yyy.ru/index.php?menu=music (guestbook, forum).
У меня в заголовке "движок" должен вывести: Сайт YYY > Раздел Музыка (Гостевая книга, Форум)

Описать с помошью if, довольно таки громозко, так как дальше будут подразделы.

Ввожу: http://yyy.ru/index.php?menu=music&artist=abba.
Т.е "движок" должен вывести Сайт YYY > Раздел Музыка> Группа ABBA

Страница монолитная. С помощью require_once(), подключается только config.php.

   
 
 автор: cheops   (02.06.2006 в 12:22)   письмо автору
 
   для: Shadow69   (02.06.2006 в 11:00)
 

>http://yyy.ru/index.php?menu=music (guestbook, forum).
С такой структурой намучаетесь - нет возможности исправить формат строки запроса?

   
 
 автор: Shadow69   (02.06.2006 в 14:59)   письмо автору
 
   для: cheops   (02.06.2006 в 12:22)
 

Мне казалось, что структура не плохая.... :-) А как сделать лучше?

   
 
 автор: cheops   (02.06.2006 в 21:39)   письмо автору
 
   для: Shadow69   (02.06.2006 в 14:59)
 

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

   
 
 автор: Shadow69   (19.06.2006 в 14:54)   письмо автору
 
   для: cheops   (02.06.2006 в 21:39)
 

Еще раз спасибо.

Структупа таблицы следующая:

CREATE TABLE music (
id_music int(11) NOT NULL auto_increment,
name_groups text NOT NULL,
name_trek text NOT NULL,
time_trek time NOT NULL default '00:00:00',
bitrate_trek tinytext NOT NULL,
size_trek tinytext NOT NULL,
clicks int(5) NOT NULL default '0',
url_trek text NOT NULL,
PRIMARY KEY (id_music)
) TYPE=MyISAM AUTO_INCREMENT=3;

INSERT INTO 'music' VALUES (1, 'Evanescence', 'Going Under', '00:03:34', '320', '8,59', 0, 'http://yyy.ru/mp3/evanescence/going_under.mp3');
INSERT INTO 'music' VALUES (2, 'Evanescence', 'Bring Me To Life', '00:03:56', '320', '9,47', 0, 'http://yyy.ru/mp3/evanescence/bring_me_to_life.mp3');

   
Rambler's Top100
вверх

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