Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Как реализовать меню на PHP
Форумы портала PHP.SU » » Вопросы новичков » Как реализовать меню на PHP

Страниц (2): [1] 2 »
 

1. zerosoul - 07 Августа, 2012 - 11:34:38 - перейти к сообщению
Не как не могу понять как можно реализовать меню, как на этом сайте tehno-med.ru, т.е при нажатие на категорию вылезают под категории и переход идет на эту страницу.

Понимаю что должна быть проверка если я нажал на эту страницу, то открывается подкатегория и загружаеться эта страница, а если на другую то тоже самое с другой,

т.е если ссылка категории =basename($_SERVER['PHP_SELF']); то загружается эта страница и открываются подкатегория.

Но этот код нечего не выдает!, может мне избавиться от ява скрипта и сделать обычный

Самое сложно не могу понять как реализовать ОТКРЫТИЕ меню и переход подскажите

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $menu = array(
  3.     array(
  4.         'sub_menu_1',
  5.                 'Ремонт компьютеров',
  6.         'remont.php',
  7.         array(array('Жесткие диски', 'hard.php'),array('Видеокарты', 'video.php'),array('Блоки питания', 'blok.php'))
  8.     ),
  9.     array(
  10.         'sub_menu_2',
  11.                 'Установка Windows',
  12.         'ystanowka.php',
  13.         array(array('Win7', 'Win7.php'),array('WinXP', 'WinXP.php'),array('WinVista', 'WinVista.php'))
  14.     ),
  15. );
  16.  
  17.  
  18.  
  19.    function LeftMenu($menu){
  20.  
  21.         $actualPageName = basename($_SERVER['PHP_SELF']);
  22.      /*$actualPage = $_SERVER['PHP_SELF'];
  23.       //$actualPath = $_SERVER['REQUEST_URI'];
  24.  
  25.       //$actualPageName = ($actualPage);*/
  26.  
  27.       $actMenu = '';
  28.       foreach ($menu as $m) {
  29.           if ($m[2] == $actualPageName) $actMenu = $m[1];
  30.           if (isset($m[3])){
  31.              foreach ($m[3] as $title) {
  32.                   if ($title[1] == $actualPageName) $actMenu = $title[0];
  33.              }
  34.           }
  35.        }
  36.  
  37.  
  38.        // Now display the menu
  39.        foreach ($menu as $m) {
  40.                 if ($actualPageName == $m[2])        
  41.                 echo "<li><a href=\"$m[2]\" onclick=\"openMenu('$m[0]');return(false)\">", $m[1],'</a>';
  42.             echo "<ul id=\"$m[0]\">";
  43.        
  44.          
  45.  
  46.      
  47.  
  48.          if ( ($actMenu == $m[1]) && (isset($m[3])) ){
  49.              foreach ($m[3] as $title) {
  50.               if ($actualPageName == $title[1])
  51.                           echo "<li><a href=\"$title[1]\">", $title[0], '</a></li>';
  52.                  
  53.              }
  54.                          echo '</ul></li>';
  55.           }
  56.      }
  57. }
  58.  
  59. echo  LeftMenu($menu);
  60. ?>
2. LIME - 07 Августа, 2012 - 11:42:52 - перейти к сообщению
3. Yurka - 07 Августа, 2012 - 11:46:32 - перейти к сообщению
На сайте который ты указал скорее всего меню формируется по средствам url.
Проверяем если url в адресной строке = какому-то url из левого меню то этот пункт меню активный и нужно показывать подпункты меню.

В твоeм массиве $menu нужно ещё одно поле в котором будет храниться url.
4. zerosoul - 07 Августа, 2012 - 12:06:57 - перейти к сообщению


Спасибо!)), но я прошу реализации меню на PHP
(Добавление)
Yurka пишет:
На сайте который ты указал скорее всего меню формируется по средствам url.
Проверяем если url в адресной строке = какому-то url из левого меню то этот пункт меню активный и нужно показывать подпункты меню.

В твоeм массиве $menu нужно ещё одно поле в котором будет храниться url.


Вы наверно плохо посмотрели код!, но все о чем вы написали у меня есть, а вот реализация подкачиваетУлыбка)
5. LIME - 07 Августа, 2012 - 12:09:42 - перейти к сообщению
тогда я пойду попрошу кого-нибудь самолет на дровах
6. DelphinPRO - 07 Августа, 2012 - 13:06:12 - перейти к сообщению
zerosoul пишет:
но я прошу реализации меню на PHP
что за бред..
любое меню на любом сайте реализуется средствами html + css, иногда с примесью js. В редких случаях - это flash.
на сервере всего лишь формируется html разметка нужной структуры. Чаще всего это простые вложенные UL-списки
7. caballero - 07 Августа, 2012 - 14:13:18 - перейти к сообщению
Цитата:
но я прошу реализации меню на PHP

Вася, PHP - серверный скрипт - на нем не может быть меню.
8. zerosoul - 07 Августа, 2012 - 14:13:53 - перейти к сообщению
DelphinPRO пишет:
zerosoul пишет:
но я прошу реализации меню на PHP
что за бред..
любое меню на любом сайте реализуется средствами html + css, иногда с примесью js. В редких случаях - это flash.
на сервере всего лишь формируется html разметка нужной структуры. Чаще всего это простые вложенные UL-списки


