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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Как реализовать меню на PHP

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
zerosoul
Отправлено: 07 Августа, 2012 - 11:34:38
Post Id



Новичок


Покинул форум
Сообщений всего: 32
Дата рег-ции: Май 2012  


Помог: 0 раз(а)




Не как не могу понять как можно реализовать меню, как на этом сайте 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. ?>
 
 Top
LIME
Отправлено: 07 Августа, 2012 - 11:42:52
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




 
 Top
Yurka
Отправлено: 07 Августа, 2012 - 11:46:32
Post Id


Новичок


Покинул форум
Сообщений всего: 62
Дата рег-ции: Авг. 2012  


Помог: 4 раз(а)




На сайте который ты указал скорее всего меню формируется по средствам url.
Проверяем если url в адресной строке = какому-то url из левого меню то этот пункт меню активный и нужно показывать подпункты меню.

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



Новичок


Покинул форум
Сообщений всего: 32
Дата рег-ции: Май 2012  


Помог: 0 раз(а)






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

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


Вы наверно плохо посмотрели код!, но все о чем вы написали у меня есть, а вот реализация подкачиваетУлыбка)
 
 Top
LIME
Отправлено: 07 Августа, 2012 - 12:09:42
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




тогда я пойду попрошу кого-нибудь самолет на дровах
 
 Top
DelphinPRO
Отправлено: 07 Августа, 2012 - 13:06:12
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




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


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
caballero
Отправлено: 07 Августа, 2012 - 14:13:18
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Цитата:
но я прошу реализации меню на PHP

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


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
zerosoul
Отправлено: 07 Августа, 2012 - 14:13:53
Post Id



Новичок


Покинул форум
Сообщений всего: 32
Дата рег-ции: Май 2012  


Помог: 0 раз(а)




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


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

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


Наверно не правильно выразился, тогда это навигации меню
 
 Top
caballero
Отправлено: 07 Августа, 2012 - 14:36:02
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Цитата:
Наверно не правильно выразился, тогда это навигации меню

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

Просто напиши что тебе надо- а на чем и как оно будет сделано уже посоветуют.


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
DelphinPRO
Отправлено: 07 Августа, 2012 - 14:49:55
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




Древовидная структура в реляционной БД реализуется с помощью двух полей в таблице - идентификатор элемента и идентификатор родителя.
При этом принимается соглашение, что если идентификатор родителя равен нулю, значит это элемент верхнего уровня.

Делаете примерно такую таблицу
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?forum=79&topic=4774&postid=1331726302#1331726302

(Отредактировано автором: 07 Августа, 2012 - 14:50:42)



-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
zerosoul
Отправлено: 07 Августа, 2012 - 14:52:59
Post Id



Новичок


Покинул форум
Сообщений всего: 32
Дата рег-ции: Май 2012  


Помог: 0 раз(а)




Посмотрите пожалуйста в начале темы, просто не хочу повторять адрес сайта, а то будет похоже, что ссылку просто пиарю Улыбка) левое боковое меню,
И там ниже даже некоторый код набросал, но думаю что сейчас мне его проще реализовать без js
(Добавление)
Цитата:
DelphinPRO
Я не могу наверно нормально сформулировать вопрос, что меня некто не понимает)), что вы написали да это тоже одно из решений, я это сделал через массивы, я хочу сказать что меня немного другое интересует:

Все что вы предложили, или массивами +++ для меня главное и не понятное в реализации, чтобы когда я нажимаю на пунк меню появлялась эта страница+ выпадало подменю, а если наживаю на другой пункт переход идет на новый + открывается подменю
 
 Top
LIME
Отправлено: 07 Августа, 2012 - 18:20:42
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




бесполезняк
zerosoul рано...еще подучите матчасть...не дошли вы еще даже до простых вещей...чудес нет
пс: html+css это обязательно знать еще до того как взяться за пхп
(Добавление)
не вы первый и не вы я надеюсь последний))
(Добавление)
кстати ваш пример ужасен
и так делать не следует
(Добавление)
я приведенный сайт имею ввиду
 
 Top
DelphinPRO
Отправлено: 07 Августа, 2012 - 20:01:28
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




реализация может быть разной. Я предпочитаю к каждому конкретному пункту меню привязывать определенную страницу сайта. Это может быть статья, список статей, кантакты и любая другая страница, которую можно однозначно идетифицировать в системе по идентификатору или идентификаторам.
Соответственно при разборе URL, когда мы определяем что хочет увидеть пользователь, мы исходя из полученных данных тащим из БД идентификатор пункта меню, который следует отметить специальным классом "active". А показать подпункты, зная текущий пункт меню - дело техники.


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
zerosoul
Отправлено: 08 Августа, 2012 - 09:11:12
Post Id



Новичок


Покинул форум
Сообщений всего: 32
Дата рег-ции: Май 2012  


Помог: 0 раз(а)




LIME пишет:

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


Поясните пожалуйста, что вы имеете ввиду
 
 Top
Stivir
Отправлено: 08 Августа, 2012 - 10:29:40
Post Id


Частый гость


Покинул форум
Сообщений всего: 128
Дата рег-ции: Май 2012  


Помог: 2 раз(а)




zerosoul, у меня есть примерно такое меню, только попроще. При нажатии на родительскую категорию под ней не вываливается список подкатегорий, а меняется контент в правой части страницы, примерно как в техно-мед. При нажатии на одну из подкатегорий в содержимом появляются подподкатегории, если они есть в базе.
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB