0 Пользователей и 1 Гость просматривают эту тему.
  • 16 Ответов
  • 17926 Просмотров
*

pawa

  • Осваиваюсь на форуме
  • 27
  • 0 / 0
Мне необходимо изменить HTML КОД, который формирует модуль mainmenu.

По умолчанию код меню получается такой:

Код
<ul class="menu">

<li id="current" class="first active item1">
<a href="#"><span>Главная</span></a>
</li>

<li class="item41">
<a href="#"><span>FAQ</span></a>
</li>

</ul>

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

Код
<ul>
<li>
<div class="l-menu-li">
<a href="#">Главная</a>
</div>
</li>

<li>
<div class="l-menu-li">
<a href="#">О компании</a>
</div>
</li>

</ul>

т.е. нужно вставить внутрь каждого пункта дополнительный div.

Я полагаю это можно сделать каким то образом редактируя modules/mod_mainmenu/tmpl/default.php , но как именно?
Есть тут специалисты, кто нибудь может подсказать?
Советовать сделать меню через CSS - не надо... :)

Заранее спасибо!
*

voland

  • Легенда
  • 11031
  • 588 / 112
  • Эта строка съедает место на вашем мониторе
В 1,5 со стандартным mod_mainmenu - никак, не трогая ядро
*

era

  • Администратор
  • 1587
  • 391 / 5
  • В туалете лучше быть пользователем, чем админом.
да, лучше сделать копию этого модуля и уже не у самого mod_mainmenu лазить в кишках, а в том модуле который сделаешь на его основе. Тогда и обновлять Joomla можно будет со спокойной душой

да, лучше сделать копию этого модуля и уже не у самого mod_mainmenu лазить в кишках, а в том модуле который сделаешь на его основе. Тогда и обновлять Joomla можно будет со спокойной душой
Так и сделал уже давно, Ну великие Гуру Joomla до сих пор ни кто не смог взяться за поставленный вопрос ?
*

rlepricon

  • Осваиваюсь на форуме
  • 13
  • 0 / 0
А можно поподробнее?
правильно ли я понимаю, что нужно скопировать папку \modules\mod_mainmenu, например, в папку \modules\mod_mymenu?

Так же вопрос, как сделать чтобы каждый пункт меню и подменю обрамлялся картинкой?
В каком месте надо вставлять код картинки?   

Дико извиняюсь если мой ответ покажется бредом, но я у меня получилось сделать сабж без изменений в ядре.
Если я правильно понял вопрос - то автор занимается вопросом близким к верстке темы под Joomla.
Для решения проблемы мне пришлось создать свой собственный стиль вывода модуля.
в базовой версии Joomla 1.5(.4) доступны следующие типы показов модулей:
front-end
none
table
horz
xhtml
rounded
outline
back-end
none
xhtml
sliders
tabs
при желании, любой тип показа добавляется своей функцией в формате modChrome_ТИП
пример:
Цитировать
function modChrome_mytype($module, &$params, &$attribs){
   $tmp = $module->content;
   ...
   echo $tmp;
}
все эти обработчики должны быть прописаны в файле /templates/<имя_вашей_темы>/html/modules.php
в темплейте вызов компонента с новый обработчиком вида будет выглядеть следующим образом:
Цитировать
<jdoc:include type="modules" name="<имя_позиции>" style="mytype"/>
*

Be(ool

  • Захожу иногда
  • 59
  • 5 / 0
очередное недоразумение, с которым столкнулся в Joomla,  - "спроектировано, но не используется"

в mod_mainmenu.php есть строчка

Код
require(JModuleHelper::getLayoutPath('mod_mainmenu'));

статический метод getLayoutPath имеет второй необязательный параметр - имя пользовательского шаблона, по умолчанию равен default. если его указать, то будет подключен свой шаблон в mod_mainmenu/tmpl/

Решается просто: в mod_mainmenu.xml добавляется параметр

Код
<param name="template" type="text" default="" size="15" label="template" description="Template" />

и в коде самого модуля присваивается пользовательский шаблон
Код
$utemplate = $params->get('template', 	'default');
require(JModuleHelper::getLayoutPath('mod_mainmenu',$utemplate));
в итоге получается модуль с возможностью выбора шаблона
*

n_drey

  • Захожу иногда
  • 156
  • 3 / 1
  • Давай телевиденье!
Тему считаю не раскрытой !  аналогичная проблема как у создателя темы... Как же всётаки поменять.. сделал как предлагается в документации создал папку /templates/мой шаблон/html/mod_mainmenu/default.php но что там менять так и не понял.. Хоть ткните где можно посмотреть что всё это означает ((((
*

Be(ool

  • Захожу иногда
  • 59
  • 5 / 0
Тему считаю не раскрытой !  аналогичная проблема как у создателя темы... Как же всётаки поменять.. сделал как предлагается в документации создал папку /templates/мой шаблон/html/mod_mainmenu/default.php но что там менять так и не понял.. Хоть ткните где можно посмотреть что всё это означает ((((




Да все что угодно, например так
Код
			$items = &JSite::getMenu();
$rows = $items->getItems('menutype', <твой тип меню>);
foreach($rows as $row) {
                                                     ...
                                                }
*

alexglue

  • Новичок
  • 4
  • 0 / 0
В 1,5 со стандартным mod_mainmenu - никак, не трогая ядро

Да уж конечно, никак. Не знаете, хоть бы не были так уверены.

Я тоже долго искал реализацию, потом плюнул и сделал так:

Нужно было выводить меню в следующем виде:

Код: html4strict
        <ul id="menu">
          <li id="active"">
                <div class='left'></div>
                <div class='right'></div>
                <div class='center'><div class='tab-caption'><a class='bottom' href="#">Контакты</a></div></div>
            </li>
            <li class="nav-tab">
              <div class='left'></div>
                <div class='right'></div>
                <div class='center'><div class='tab-caption'><a class='bottom' href="#">Статьи</a></div></div>               
          </li>
        </ul>

В файл: html/modules.php шаблона я написал:
Код: php
function modChrome_hormenu($module, &$params, &$attribs){
jimport('joomla.html.pane');
$tmp = $module->content;
$tmp = preg_replace("/(<li.*>)(.*)(<\/li>)+/Uims", "function modChrome_hormenu($module, &$params, &$attribs){
jimport('joomla.html.pane');
$tmp = $module->content;
$tmp = preg_replace("/(<li.*>)(.*)(<\/li>)+/Uims", "$1<div class='left'></div><div class='right'></div><div class='center'><div class='tab-caption'>$2$3</li>", $tmp);
echo $tmp;
}
<div class='left'></div><div class='right'></div><div class='center'><div class='tab-caption'>php$3</li>", $tmp);
echo $tmp;
}

Затем из index.php шаблона вызвал:

Код: html4strict
<jdoc:include type="modules" name="menu-hor" style="hormenu" />

?

ПРОФИТ!
*

SmokerMan

  • Гуру
  • 5293
  • 720 / 26
alexglue
такие замены явно на пользу не кому не пойдут :)
*

alexglue

  • Новичок
  • 4
  • 0 / 0
alexglue
такие замены явно на пользу не кому не пойдут :)


Ну приведите пример, если можете, как по Вашему это может быть использовано во вред?
Я лично ничего опасного придумать не смог. Хотя я конечно не гуру = )

Кроме того, это всего лишь простейшее решение проблемы, всегда можно написать более жесткую регулярку.
*

Skit

  • Захожу иногда
  • 75
  • 5 / 0
  • Нет смысла в том, что ты делаешь!
очередное недоразумение, с которым столкнулся в Joomla,  - "спроектировано, но не используется"
в mod_mainmenu.php есть строчка
Код
....

Спасибо! то, что доктор прописал.
*

Арчик

  • Захожу иногда
  • 281
  • 32 / 0


Да все что угодно, например так
Код
			$items = &JSite::getMenu();
$rows = $items->getItems('menutype', <твой тип меню>);
foreach($rows as $row) {
                                                     ...
                                                }

+1 Ваще молодчик )))) ПасЫбо...
Я твоим способом вывел крайние разделители и разделители между пунктами меню:
Код: php
function modChrome_hormenu($module, &$params, &$attribs){
    jimport('joomla.html.pane');
    $tmp = $module->content;
    $tmp = preg_replace("/(<ul.*>)(.*)(<\/ul>)+/Uims", "<div class='arrow-menu-end'></div>$0<div class='arrow-menu-end'></div>", $tmp);
    $tmp = preg_replace("/(<li.*>)(.*)(<\/li>)+/Uims", "function modChrome_hormenu($module, &$params, &$attribs){
    jimport('joomla.html.pane');
    $tmp = $module->content;
    $tmp = preg_replace("/(<ul.*>)(.*)(<\/ul>)+/Uims", "<div class='arrow-menu-end'></div>$0<div class='arrow-menu-end'></div>", $tmp);
    $tmp = preg_replace("/(<li.*>)(.*)(<\/li>)+/Uims", "$1<div class='arrow-menu'></div>$2$3", $tmp);
    echo $tmp;
}<div class='arrow-menu'></div>php$3", $tmp);
    echo $tmp;
}
Далее дело техники CSS

Но у меня вопрос: как сюды вставить счетчик для того чтобы всунуть определенный слой (div), после предположим первого пункта списка. ?
Например:
вставим слово hello в 3 пункт меню вместо содержимого
Код: php
$tmp = preg_replace("/(<li.*>)(.*)(<\/li>)+/Uims", "$tmp = preg_replace("/(<li.*>)(.*)(<\/li>)+/Uims", "$1hello", $tmp,3);hello", $tmp,3);
в этом случае вставка произойдет во все первые 3 пункта, а мне нужно чтоб только после третьего ...
« Последнее редактирование: 13.10.2010, 17:42:00 от Арчик »
Компьютер-это вещь для решения проблем, которых у вас не было до его появления...
*

itmgk

  • Новичок
  • 2
  • 0 / 0
всем привет
подскажите, как сделать, чтобы линк на текущую страницу не был линком
к примеру, открыта главная страница сайта
чтобы линк "Главная" не был ссылкой, а был просто текстом
спасибо.
*

klubnichkaaa

  • Захожу иногда
  • 302
  • 16 / 2
Полезная ветка щас сам с таким столкнулся, понял что это модуль, надо копирнуть его и перебить. Не совсем просто честно говоря!
Делай с другими то же, что они собираются сделать с тобой: бей первым.
*

kolik

  • Осваиваюсь на форуме
  • 10
  • 0 / 0
Здравствуйте всем!
Изменил вид своего меню таким способом
Код
function modChrome_hormenu($module, &$params, &$attribs){
jimport('joomla.html.pane');
$tmp = $module->content;
$tmp = preg_replace("/(<li.*>)(.*)(<\/li>)+/Uims", "$1<div class='left'><div class='right'>$2</div></div>$3</li>", $tmp);
echo $tmp;
}

Все отлично заработало!
Получил меню вида
Код
<ul>
   <li>
      <div class="left">
         <div calss="right">
            <a> </a>
         </div>
      </div>
   </li>
</ul>

Осталась одна большая проблема, первый пункт меню и последний не становятся активными, ко всем остальным добавлется суффикс "current"! Что делать, может кто то сталкивался с таким буду очень признателен
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Где и как изменить привязку модуля к пункту меню в базе данных стоит 1.5.22 ?

Автор lukum

Ответов: 10
Просмотров: 5134
Последний ответ 12.05.2017, 08:35:49
от KKAAZZOO
Как удалить циклические ссылки из меню модуль jv_menus?

Автор Анатолий115

Ответов: 0
Просмотров: 2881
Последний ответ 06.10.2016, 14:36:19
от Анатолий115
Изменить размер или расположение модуля главного меню

Автор СергейZ

Ответов: 5
Просмотров: 2153
Последний ответ 06.04.2016, 08:06:17
от СергейZ
Вставить HTML код в меню

Автор Okulo

Ответов: 1
Просмотров: 1531
Последний ответ 25.11.2015, 11:03:01
от Shustry
Модуль видео скрывает за собой выпадающее меню

Автор pride777

Ответов: 0
Просмотров: 1268
Последний ответ 06.02.2015, 01:37:31
от pride777