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.SU

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


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

> Без описания
Eihwaz
Отправлено: 26 Апреля, 2008 - 17:00:09
Post Id


Гость


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


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




Побочный продукт попыток написать класс для breadcrumbs (хлебных крошек, истории переходов - как угодно)
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. class navigation
  4. {
  5.     private $_navigation;
  6.     public  $_delimiter;
  7.  
  8.     public function new_item($text, $class, $link = null, $target = 'self')
  9.     {
  10.     $i = sizeof($this->_navigation);
  11.     $this->_navigation[$i]['text']    = trim($text);
  12.     $this->_navigation[$i]['class']   = trim($class);
  13.     $this->_navigation[$i]['link']    = trim($link);
  14.     $this->_navigation[$i]['target']  = trim($target);
  15.     }
  16.  
  17.     public function show_navigation()
  18.     {
  19.         $menu_items = '';
  20.         for ($i=0; $i<sizeof($this->_navigation); $i++)
  21.         {
  22.             if ($this->_navigation[$i]['link'])
  23.             {
  24.                 $menu_items .= '<a class="' . $this->_navigation[$i]['class']  . '" href="'
  25.                                             . $this->_navigation[$i]['link']    . '" target="_'
  26.                                             . $this->_navigation[$i]['target'] . '">'
  27.                                             . $this->_navigation[$i]['text']  . '</a>';
  28.             }
  29.             else
  30.             {
  31.                 $menu_items .= '<span class="' . $this->_navigation[$i]['class'] . '">'
  32.                                                . $this->_navigation[$i]['text'] . '</span>';
  33.             }
  34.             $menu_items .= $this->_delimiter;
  35.         }
  36.         return $menu_items;
  37.     }
  38. }
  39. ?>
  40.  

Пользоваться довольно просто:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $navigation = new navigation();
  4. $navigation->_delimiter = '<br>'; // Устанавливаем разделитель для пунктов меню.
  5. $navigation->new_item('Статьи', 'admin_text'); // Название раздела меню (отображается текстом, не ссылкой) и класс для текста (<span class=" ">)
  6. $navigation->new_item('Добавить статью', 'admin_link', 'index.php?action=add_article');
  7. ?>
  8.  

В $navigation->new_item() можно указать еще target для ссылки, т.е., как будет открываться. По умолчанию стоит 'self' - ссылка будет открываться в том же окне.
Приведенный для примера код сгенерирует вертикальное меню:
Пункт 1
Пункт 2
Пункт 3

Если указать, например, $navigation->_delimiter = ' | ';, то меню будет выглядеть так:
Пункт 1 | Пункт 2 | Пункт 3 |
 
 Top
-SCHATTEN-
Отправлено: 28 Апреля, 2008 - 11:43:59
Post Id



Пользователь


Покинул форум
Сообщений всего: 615
Дата рег-ции: Июль 2006  
Откуда: Оттуда !


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




Это не ошибка, но всё-же...
PHP:
скопировать код в буфер обмена
  1. $navigation->_delimiter = ' | ';

Нежелательно использовать если используешь ООП, лучше сделать функцию установки и получения. (Геттер и сеттер)
PHP:
скопировать код в буфер обмена
  1.  
  2. public function setDelimiter( $delim ) {
  3.     $this->_delimiter = $delim;
  4. }
  5.  
  6. public function getDelimiter() {
  7.     return $this->_delimiter;
  8. }
  9.  

(Добавление)
Опять же таких вещей как $class может и небыть.
Как быть с такими вещами как onClick и т.д. их тоже надо вписывать.
 
 Top
Eihwaz
Отправлено: 28 Апреля, 2008 - 14:08:33
Post Id


Гость


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


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




-SCHATTEN- - спасибо, я расту над собой Улыбка :
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. class navigation {
  4.     private $_navigation;
  5.     private $_delimiter;
  6.    
  7.     public function set_delimiter($delimiter) {
  8.         $this->_delimiter = htmlspecialchars($delimiter, ENT_QUOTES);
  9.     }
  10.    
  11.     private function get_delimiter() {
  12.         return $this->_delimiter . "\n";
  13.     }
  14.  
  15.     public function new_item($text, $link = null, $class = null, $target = null, $on_click = null) {
  16.     $i = sizeof($this->_navigation);
  17.     $this->_navigation[$i]['text']     = trim($text);
  18.     $this->_navigation[$i]['class']    = trim($class);
  19.     $this->_navigation[$i]['link']     = trim($link);
  20.     $this->_navigation[$i]['target']   = trim($target);
  21.     $this->_navigation[$i]['on_click'] = trim($on_click);
  22.     }
  23.  
  24.     public function show_navigation() {
  25.         $menu_items = '';
  26.         for ($i=0; $i<sizeof($this->_navigation); $i++) {
  27.             $text    = $this->_navigation[$i]['text'];
  28.             $link    = (isset($this->_navigation[$i]['link'])) ? $this->_navigation[$i]['link'] : $link = null;
  29.             $class   = (isset($this->_navigation[$i]['class'])) ? $this->_navigation[$i]['class'] : $class = null;
  30.             $target  = $this->_navigation[$i]['target'];
  31.             $onclick = (isset($this->_navigation[$i]['on_click'])) ? $this->_navigation[$i]['on_click'] : $onclick = null;
  32.             if ($link) {
  33.                 $menu_items .= '<a ';
  34.                 $menu_items .= ($class) ? ' class="' . $class  . '"' : null;
  35.                 $menu_items .= 'href="'. $link   . '" target="_' . $target . '"';
  36.                 $menu_items .= ($onclick) ? ' onClick="' . $onclick  . '"' : null;
  37.                 $menu_items .= '>'. $text   . '</a>';
  38.             } else {
  39.                 $menu_items .= '<span';
  40.                 $menu_items .= ($class) ? ' class="' . $class  . '"' : null;
  41.                 $menu_items .= ($onclick) ? ' onClick="' . $onclick  . '"' : null;
  42.                 $menu_items .= '>' . $text . '</span>';
  43.             }
  44.             $menu_items .= $this->get_delimiter();
  45.         }
  46.         return $menu_items;
  47.     }
  48. }
  49. ?>
  50.  

Пример использования:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $navigation = new navigation();
  4. $navigation->set_delimiter(' > ');
  5. $navigation->new_item('Статьи', null, null, null, 'this.style.color = \'green\'');
  6. $navigation->new_item('Добавить статью', 'index.php', null, 'parent');
  7. echo $navigation->show_navigation();
  8. ?>
  9.  

(Отредактировано автором: 28 Апреля, 2008 - 16:05:59)

 
 Top
SION-ZENIT
Отправлено: 28 Апреля, 2008 - 15:18:25
Post Id


Частый гость


Покинул форум
Сообщений всего: 148
Дата рег-ции: Июль 2007  
Откуда: SPb


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




Если ты сделал set_delimiter и get_delimiter то $_delimiter можно сделать private
 
 Top
Eihwaz
Отправлено: 28 Апреля, 2008 - 16:06:21
Post Id


Гость


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


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




SION-ZENIT
Верно, спасибо, не заметил Улыбка
 
 Top
-SCHATTEN-
Отправлено: 29 Апреля, 2008 - 07:12:01
Post Id



Пользователь


Покинул форум
Сообщений всего: 615
Дата рег-ции: Июль 2006  
Откуда: Оттуда !


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




Eihwaz
Кроме onclick там ещё много подобных вещей, поэтому лучше просто сделай чтобы последняя переменная вставляла произвольный код.
 
 Top
Eihwaz
Отправлено: 29 Апреля, 2008 - 14:05:56
Post Id


Гость


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


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




Тогда имеет смысл в параметрах функции добавления ссылки оставить только текст ссылки и url, а третий параметр содержит уже класс, таргет и т.п., короче, вот так:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. class navigation {
  4.     private $_navigation;
  5.     private $_delimiter;
  6.    
  7.     public function set_delimiter($delimiter) {
  8.         $this->_delimiter = htmlspecialchars($delimiter, ENT_QUOTES);
  9.     }
  10.    
  11.     private function get_delimiter() {
  12.         return $this->_delimiter . "\n";
  13.     }
  14.  
  15.     public function new_item($text, $link = null, $additional = null) {
  16.     $i = sizeof($this->_navigation);
  17.     $this->_navigation[$i]['text']  = trim($text);
  18.     $this->_navigation[$i]['link']  = trim($link);
  19.     $this->_navigation[$i]['add']  = trim($additional);
  20.     }
  21.  
  22.     public function show_navigation() {
  23.         $menu_items = '';
  24.         for ($i=0; $i<sizeof($this->_navigation); $i++) {
  25.             $text    = $this->_navigation[$i]['text'];
  26.             $link     = (isset($this->_navigation[$i]['link'])) ? $this->_navigation[$i]['link'] : $link = null;
  27.             $add    = (isset($this->_navigation[$i]['add'])) ? $this->_navigation[$i]['add'] : $add = null;
  28.             if ($link) {
  29.                 $menu_items .= '<a href="'. $link   . '"';
  30.                 $menu_items .= ($add) ? ' ' . $add : null;
  31.                 $menu_items .= '>'. $text   . '</a>';
  32.             } else {
  33.                 $menu_items .= '<span';
  34.                 $menu_items .= ($add) ? ' ' . $add : null;
  35.                 $menu_items .= '>' . $text . '</span>';
  36.             }
  37.             $menu_items .= $this->get_delimiter();
  38.         }
  39.         return $menu_items;
  40.     }
  41. }
  42. ?>
  43.  

(Отредактировано автором: 30 Апреля, 2008 - 09:22:07)

 
 Top
-SCHATTEN-
Отправлено: 30 Апреля, 2008 - 07:25:45
Post Id



Пользователь


Покинул форум
Сообщений всего: 615
Дата рег-ции: Июль 2006  
Откуда: Оттуда !


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




$menu_items .= ($add) ? ' ' . $class : null;
А где переменная $class
 
 Top
Eihwaz
Отправлено: 30 Апреля, 2008 - 09:26:18
Post Id


Гость


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


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




-SCHATTEN- Исправлено Улыбка
 
 Top
-SCHATTEN-
Отправлено: 06 Мая, 2008 - 08:41:40
Post Id



Пользователь


Покинул форум
Сообщений всего: 615
Дата рег-ции: Июль 2006  
Откуда: Оттуда !


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




Ну вроде норм =)
 
 Top
frol
Отправлено: 02 Февраля, 2009 - 05:00:03
Post Id


Новичок


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


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




мне нравится, молодец! Радость
 
 Top
Stierus Супермодератор
Отправлено: 02 Февраля, 2009 - 11:56:21
Post Id



Рекордсмен по количеству сообщений за 7 дней


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


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




Я бы добавил метод

PHP:
скопировать код в буфер обмена
  1.     public function fill_menu($data = array()) {
  2.             if(!is_array($data) or $data == array()){
  3.                         return false;
  4.                 }
  5.                 $i = count($this->_navigation);
  6.                 foreach ($data as $nav){
  7.                         /*
  8.                         Я бы сделал более жёсткую проветку, но оставляю как у вас в классе
  9.                         */
  10.                         $this->_navigation[$i]['text']  = trim($nav['text']);
  11.                     $this->_navigation[$i]['link']  = trim($nav['link']);
  12.                     $this->_navigation[$i]['add']  = trim($nav['additional']);
  13.                         ++$i;
  14.                 }
  15.                 return true;
  16.     }

(Отредактировано автором: 02 Февраля, 2009 - 11:56:53)

 
My status
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Пользовательские функции »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB