Форум Joomla! Україна
Як створити гумове меню? - Версія для друку.

+- Форум Joomla! Україна (https://joomla-ua.org/forum)
+-- Форум: Шаблони та дизайн, сайти на Joomla (https://joomla-ua.org/forum/forum-18.html)
+--- Форум: Шаблони для Joomla — дизайн, верстка, модифікації (https://joomla-ua.org/forum/forum-60.html)
+--- Тема: Як створити гумове меню? (/thread-769.html)

Сторінки: 1 2


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

Для створення гумового меню (яке розтягуватиметься по всій ширині) необхідно:
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.


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

Код:
#menu1 li{
   display: inline-block;
}

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


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

Не треба і не можна його міняти!!! Саме в шаблон собі треба копіювати! Бо коли буде оновлення джумли, це затреться! А в шаблоні - не затреться! Бо це шаблон по замовчанню! Вся система зроблена, щоби ти в ті файли не ліз. Для твоїх ігор є той файл у тебе в шаблоні.


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

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

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

Код:
#menu1 li{
   display: inline;
}

всі елементі стали вертикальні((((((


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

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

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

Треба пробувати. Дай лінк, спробую.


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

Дякую - допомогло))) ...щоб не було путаниці, трохи перепишу пост.


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

То зміни пост на початоку теми. Щоби народ не читав дві сторінки. Скоро три.


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

зроблено!


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

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

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

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

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

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

Можеш оздобити скрін-шотами, що ти робиш, буде ще краще.


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

Навряд чи скріни потрібні, думаю, якщо людина на рівні, щоб було необхідно робити таке меню, то інструкції вистачить. До речі, думаю все добре описав, зацініть!


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

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

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

Код:
$total_menu_width = ***;
$padding_sum = **;
$border_sum = **;

Ну так все очевидно з першого разу, що аж капець. Себе на місце іншої людини постав. Ти би сам пару днів тому з даного опису зрозумів, що і до чого?


Re: Як створити гумове меню? - Hijacker - 17.03.2010

а так?


Re: Як створити гумове меню? - gruz - 17.03.2010

Ладно, давай заліковку.


Re: Як створити гумове меню? - ceedee - 01.04.2010

Доброго дня! Дуже вдячний за цю тему, дуже допомогла. Може підкажете як зробити ще одну лінійку меню таким чином? Тобто зверху йде головне меню, розтягується чудово. А під ним якщо залогінитись йде user menu, намагаюсь зробити так щоб воно теж розтягувалось. Все прописав аналогічним чином тільки не знаю що робити з default.php? Дякую!


Re: Як створити гумове меню? - gruz - 01.04.2010

Робиш у usermenu інший ID, наприклад menu2
І код виправляєш приблизно так:

Код:
// В масиві $menuids зберігаються ID меню, для яких застосовується ця правка
       $menuids[] = "menu1";
       $menuids[] = "menu2";
       // і можна так додавати, скільки влізе
       $total_menu_width = ***;                         /* ширина меню !!!!!! така ж сама як і у верхнього, тому проблеми нема */
       $padding_sum = **;                                 /* сума бокових падінгів в тезі <li> !!!!!! така ж сама як і у верхнього, тому проблеми нема */
       $border_sum = **;                                   /* сума бокових бордерів в тезі <li> !!!!!! така ж сама як і у верхнього, тому проблеми нема */
foreach ($menuids as $menuid ) {
       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;
             } n";//!!!!!!!!! Тут додав перенесення рядку після стилю, щоби не зливалось, щоча, імовірно, це не обов'язоков

            if (!isset ($document) ) { // !!!!!!!!! Перевірю, щоби даремно не ганяти. Не критично, але певно так ліпше.
                      $document = & JFactory::getDocument();
            }
            $document->addStyleDeclaration($_css);            
       }
}

Написано тут, не текстувалаось, але ідея має бути зрозуміла.


Re: Як створити гумове меню? - ceedee - 01.04.2010

gruz, щиро дякую! Незважаючи на перше квітня, все працює ) з паддінгами і бордерами я шось затупив але методом тику все получилось. РЕСПЕКТ!


Re: Як створити гумове меню? - Hijacker - 10.04.2010

Проблема! Переносив сайт з субдомену на основний, встановив Joomla! 1.5.15 Stable, скопіював папку шаблону туди... Тепер меню через раз працює, а саме не виводится потрібний стиль через скрипт. Чи може більш свіжа Джумла блокувати скипти в папці шаблону, і чому цей скрипт то спрацьовує, то ні....????????


Re: Як створити гумове меню? - gruz - 10.04.2010

Інша причина якась, ніж ти назвав.


Re: Як створити гумове меню? - Hijacker - 10.04.2010

От і цікаво, в чому ж причина в неспрацьовуванні скрипта?


Re: Як створити гумове меню? - gruz - 10.04.2010

Чесно кажучи, чутки про мої екстрасенсорі здібності дещо перебільшені. По аурі сайти не лікую.