А как же древовидное меню? и вывод меню с помощью массивов! Поясните пожалуйста я просто только учусь и не как не могу понять для чего тогда в меню используют циклы, зачем создают под меню отдельные таблицы в базе данных с родителями и детьми.
(Добавление)
caballero пишет:
Цитата:
но я прошу реализации меню на PHP

Вася, PHP - серверный скрипт - на нем не может быть меню.


Наверно не правильно выразился, тогда это навигации меню
9. caballero - 07 Августа, 2012 - 14:36:02 - перейти к сообщению
Цитата:
Наверно не правильно выразился, тогда это навигации меню

Наверно надо приметрно так - динамическое меню, которое строится в зависимости
от каких то данных или условий. HTML для этого меню скорее всего будет генерится на PHP. Но это не единственное решение. Строить меню может и яваскрипт по какому то массиву сформированому на сервере.

Просто напиши что тебе надо- а на чем и как оно будет сделано уже посоветуют.
10. DelphinPRO - 07 Августа, 2012 - 14:49:55 - перейти к сообщению
Древовидная структура в реляционной БД реализуется с помощью двух полей в таблице - идентификатор элемента и идентификатор родителя.
При этом принимается соглашение, что если идентификатор родителя равен нулю, значит это элемент верхнего уровня.

Делаете примерно такую таблицу
CODE (htmlphp):
скопировать код в буфер обмена
  1. ID | ID_PARENT | ID_MENU | TITLE | LINK ...
ID - идентификатор пункта меню, он же первичный ключ таблицы.
ID_PARENT - идентификатор родителя.
ID_MENU - идентификатор меню. Используется, если на сайте планируется несколько независимых меню. Список меню хранится в отдельной таблице.
TITLE, LINK - заголовок, ссылка, и другие, нужные вам поля.

Далее есть два варианта, плохой и нормальный.
1. Первым запросом дергаем элементы первого уровня
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM menuitems WHERE ID_MENU = 1 AND ID_PARENT = 0
потом рекурсивной функцией пробегаемся по вытащенным ПМ (пунктам меню) и выдергиваем дочерние.
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM menuitems WHERE ID_MENU = 1 AND ID_PARENT = '$menuitem->id'
Минусы такого подхода очевидны - туева хуча запросов к БД.

2. Одним запросом дергаем все, что относится к данному меню
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM menuitems WHERE ID_MENU = 1
Потом на стороне PHP формируем из полученного массива данных древовидную структуру либо в переменную, для передачи в шаблонизатор, либо сразу выводим в виде HTML

Примеры рекурсивных функций можно глянуть здесь http://forum.php.su/topic.php?fo...26302#1331726302
11. zerosoul - 07 Августа, 2012 - 14:52:59 - перейти к сообщению
Посмотрите пожалуйста в начале темы, просто не хочу повторять адрес сайта, а то будет похоже, что ссылку просто пиарю Улыбка) левое боковое меню,
И там ниже даже некоторый код набросал, но думаю что сейчас мне его проще реализовать без js
(Добавление)
Цитата:
DelphinPRO
Я не могу наверно нормально сформулировать вопрос, что меня некто не понимает)), что вы написали да это тоже одно из решений, я это сделал через массивы, я хочу сказать что меня немного другое интересует:

Все что вы предложили, или массивами +++ для меня главное и не понятное в реализации, чтобы когда я нажимаю на пунк меню появлялась эта страница+ выпадало подменю, а если наживаю на другой пункт переход идет на новый + открывается подменю
12. LIME - 07 Августа, 2012 - 18:20:42 - перейти к сообщению
бесполезняк
zerosoul рано...еще подучите матчасть...не дошли вы еще даже до простых вещей...чудес нет
пс: html+css это обязательно знать еще до того как взяться за пхп
(Добавление)
не вы первый и не вы я надеюсь последний))
(Добавление)
кстати ваш пример ужасен
и так делать не следует
(Добавление)
я приведенный сайт имею ввиду
13. DelphinPRO - 07 Августа, 2012 - 20:01:28 - перейти к сообщению
реализация может быть разной. Я предпочитаю к каждому конкретному пункту меню привязывать определенную страницу сайта. Это может быть статья, список статей, кантакты и любая другая страница, которую можно однозначно идетифицировать в системе по идентификатору или идентификаторам.
Соответственно при разборе URL, когда мы определяем что хочет увидеть пользователь, мы исходя из полученных данных тащим из БД идентификатор пункта меню, который следует отметить специальным классом "active". А показать подпункты, зная текущий пункт меню - дело техники.
14. zerosoul - 08 Августа, 2012 - 09:11:12 - перейти к сообщению
LIME пишет:

кстати ваш пример ужасен
и так делать не следует
я приведенный сайт имею ввиду


Поясните пожалуйста, что вы имеете ввиду
15. Stivir - 08 Августа, 2012 - 10:29:40 - перейти к сообщению
zerosoul, у меня есть примерно такое меню, только попроще. При нажатии на родительскую категорию под ней не вываливается список подкатегорий, а меняется контент в правой части страницы, примерно как в техно-мед. При нажатии на одну из подкатегорий в содержимом появляются подподкатегории, если они есть в базе.

 

Powered by ExBB FM 1.0 RC1