Як створити гумове меню?

Огляд тем по налаштуванню Joomla 1.5

Re: як створити гумове меню?)))

Повідомлення Hijacker » 16 березня 2010, 14:45

ftp://.../www/сайт/templates/назва шаблону/html/mod_mainmenu/default.php

Код: Виділити все
<?php

// no direct access
defined('_JEXEC') or die('Restricted access');


if ( ! defined('modMainMenuXMLCallbackDefined') )
{
function modMainMenuXMLCallback(&$node, $args)
{
   $user   = &JFactory::getUser();
   $menu   = &JSite::getMenu();
   $active   = $menu->getActive();
   $path   = isset($active) ? array_reverse($active->tree) : null;

   if (($args['end']) && ($node->attributes('level') >= $args['end']))
   {
      $children = $node->children();
      foreach ($node->children() as $child)
      {
         if ($child->name() == 'ul') {
            $node->removeChild($child);
         }
      }
   }

   if ($node->name() == 'ul') {
      foreach ($node->children() as $child)
      {
         if ($child->attributes('access') > $user->get('aid', 0)) {
            $node->removeChild($child);
         }
      }
   }

   if (($node->name() == 'li') && isset($node->ul)) {
      $node->addAttribute('class', 'parent');
   }

   if (isset($path) && (in_array($node->attributes('id'), $path) || in_array($node->attributes('rel'), $path)))
   {
      if ($node->attributes('class')) {
         $node->addAttribute('class', $node->attributes('class').' active');
      } else {
         $node->addAttribute('class', 'active');
      }
   }
   else
   {
      if (isset($args['children']) && !$args['children'])
      {
         $children = $node->children();
         foreach ($node->children() as $child)
         {
            if ($child->name() == 'ul') {
               $node->removeChild($child);
            }
         }
      }
   }

   if (($node->name() == 'li') && ($id = $node->attributes('id'))) {
      if ($node->attributes('class')) {
         $node->addAttribute('class', $node->attributes('class').' item'.$id);
      } else {
         $node->addAttribute('class', 'item'.$id);
      }
   }

   if (isset($path) && $node->attributes('id') == $path[0]) {
      $node->addAttribute('id', 'current');
   } else {
      $node->removeAttribute('id');
   }
   $node->removeAttribute('rel');
   $node->removeAttribute('level');
   $node->removeAttribute('access');
}
   define('modMainMenuXMLCallbackDefined', true);
}

modMainMenuHelper::render($params, 'modMainMenuXMLCallback');
   $menuid = "menu";
   $total_menu_width = 1000;
   $padding_sum = 14;
   if ($params->get('tag_id') == $menuid) {
      $items   = &JSite::getMenu();
      $rows = $items->getItems('menutype', $params->get('menutype'));
      $k=0;
      for ($i=0; $i<count($rows ); $i++) {
         if ($rows[$i]->sublevel == 0 ) {
            $k++;
         }
      }
      ?>
      <style>
         #<?php echo $menuid; ?> a {
            display: block;
            width:<?php echo intval( $total_menu_width/$k )-$padding_sum?>px;
         }
      </style>
      <?php
         
   }

не допомогло(((
Аватар користувача
Hijacker
Користувач
Користувач
 
Повідомлення: 34
З нами з: 06 березня 2010, 00:25
Репутація: 0

google adsense
 

Re: як створити гумове меню?)))

Повідомлення gruz » 16 березня 2010, 14:47

Давай доступ до сайту в приват - допоможе.

ТИ ТОЧНО В НАЛАШТУВАННЯ МОДУЛЯ ПОТРІБНИЙ ID ВКАЗАВ???
Аватар користувача
gruz
Користувач
Користувач
 
Повідомлення: 584
З нами з: 19 червня 2008, 17:09
Звідки: Прип'ять
Репутація: 1

Re: як створити гумове меню?)))

Повідомлення Hijacker » 16 березня 2010, 15:11

Точно... Я забув в параметрах вказати ІД))))) (ну що сказати, ума нема- строй дома =) ).
Ще один бок був, но я справив, ти не врахував бордери.

ДУЖЕ ДЯКУЮ!!!!!!!! Вважаю потрібно написати цей метод в "Важливо" на форумі. Подібних способів, а тим паче робочих, не бічив.
Аватар користувача
Hijacker
Користувач
Користувач
 
Повідомлення: 34
З нами з: 06 березня 2010, 00:25
Репутація: 0

Re: як створити гумове меню?)))

Повідомлення gruz » 16 березня 2010, 15:17

Ну то обкатай, зроби щоби стилі прописувались у head, як я потім додавав, і видай результуюче рішення. Перший пост редагуй, змінюй тему, приклеюй файл і докладний опис. І буде тобі щастя.
Аватар користувача
gruz
Користувач
Користувач
 
Повідомлення: 584
З нами з: 19 червня 2008, 17:09
Звідки: Прип'ять
Репутація: 1

Re: як створити гумове меню?)))

Повідомлення Hijacker » 16 березня 2010, 15:39

Код: Виділити все
            $document = & JFactory::getDocument();
            $document->addStyleDeclaration($_css);


а куди ж це вставляти??? в кінець файла?
Аватар користувача
Hijacker
Користувач
Користувач
 
Повідомлення: 34
З нами з: 06 березня 2010, 00:25
Репутація: 0

Re: як створити гумове меню?)))

Повідомлення gruz » 16 березня 2010, 15:41

Модифікувати код. Замість того, щоби виводити в потік ( в документ через echo ) стиль, через от ту конструкцію додати його в head документа. Я ж пояснив. Ти спробуй, де обламаєшся, спитай. Тільки конкретно.
Аватар користувача
gruz
Користувач
Користувач
 
Повідомлення: 584
З нами з: 19 червня 2008, 17:09
Звідки: Прип'ять
Репутація: 1

Re: як створити гумове меню?)))

Повідомлення Hijacker » 16 березня 2010, 21:04

Ок... Куди конкретно вставлять ті строки? Модифікувати можна по різному ж ....
Аватар користувача
Hijacker
Користувач
Користувач
 
Повідомлення: 34
З нами з: 06 березня 2010, 00:25
Репутація: 0

Re: як створити гумове меню?)))

Повідомлення gruz » 16 березня 2010, 21:08

Код: Виділити все
       $menuid = "menu1";
       $total_menu_width = 1000;
            $padding_sum = 14;
       if ($params->get('tag_id') == $menuid) {
          $items   = &JSite::getMenu();
          $rows = $items->getItems('menutype', $params->get('menutype'));
          $k=0;
          for ($i=0; $i<count($rows ); $i++) {
             if ($rows[$i]->sublevel == 0 ) {
                $k++;
             }
          }
$_css ="\n#".$menuid." a {
                display:block;
                width:".(intval( $total_menu_width/$k )-$padding_sum)."px;
             }";

            $document = & JFactory::getDocument();
            $document->addStyleDeclaration($_css);             
       }


Приблизно так. Писав тут, та що синтаксичну правильність коду перевір в процесі виконання.
Аватар користувача
gruz
Користувач
Користувач
 
Повідомлення: 584
З нами з: 19 червня 2008, 17:09
Звідки: Прип'ять
Репутація: 1

Re: як створити гумове меню?)))

Повідомлення Hijacker » 16 березня 2010, 23:01

Зробив - працює))))... Дякую)))
Аватар користувача
Hijacker
Користувач
Користувач
 
Повідомлення: 34
З нами з: 06 березня 2010, 00:25
Репутація: 0

Re: як створити гумове меню?)))

Повідомлення gruz » 16 березня 2010, 23:05

Дякую забагато. Але от якщо іншим людям історію в картинках напишеш - це буде як раз те саме.
Аватар користувача
gruz
Користувач
Користувач
 
Повідомлення: 584
З нами з: 19 червня 2008, 17:09
Звідки: Прип'ять
Репутація: 1

Re: як створити гумове меню?)))

Повідомлення Hijacker » 16 березня 2010, 23:47

Для створення гумового меню (яке розтягуватиметься по всій ширині) необхідно:
1) В Адмінці створити меню з звичайним списковим типом (не Legacy).
2) В параметрах цього модулю (Расширения - Менеджер модулей - обрати головне меню - Расширеные параметры - ID меню) вказати свій Ідентифікатор, наприклад menu1.
3) В CSS вашого шаблону необхідно прописати
Код: Виділити все
#menu1 li{
   display: block;
   float: left;
}

4) Завантажте та відкрийте файл ...сайт/modules/mod_mainmenu/tmpl/default.php на компьютері, та змініть його зміст на
Код: Виділити все
<?php

// no direct access
defined('_JEXEC') or die('Restricted access');


if ( ! defined('modMainMenuXMLCallbackDefined') )
{
function modMainMenuXMLCallback(&$node, $args)
{
   $user   = &JFactory::getUser();
   $menu   = &JSite::getMenu();
   $active   = $menu->getActive();
   $path   = isset($active) ? array_reverse($active->tree) : null;

   if (($args['end']) && ($node->attributes('level') >= $args['end']))
   {
      $children = $node->children();
      foreach ($node->children() as $child)
      {
         if ($child->name() == 'ul') {
            $node->removeChild($child);
         }
      }
   }

   if ($node->name() == 'ul') {
      foreach ($node->children() as $child)
      {
         if ($child->attributes('access') > $user->get('aid', 0)) {
            $node->removeChild($child);
         }
      }
   }

   if (($node->name() == 'li') && isset($node->ul)) {
      $node->addAttribute('class', 'parent');
   }

   if (isset($path) && (in_array($node->attributes('id'), $path) || in_array($node->attributes('rel'), $path)))
   {
      if ($node->attributes('class')) {
         $node->addAttribute('class', $node->attributes('class').' active');
      } else {
         $node->addAttribute('class', 'active');
      }
   }
   else
   {
      if (isset($args['children']) && !$args['children'])
      {
         $children = $node->children();
         foreach ($node->children() as $child)
         {
            if ($child->name() == 'ul') {
               $node->removeChild($child);
            }
         }
      }
   }

   if (($node->name() == 'li') && ($id = $node->attributes('id'))) {
      if ($node->attributes('class')) {
         $node->addAttribute('class', $node->attributes('class').' item'.$id);
      } else {
         $node->addAttribute('class', 'item'.$id);
      }
   }

   if (isset($path) && $node->attributes('id') == $path[0]) {
      $node->addAttribute('id', 'current');
   } else {
      $node->removeAttribute('id');
   }
   $node->removeAttribute('rel');
   $node->removeAttribute('level');
   $node->removeAttribute('access');
}
   define('modMainMenuXMLCallbackDefined', true);
}

modMainMenuHelper::render($params, 'modMainMenuXMLCallback');
   
       $menuid = "menu1";
       $total_menu_width = ***;                         /* ширина меню */
       $padding_sum = **;                                 /* сума бокових падінгів в тезі <li> */
       $border_sum = **;                                   /* сума бокових бордерів в тезі <li> */
       if ($params->get('tag_id') == $menuid) {
          $items   = &JSite::getMenu();
          $rows = $items->getItems('menutype', $params->get('menutype'));
          $k=0;
          for ($i=0; $i<count($rows ); $i++) {
             if ($rows[$i]->sublevel == 0 ) {
                $k++;
             }
          }
$_css ="\n#".$menuid." a {
                display: block;
                width:".(intval($total_menu_width/$k )-$padding_sum-$border_sum)."px;
             }";

            $document = & JFactory::getDocument();
            $document->addStyleDeclaration($_css);             
       }

або ж просто створіть текстовий файл з кодуванням UTF-8, впишіть вищевказаний код і назвіть default.php.
Не забудьте змінити три прокоментовані параметри, вставивши свії числа!!!
5) Створити на сайті ...сайт/templates/назва шаблону/html/mod_mainmenu/, і завантажити туди наш створений файл default.php.
Востаннє редагувалось Hijacker в 17 березня 2010, 00:08, всього редагувалось 2 разів.
Аватар користувача
Hijacker
Користувач
Користувач
 
Повідомлення: 34
З нами з: 06 березня 2010, 00:25
Репутація: 0

Re: як створити гумове меню?)))

Повідомлення gruz » 16 березня 2010, 23:48

Код: Виділити все
#menu1 li{
   display: inline-block;
}


Я вже казав, це для IE не спрацює!!!


4) Завантажте та відкрийте файл ...сайт/modules/mod_mainmenu/tmpl/default.php на компьютері, та змініть його зміст на


Не треба і не можна його міняти!!! Саме в шаблон собі треба копіювати! Бо коли буде оновлення Joomla, це затреться! А в шаблоні - не затреться! Бо це шаблон по замовчанню! Вся система зроблена, щоби ти в ті файли не ліз. Для твоїх ігор є той файл у тебе в шаблоні.
Востаннє редагувалось gruz в 16 березня 2010, 23:51, всього редагувалось 1 раз.
Аватар користувача
gruz
Користувач
Користувач
 
Повідомлення: 584
З нами з: 19 червня 2008, 17:09
Звідки: Прип'ять
Репутація: 1

Re: як створити гумове меню?)))

Повідомлення Hijacker » 16 березня 2010, 23:57

Завантажте та відкрийте файл ... на компьютері, ключове слово НА КОМП*ЮТЕРІ

З*явилася проблема(((( при зміні на

Код: Виділити все
#menu1 li{
   display: inline;
}


всі елементі стали вертикальні((((((
Аватар користувача
Hijacker
Користувач
Користувач
 
Повідомлення: 34
З нами з: 06 березня 2010, 00:25
Репутація: 0

Re: як створити гумове меню?)))

Повідомлення gruz » 17 березня 2010, 00:00

А, не догледів. Сорі.

#menu li {display:block;float:left;}

Треба пробувати. Дай лінк, спробую.
Аватар користувача
gruz
Користувач
Користувач
 
Повідомлення: 584
З нами з: 19 червня 2008, 17:09
Звідки: Прип'ять
Репутація: 1

Re: як створити гумове меню?)))

Повідомлення Hijacker » 17 березня 2010, 00:05

Дякую - допомогло))) ...щоб не було путаниці, трохи перепишу пост.
Аватар користувача
Hijacker
Користувач
Користувач
 
Повідомлення: 34
З нами з: 06 березня 2010, 00:25
Репутація: 0

Re: як створити гумове меню?)))

Повідомлення gruz » 17 березня 2010, 00:08

То зміни пост на початоку теми. Щоби народ не читав дві сторінки. Скоро три.
Аватар користувача
gruz
Користувач
Користувач
 
Повідомлення: 584
З нами з: 19 червня 2008, 17:09
Звідки: Прип'ять
Репутація: 1

Re: як створити гумове меню?)))

Повідомлення Hijacker » 17 березня 2010, 00:10

зроблено!
Аватар користувача
Hijacker
Користувач
Користувач
 
Повідомлення: 34
З нами з: 06 березня 2010, 00:25
Репутація: 0

Re: як створити гумове меню?)))

Повідомлення gruz » 17 березня 2010, 00:25

1) В "Адмінці" створити меню з звичайним списковим типом (не Legacy).
2) В параметрах цього модулю (Расширения - Менеджер модулей - обрати головне меню - Расширеные параметры - ID меню) вказати свій Ідентифікатор, наприклад menu1.


Оце більш зрозуміло опиши, б.л.

Та тут:
Не забудьте змінити три прокоментовані параметри, вставивши свії числа!!!


Розкажи що за числа. Це тобі зрозуміло. про що ти пишеш. А більшість прост оне дожене, про що йдеться.

Ясно, що такі докладні розписи вимагаються трошки часу і сил. Але інакше спільнота не буде спільнотою.

Можеш оздобити скрін-шотами, що ти робиш, буде ще краще.
Аватар користувача
gruz
Користувач
Користувач
 
Повідомлення: 584
З нами з: 19 червня 2008, 17:09
Звідки: Прип'ять
Репутація: 1

Re: як створити гумове меню?)))

Повідомлення Hijacker » 17 березня 2010, 08:43

Навряд чи скріни потрібні, думаю, якщо людина на рівні, щоб було необхідно робити таке меню, то інструкції вистачить. До речі, думаю все добре описав, зацініть!
Аватар користувача
Hijacker
Користувач
Користувач
 
Повідомлення: 34
З нами з: 06 березня 2010, 00:25
Репутація: 0

Re: як створити гумове меню?)))

Повідомлення gruz » 17 березня 2010, 09:42

Код: Виділити все
4) Завантажте та відкрийте файл ...сайт/modules/mod_mainmenu/tmpl/default.php на компьютері, та змініть його зміст на


Формулювання розпливчасте. Я сайт і так у себе на комп'ютері роблю. А викладаю вже все готове на сервер.

Код: Виділити все
$total_menu_width = ***;
$padding_sum = **;
$border_sum = **;


Ну так все очевидно з першого разу, що аж капець. Себе на місце іншої людини постав. Ти би сам пару днів тому з даного опису зрозумів, що і до чого?
Аватар користувача
gruz
Користувач
Користувач
 
Повідомлення: 584
З нами з: 19 червня 2008, 17:09
Звідки: Прип'ять
Репутація: 1

google adsense
 

Поперед.Далі

Повернутись до Налаштування та робота з Joomla! 1.5

Хто зараз онлайн

Зараз переглядають цей форум: Немає зареєстрованих користувачів і 0 гостей

cron