Новости Joomla

Joomla 6: Автоматические обновления ядра в Joomla

Joomla 6: Автоматические обновления ядра в Joomla

👩‍💻 Joomla 6: Автоматические обновления ядра в Joomla. В октябрьском номере официального журнала Joomla - Joomla Community Magazine вышла статья David Jardin, где рассказывается о внедрении функционала автоматического обновления ядра Joomla.❓Почему сейчас? Joomla же жила как-то 20 лет без автоматических обновлений?Это оказалась самая востребованная за последнее время от пользователей Joomla функция. Но, основная причина внедрения - проблемы безопасности. Всякий раз, когда в новой версии Joomla устраняется уязвимость, злоумышленники начинают анализировать код, чтобы выяснить, какая именно уязвимость была исправлена. И как только они это выясняют - начинается разработка автоматизированных скриптов для взлома как можно большего количества сайтов. Затем доступы к автоматически взломанным сайтам продаются в профильных чатах и ресурсах "пачками" по несколько сотен тысяч или миллионов сайтов. Ваш сайт могли взломать несколько лет назад, но воспользоваться уязвимостью могут не сразу, а тогда, когда у злоумышленников возникнет необходимость. И только после этого вы может быть узнаете об этом.Анализ патча, понимание проблемы и разработка скрипта требуют времени. И если владелец сайта не обновит его до истечения этого срока, сайт может быть взломан. А хакеры действуют быстро! Для критических, легко эксплуатируемых уязвимостей речь идёт о временном окне в 10–12 часов — и этого времени явно недостаточно, чтобы все успели обновить свои сайты.Здесь выходят на первый план автоматизированные обновления: проект Joomla теперь может активно устанавливать обновления (и, следовательно, исправления безопасности) на сайты, чтобы гарантировать, что сайты действительно обновляются вовремя.🕘 От первых идей до реализации прошло 5 лет. И здесь можно вспомнить, как в Joomla 5.1 внедрили TUF - The Update Framework, позволяющий устанавливать защищённое соединение между сайтом и сервером обновлений и исключает возможность supply chain attack (атаки на цепочку поставок).Об особенностях реализации и требованиях к сайту читаем подробнее в статье на JCM.@joomlafeed#joomla #secutiry #jcm

Первый выпуск журнала NorrNext в честь 20-й годовщины Joomla™

Первый выпуск журнала NorrNext в честь 20-й годовщины Joomla™

Первый выпуск журнала NorrNext в честь 20-й годовщины Joomla™. Интервью с волонтёрами 🎈Ну что, друзья, вот и настал этот долгожданный момент. Мы выпустили первое издание собственного журнала под эгидой NorrNext, который включает в себя интервью с видными деятелями сообщества из разных стран и континентов.Общий нарратив: показать, что нас объединяет (Joomla) и узнать больше о людях, которые вносят свой вклад в развитие платформы в своих сообществах. 20 лет — это много. Давайте же узнаем о коллегах 🎁 Первый цикл включает такие страны, как Австрия, Испания, Латвия, Россия, Румыния, Тайланд, Черногория, Чехия.⚙️ С кем интервью: ✔️ Владимир Елисеев 🇷🇺✔️ Дмитрий Рекун 🇱🇻✔️ Дмитрий Цымбал 🇷🇺✔️ Евгений Сивоконь 🇷🇺 ✔️ Сергей Толкачёв 🇷🇺✔️ Dénes Székely 🇷🇴✔️ Jan Pavelka 🇨🇿✔️ Miljan Vujosevic 🇲🇪✔️ Sergio Iglesias 🇪🇸✔️ Sigrid Gramlinger 🇦🇹✔️ Pisan Chueatchatchai 🇹🇭‼️ Новые интервью будут добавляться до конца декабря 2025. Заходите по ссылке время от времени💡👉 Читать далее

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

Вопрос поднимался неоднократно.
Вопрос такой
Как вставить картинку в меню?
Весь форум в вопросах, насчёт картинок в меню. А разнообразные гуру и подгуровчики, не зная ответа, обычно отправляют в FAQ или в google. На что заявляю, что пролистаны все известные поисковики, ну а FAQ это моя настольная книга. Я согласен, что, возможно у меня маловато программистских знаний. Но не все будут программистами и не всем это нужно.
Ну а воз то, по-прежнему на том же самом месте. Решение, даже если оно известно, не озвучивается, его попросту не видно.
Все эти хитрые предположения, типа:
  • 1. А ты поставил в Show Menu Icons опцию Image Only?,
    2. А ты поставил в параметрах своего пункта меню картинку?.
    3. А ты изменил бесцветную arrow_right на цветастую?
    5. А ты загрузил шаблон в корень своего шаблона?
    6. А ты смотрел на  menu.css и куда ты его скопировал?

и другие подобные умные вопросы не решают проблемы. Если кто-то знает реально, как этот вопрос прибить, то подскажите?
By the way…
Ещё вопрос, который тоже летает во всех головах, и периодически всплывает на форуме, он тоже остался без ответа. Вот он:
Почему картинка после вставки в mainmenu в параметре: Изображение меню, уходит вверх или вниз? Как её выровнять? Где она регулируется?
... ещё раз основной вопрос...
Как вставить картинку в Extended Menu?


[вложение удалено Администратором]
*

PR-NN

  • Новичок
  • 3
  • 0 / 0
вопрос еще актуален ? могу рассказать т.к. сам провозился с этим делом...

конечно актуален. Сейчас вожусь именно со вставкой картинок в Extended Menu.
*

nick71

  • Завсегдатай
  • 1145
  • 12 / 12
  • Сайты любой сложности - обращайтесь
присоединяюсь! Рассказывай, как вставить картинки

))) наверно не получилось..
*

Professor

  • Захожу иногда
  • 59
  • 10 / 0
Все эти хитрые предположения, типа:
  • 1. А ты поставил в Show Menu Icons опцию Image Only?,
    2. А ты поставил в параметрах своего пункта меню картинку?.
    3. ...
Я сделал только два этих пункта и у меня всё получилось.

Передо мной недавно стояла задача поинтересней - надо было что бы эти картинки при наведении менялись.
Реализовал через одно место, но если кому то интересно - могу рассказать. Потому что подходящей темы тут не нашёл.
*

Blossom

  • Новичок
  • 6
  • 0 / 0
Что значит "могу рассказать?" Конечно рассказывай! Всем интересно
*

Professor

  • Захожу иногда
  • 59
  • 10 / 0
Окей, соберусь с мыслями и на выходных напишу.
*

Professor

  • Захожу иногда
  • 59
  • 10 / 0
Значится так ... начнём с простого и перейдём к сложному.
В теме поднималось 3 вопроса:
- Почему картинка после вставки в mainmenu в параметре: Изображение меню, уходит вверх или вниз? Как её выровнять? Где она регулируется?
- Как вставить картинку в меню? (ExtendedMenu)
- Как сделать, что бы при наведении картика заменялась другой картинкой ? (ExtendedMenu)

На первый вопрос на скорую руку я вот что придумал.

Как выровнять картинку после вставки в mainmenu по вертикали

Во-первых, нужно выставить в настройках модуля, выводящем ваше меню, какой-нибудь уникальный суффикс (к примеру, -mymenu)
Во-вторых, в CSS файл шаблона дописываем

Код: css
.moduletable-mymenu img {
  margin-bottom: -6px;
}

Это опустит все картинки в меню чуть ниже. Цифру изменяйте в соответствии со своими потребностями. Если же требуется, наоборот, поднять картинки - вписываем положительное значение.

Q: А почему мы для опускания картинки не использовали margin-top ?
A: Потому что в этом случае вместо того, что бы опуститься картинкам, опускается всё меню вместе с картинками.
« Последнее редактирование: 29.03.2010, 02:52:44 от Professor »
*

Professor

  • Захожу иногда
  • 59
  • 10 / 0
Как вставить картинку в меню (ExtendedMenu) (сделать меню полностью из картинок, представляющих собой ссылки на пункты меню)?
Пошаговая инструкция

Во-первых, заливаем все картинки, которые мы хотим видеть в меню, в папку
<корень Joomla>/images/stories/
Во-вторых, создаём наше меню через админку (создаём все нужные нам пункты меню с ссылками на нужные материалы)
В-третьих, заходим в каждый пункт меню (в админке: все меню -> наше меню -> каждый пункт меню), справа выбираем закладку "Параметры - Система" и для пункта "Картинка меню" выбираем из списка наш рисунок, соответствующий данному пункту меню.
В-четвёртых, заходим в админке в "Менеджер модулей" (Расширения  -> Менеджер модулей), ищем модуль, отвечающий за вывод нашего меню1, и отключаем его.
В-пятых, ставим модуль ExtendedMenu.
В-шестых, снова идём в Менеджер модулей. В этот раз в фильтре "-выберите тип-" выбираем "mod_exmenu-j15". Должен появиться один модуль.

Открываем его и выполняем ряд последовательных действий:
1) Слева, напротив пункта "Включён", ставим "да"
2) Напротив пункта "Показывать заголовок" ставим "нет"
3) Выбираем, в какой позиции будет модуль
4) Справа, в пункте Menu Name выбираем системное имя нашего меню
5) В пункте Menu Style выбираем либо "Vertical (not recommended)" для вертикального отображения меню, либо "Horizontal (not recommended)" соотв. для горизонтального отображения меню.
6) В пункте Show Menu Icons выбираем "Image Only (Linked)"
7) В пунтке Enable Menu Template выбираем "Нет"
8) Нажимаем в самом верху страницы "Сохранить"

Всё ! Если вы всё сделали правильно, теперь у вас в выбранной позиции будет отображаться меню, каждый пункт которого будет картинкой на соотв. материал.

--------------------------------
1 Если вы не создавали меню с самого нуля, а изменяли одно из существующих, то название модуля должно совпасть с занванием меню. Вообще-то, это не всегда так, так что может потребоваться немного терпения и настойчивости, что бы найти нужный модуль. Для удобства рекомендую в фильтре, в выпадающем списке "- выберите тип -" выбрать "mod_mainmenu". Если до сих пор интуитивно не понятно, какой именно модуль выводит ваше меню, заходите в каждый и справа смотрите пункт "Название меню". Одно из них совпадёт с названием вашего меню (системным именем, которое можно посмотреть, зайдя "Все меню -> Менеджер меню" в столбике "Системное имя")
*

Professor

  • Захожу иногда
  • 59
  • 10 / 0
Ну а теперь самое сложное
Как сделать, что бы при наведении картика заменялась другой картинкой ? (ExtendedMenu)
Пошаговая инструкция

Для осуществления поставленной задачи нам предстоит, во-первых, немного покопаться в интернете, во-вторых, кое-чему научиться. Надеюсь, никто здесь не боится учиться чему-то новому и развиваться.
А учиться мы будем составлять шаблон модуля ExtendedMenu для вывода меню. Что в свою очередь подразумевает изучение основ работы с patTemplate.
Мы даже немного усложним себе задачу, и у нас текущее меню будет отображаться отдельной картинкой.
Но наша задача будет упрощена тем, что у нас не будет подуровней меню.

И так, что нам потребуется:
1. Java-script, заменяющий картинку на другую при наведении мышкой (в самом простом случае это одна строчка)
2. По три картинки для каждого пункта меню (при наведении, когда мы находимся в этом меню и последняя - просто картинка)
их названия будут:
menu_1_off.png
menu_2_off_png
menu_3_off.png
для всех пунктов меню, когда курсор не наведён

menu_1_on.png
menu_2_on_png
menu_3_on.png
для всех пунктов меню, когда курсор наведён и

menu_1_static.png
menu_2_static_png
menu_3_static.png
когда мы отображаем текущее меню (рисунок при наведении курсора не будет меняться)
Поместим все эти рисунки в папку images шаблона.
3. Какой-нибудь простой редактор ( советую notepad++ )
4. Установленный модуль ExtendedMenu.

Начнём с подготовительной (и теоретической) части.

Теория.
Внутри шаблона, в зависимости от того, какой пункт меню мы будем выводить, мы будет вставлять различные картинки. Следовательно, нам нужно идентифицировать каждый пункт меню. Делать это через Itemid очень не удобно, т.к. при переносе нашего шаблона на другой сайт порядок Itemid изменится и рисунки не будут соответствовать нашим пунктам меню, либо вообще не будут выводиться.
Я использовал в качестве идентификатора название пункта меню (которое ему даётся при создании, и в списке пунктов какого-либо меню отображается в столбике "Пункт меню" (J1.5.14)). Обычно оно отображается на сайте, но т.к. мы используем картинки, мы можем использовать это название для других целей. Для каждого пункта меню его имя должно быть задано латинскими буквами (для удобства).

Подготовка.
Изменим, для эксперимента, "Верхнее меню" (такое есть, если вы установили систему с демо-данными)
Итак, идём "Все меню -> Верхнее меню" и скрываем все элементы этого меню.
Теперь создаём новый пункт меню, ссылающийся на какой-нибудь материал, и в заголовке пишем "punkt_1". Повторяем это действие ещё 2 раза, называя пункты меню "punkt_2" и "punkt_3".

Практика.
Заходим в папку шаблона, который стоит по умолчанию, и создаём файл "topmenu_exmenu.html". Это и есть файл шаблона меню. Он строится на основе Джумловского шаблонизатора patTemplate.
Открываем его редактором и пишем там:

Код: xml
<patTemplate:tmpl name="menu" whitespace="trim">
  {MENU_LIST}
</patTemplate:tmpl>

<patTemplate:tmpl name="menu_list" whitespace="trim">
  <ul>{MENU_ITEMS}</ul>
</patTemplate:tmpl>

Эти теги обрабатываются модулем ExtendedMenu и выводят нам наше меню. Что они делают точно я вам сказать не могу, но свои предположения выскажу. Первая часть формирует общее меню из составных частей, т.е. из подменю разных уровней вложенности. Вторая часть формирует каждое отдельное подменю. Догадки основаны на анализе примера подобного меню1.

По скольку у нас будет только один уровень вложенности (первый, т.е. это просто список картинок без выпадающих меню) нас устроит приведённый выше код. Если же вы захотите сделать ещё и выпадающее меню с картинками, то этого кода будет мало. Здесь подобный случай рассматриваться не будет.

Логику работы шаблона понять не сложно. Первая часть приведённого кода собирает наше меню из второй части. Вторая часть собирает подуровни меню из отдельных элементов меню. Нашей основной задачей теперь является описать вывод каждого элемента меню.

Дописываем немного ниже, всё в том же файле:

Код: xml
<patTemplate:tmpl name="menu_item" whitespace="trim">
  <patTemplate:tmpl name="condition_what_menu" type="condition"
conditionvar="CAPTION" varscope="menu_item" whitespace="trim">
    <patTemplate:sub condition="punkt_1">
      <patTemplate:tmpl name="condition_is_current1" type="condition"
conditionvar="IS_ACTIVE" varscope="menu_item" whitespace="trim">
        <patTemplate:sub condition="1">
          <li>{LINK_OPEN}<img src="{TEMPLATE_HOME}/images/menu_1_static.PNG"
width="100" height="50" vspace="0" hspace="0" border="0" />{LINK_CLOSE}</li>
        </patTemplate:sub>
        <patTemplate:sub condition="default">
          <li>{LINK_OPEN}<img id="punkt_1"
src="{TEMPLATE_HOME}/images/menu_1_off.PNG" width="100" height="50" vspace="0" hspace="0" border="0"
onMouseOver="this.src='{TEMPLATE_HOME}/images/menu_1_on.PNG'"
onMouseOut="this.src='{TEMPLATE_HOME}/images/menu_1_off.PNG'"/>{LINK_CLOSE}</li>
        </patTemplate:sub>
      </patTemplate:tmpl>
    </patTemplate:sub>
  </patTemplate:tmpl>
</patTemplate:tmpl>

Немного в сторону, или "что это вообще такое !?"
Я так полагаю, не все знакомы с синтаксисом patTemplate. Сейчас будет краткое введение.
Файл, обрабатываемый шаблонизатором patTemplate (в нашем случае это как раз наш файл) делится на составные части - шаблоны. Каждый шаблон обрамляется следующими тегами:

Код: xml
<patTemplate:tmpl ...>
... thomething in the template ...
</patTemplate:tmpl>

Это очень удобно для разработчика, т.к., составив однажды такой шаблон любой сложности, его можно вызвать в другой части фалйа, или даже в другом файле, одной строчкой. Шаблоны делятся на "простые шаблоны" и "шаблоны с условием". Первые выполняются и показываются всегда, где бы вы его ни написали или ни вызвали. Второй выполнится только если выполнится условие, т.е. всё, что внутри шаблона, отобразится при выполнении условия. ъ
Он имеет следующий вид:

Код: xml
<patTemplate:tmpl name="condition_is_current1" type="condition" conditionvar="VARIABLE" ...>
  <patTemplate:sub condition="1">                        
     This text will be shown if our VARIABLE variable's value  is 1
  </patTemplate:sub>
  <patTemplate:sub condition="2">
     This text will be shown if our VARIABLE variable's value  is 2
  </patTemplate:sub>
  <patTemplate:sub condition="default">
    This will be shown if non of above conditions is fullfilled
  </patTemplate:sub>
</patTemplate:tmpl>

где
name="condition_is_current1" - имя шаблона, с помощью которого его можно вызвать в любой части файла
type="condition" - тип шаблона (для "простого" шаблона этот атрибут просто не указывается, для шаблона "с условием" это type="condition")
conditionvar="VARIABLE" - переменная, значение которой передаётся в подшаблоны и проверяется на совпадение
<patTemplate:sub condition="1"> - подшаблон, в котором проверяется значение переменной. Если оно будет равно 1 (т.е. VARIABLE=1), то всё, что внутри этого шаблона, выполнится.

Ну что, вроде как разобрались ?

Теперь вернёмся к нашему файлу. Теперь он имеет вид
Код: xml
<patTemplate:tmpl name="menu" whitespace="trim">
  {MENU_LIST}
</patTemplate:tmpl>

<patTemplate:tmpl name="menu_list" whitespace="trim">
  <ul>{MENU_ITEMS}</ul>
</patTemplate:tmpl>

<patTemplate:tmpl name="menu_item" whitespace="trim">
  <patTemplate:tmpl name="condition_what_menu" type="condition"
conditionvar="CAPTION" varscope="menu_item" whitespace="trim">
    <patTemplate:sub condition="punkt_1">
      <patTemplate:tmpl name="condition_is_current1" type="condition"
conditionvar="IS_ACTIVE" varscope="menu_item" whitespace="trim">
        <patTemplate:sub condition="1">
          <li>{LINK_OPEN}<img src="{TEMPLATE_HOME}/images/menu_1_static.PNG"
width="100" height="50" vspace="0" hspace="0" border="0" />{LINK_CLOSE}</li>
        </patTemplate:sub>
        <patTemplate:sub condition="default">
          <li>{LINK_OPEN}<img id="punkt_1"
src="{TEMPLATE_HOME}/images/menu_1_off.PNG" width="100" height="50" vspace="0" hspace="0" border="0"
onMouseOver="this.src='{TEMPLATE_HOME}/images/menu_1_on.PNG'"
onMouseOut="this.src='{TEMPLATE_HOME}/images/menu_1_off.PNG'"/>{LINK_CLOSE}</li>
        </patTemplate:sub>
      </patTemplate:tmpl>
    </patTemplate:sub>
  </patTemplate:tmpl>
</patTemplate:tmpl>

Q: Что за надписи внутри фигурных скобочек ?
A: Это переменные, переданные из скрипта модуля ExtendedMenu в наш шаблон и содержащие определённые, постоянные значения. Назовём их константами. Без них мы никак не смогли бы связать наши рисунки с соотв. им пунктам меню.
Вот значения констант, которые нам потребуются:
{MENU_LIST} и {MENU_ITEMS} - соотв. выводят всё меню, и подменю нашего меню. Для нас значения особого не имеют.
{LINK_OPEN} и {LINK_CLOSE} - соотв. открывает и закрывает тег ссылки на наш пункт меню (<a href="htt....."> и </a>)
{TEMPLATE_HOME} - внешнаяя ссылка на папку нашего шаблона.

Q: Что это за надписи БОЛЬШИМИ БУКВАМИ ?
A: Это переменные, уже настоящие переменные, которые меняют своё значение для каждого отдельного пункта.
Вот описание каждой из нужных нам переменных
CAPTION - передаёт нам название каждого пункта меню (то самое, которое мы вводили, когда создавали пункты меню на подготовительном уровне в админке)
IS_ACTIVE - передаёт нам значение 1 если сейчас мы работаем с текущим меню (т.е. на сайте мы просматриваем этот пункт меню)

Теперь давайте разберёмся, что и как работает.
Во-первых, мы добавили большой шаблон под названием menu_item (<patTemplate:tmpl name="menu_item" whitespace="trim">). Этот шаблон отвечает за генерацию отдельного пункта меню, и вызывается в цикле несколько раз, при этом нам передаются разные значения переменных CAPTION и IS_ACTIVE.
Внутри этого шаблона у нас сразу же идёт шаблон с условием под названием "condition_what_menu" (<patTemplate:tmpl name="condition_what_menu" type="condition" conditionvar="CAPTION" ...>). Ему мы передаём переменную CAPTION (как помните, она у нас может принимать только значения punkt_1, punkt_2 и punkt_3).
Далее, внутри этого шаблона идёт подшаблон с проверкой значения переменной (<patTemplate:sub condition="punkt_1">). Это означает, что сейчас мы настраиваем, как будет отображаться пункт меню punkt_1. Казалось бы, можно ставить картинку. Но нет. Теперь нам нужно проверить, не является ли этот пункт текущим. Для этого мы добавляем ещё один шаблон с условием, который называется "condition_is_current1" (<patTemplate:tmpl name="condition_is_current1" type="condition" conditionvar="IS_ACTIVE" ...>) и далее ещё один подшаблон с проверкой переменной IS_ACTIVE (<patTemplate:sub condition="1">).

Теперь самое интересное.
Если выполняется первое условие (т.е. мы работаем с пунктом punkt_1) и выполняется второе условие (т.е. посетитель просматривает как раз материал, на который ведёт данный пункт меню) мы должны вывести картинку menu_1_static.png. Что мы и делаем строкой

Код: xml
<li>{LINK_OPEN}<img src="{TEMPLATE_HOME}/images/menu_1_static.PNG" 
width="100" height="50" vspace="0" hspace="0" border="0" />{LINK_CLOSE}</li>

Далее, если не выполняется второе условие, обязательно выполнится условие по дефолту (<patTemplate:sub condition="default">), которое идёт сразу за ним. Т.е. теперь мы знаем, что мы работаем с пунктом меню, не ведущем на текущую страницу. И нам нужно вывести либо рисунок без наведённого указателя, либо с указателем. В этом нам помогают события javascript: onmouseover и onmouseout. Первое означает что человек навёл мышку на рисунок, и нам нужно заменить его на другой (this.src='{TEMPLATE_HOME}/images/menu_1_on.PNG). Второе событие означает, что курсор убран с рисунка, и нам нужно вернуть изначальный рисунок (this.src='{TEMPLATE_HOME}/images/menu_1_off.PNG).
Вот и всё ! Логика работы шаблона ясна ?

Кстати, хочу обратить внимание на то, что как раз ради того, что бы вставить эти две строчки javascript, мы, собственно говоря, и создали отдельный шаблон вывода меню.

Дальше всё просто. Нам нужно добавить ещё два таких условия, которые сработают для других пунктов меню:

Код: xml
<patTemplate:sub condition="punkt_2">
  <patTemplate:tmpl name="condition_is_current2" type="condition"
conditionvar="IS_ACTIVE" varscope="menu_item" whitespace="trim">
    <patTemplate:sub condition="1">
      <li>{LINK_OPEN}<img src="{TEMPLATE_HOME}/images/menu_2_static.PNG" width="100"
height="50" vspace="0" hspace="0" border="0" />{LINK_CLOSE}</li>
    </patTemplate:sub>
    <patTemplate:sub condition="default">
      <li>{LINK_OPEN}<img id="punkt_2" src="{TEMPLATE_HOME}/images/menu_2_off.PNG"
width="100" height="50" vspace="0"
hspace="0" border="0" onMouseOver="this.src='{TEMPLATE_HOME}/images/menu_2_on.PNG'"
onMouseOut="this.src='{TEMPLATE_HOME}/images/menu_2_off.PNG'"/>{LINK_CLOSE}</li>
    </patTemplate:sub>
  </patTemplate:tmpl>
</patTemplate:sub>
<patTemplate:sub condition="punkt_3">
  <patTemplate:tmpl name="condition_is_current3" type="condition"
conditionvar="IS_ACTIVE" varscope="menu_item" whitespace="trim">
    <patTemplate:sub condition="1">
      <li>{LINK_OPEN}<img src="{TEMPLATE_HOME}/images/menu_3_static.PNG" width="100"
height="50" vspace="0" hspace="0" border="0" />{LINK_CLOSE}</li>
    </patTemplate:sub>
    <patTemplate:sub condition="default">
      <li>{LINK_OPEN}<img id="punkt_3" src="{TEMPLATE_HOME}/images/menu_3_off.PNG"
width="100" height="50" vspace="0" hspace="0" border="0"
onMouseOver="this.src='{TEMPLATE_HOME}/images/menu_3_on.PNG'"
onMouseOut="this.src='{TEMPLATE_HOME}/images/menu_3_off.PNG'"/>{LINK_CLOSE}</li>
    </patTemplate:sub>
  </patTemplate:tmpl>
</patTemplate:sub>

Не забываем, что это всё надо добавить после закрывающего тега шаблона (<patTemplate:sub condition="punkt_1">), что бы строки оказались внутри шаблона (<patTemplate:tmpl name="condition_what_menu" type="condition" conditionvar="CAPTION" ...>)

Обратите внимание, что разные шаблоны не могут называться одинаково. Вот почему у трёх шаблонов с условиями, вроде бы выполняющих одинаковые функции, три названия: condition_is_current1, condition_is_current2 и condition_is_current3.

В конце концов наш файл будет выглядеть следующим образом:

Код: xml
<patTemplate:tmpl name="menu" whitespace="trim">
  {MENU_LIST}
</patTemplate:tmpl>

<patTemplate:tmpl name="menu_list" whitespace="trim">
  <ul>{MENU_ITEMS}</ul>
</patTemplate:tmpl>

<patTemplate:tmpl name="menu_item" whitespace="trim">
  <patTemplate:tmpl name="condition_what_menu" type="condition"
conditionvar="CAPTION" varscope="menu_item" whitespace="trim">
    <patTemplate:sub condition="punkt_1">
      <patTemplate:tmpl name="condition_is_current1" type="condition"
conditionvar="IS_ACTIVE" varscope="menu_item" whitespace="trim">
        <patTemplate:sub condition="1">
          <li>{LINK_OPEN}<img src="{TEMPLATE_HOME}/images/menu_1_static.PNG" width="100"
height="50" vspace="0" hspace="0" border="0" />{LINK_CLOSE}</li>
        </patTemplate:sub>
        <patTemplate:sub condition="default">
          <li>{LINK_OPEN}<img id="punkt_1" src="{TEMPLATE_HOME}/images/menu_1_off.PNG"
width="100" height="50" vspace="0" hspace="0"
border="0" onMouseOver="this.src='{TEMPLATE_HOME}/images/menu_1_on.PNG'"
onMouseOut="this.src='{TEMPLATE_HOME}/images/menu_1_off.PNG'"/>{LINK_CLOSE}</li>
        </patTemplate:sub>
      </patTemplate:tmpl>
    </patTemplate:sub>
    <patTemplate:sub condition="punkt_2">
      <patTemplate:tmpl name="condition_is_current2" type="condition"
conditionvar="IS_ACTIVE" varscope="menu_item" whitespace="trim">
        <patTemplate:sub condition="1">
          <li>{LINK_OPEN}<img src="{TEMPLATE_HOME}/images/menu_2_static.PNG" width="100"
height="50" vspace="0" hspace="0" border="0" />{LINK_CLOSE}</li>
        </patTemplate:sub>
        <patTemplate:sub condition="default">
          <li>{LINK_OPEN}<img id="punkt_2" src="{TEMPLATE_HOME}/images/menu_2_off.PNG"
width="100" height="50" vspace="0" hspace="0"
 border="0" onMouseOver="this.src='{TEMPLATE_HOME}/images/menu_2_on.PNG'"
onMouseOut="this.src='{TEMPLATE_HOME}/images/menu_2_off.PNG'"/>{LINK_CLOSE}</li>
        </patTemplate:sub>
      </patTemplate:tmpl>
   </patTemplate:sub>
   <patTemplate:sub condition="punkt_3">
     <patTemplate:tmpl name="condition_is_current3" type="condition"
conditionvar="IS_ACTIVE" varscope="menu_item" whitespace="trim">
        <patTemplate:sub condition="1">
         <li>{LINK_OPEN}<img src="{TEMPLATE_HOME}/images/menu_3_static.PNG" width="100"
height="50" vspace="0" hspace="0" border="0" />{LINK_CLOSE}</li>
        </patTemplate:sub>
        <patTemplate:sub condition="default">
         <li>{LINK_OPEN}<img id="punkt_3" src="{TEMPLATE_HOME}/images/menu_3_off.PNG"
width="100" height="50" vspace="0" hspace="0"
border="0" onMouseOver="this.src='{TEMPLATE_HOME}/images/menu_3_on.PNG'"
onMouseOut="this.src='{TEMPLATE_HOME}/images/menu_3_off.PNG'"/>{LINK_CLOSE}</li>
        </patTemplate:sub>
      </patTemplate:tmpl>
    </patTemplate:sub>
  </patTemplate:tmpl>
</patTemplate:tmpl>

Остались последние штрихи, и мы получим то, ради чего так долго старались.
Заходим в админку, идём в "Менеджер Шаблонов". Ищем модуль, выводящий наше меню (mod_mainmenu) и скрываем его.  Ищем модуль mod_exmenu-j15. Заходим в него, выставляем позицию модуля, источник меню (Menu Name), и пролистываем вниз. Напротив пункта "Enable Menu Template" ставим твёрдое "да", ниже, в пункт "Template Name", вписываем название нашего файла (topmenu_exmenu.html). Нажимаем сохранить.

Всё ! Идём на фронт-енд и смотрим что получилось. Смело клацаем на все пункты нового меню, и видим, что всё работает как и задумано.

Надеюсь моё многословие не доставит никому дискомфорта, я пытался разжевать всё как можно подробнее.
Надеюсь кому-то поможет.

Если что то ещё придумаю - добавлю.

Всем удачи !

Ссылки:
ExtendedMenu - наш модуль
Тут есть описание всех переменных, передаваемых в шаблон модулем
notepad++ - очень удобный редактор, который позволяет кодировать файлы в режиме без BOM

Готовый шаблон, описанный выше, с рисунками в приложении

----------------------------------------
1 Вот этого примера

[вложение удалено Администратором]
« Последнее редактирование: 23.08.2010, 15:56:15 от Professor »
*

WesternTune

  • Новичок
  • 9
  • 0 / 0
Большое спасибо, это очень полезный материал.
Странно, что мало кто оценил.
Хорошо разжёвано и написано доступно.
Автору - респект за труды :D
*

WesternTune

  • Новичок
  • 9
  • 0 / 0
Успешно применил полученные знания в новом проекте при создании меню. Действительно приятно всё описано.
Мне также помогла следующая подсказка - в ней хорошо расписаны названия и описания переменных patTemplate:
http://djamig0.livejournal.com/1381.html
*

Professor

  • Захожу иногда
  • 59
  • 10 / 0
Всегда пожалуйста)
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
А можно услышать, какие преимущества у extended menu перед mod_mainmenu?
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

Professor

  • Захожу иногда
  • 59
  • 10 / 0
Лично я использовал его с целью создания анимации при наведении, и для создания выпадающего меню. Но сейчас я нашёл более удобные решения, хотя этот модуль остаётся наиболее менее громоздким (во как).
Он создаёт очень мало HTML кода, работает совершенно без javascript.
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
интересно, а кто запрещает навешивать на mod_mainmenu скрипты?
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

Professor

  • Захожу иногда
  • 59
  • 10 / 0
да никто) Я просто выбрал альтернативный способ
P.S. поправил свои сообщения, что бы форум не съезжал
*

Шура Балаганов

  • Осваиваюсь на форуме
  • 11
  • 0 / 0
Ребят, объясните, что делаю не так? Нужно сделать пункты меню картинками с их заменой. Мои шаги: Как в данном примере
я скрыл пунты верхнего меню и создал дополнительные с материалом, далее я скопировал из архива картинки меню и вставил их в папку images шаблона по умолчанию и добавил в папку шаблона файл topmenu_exmenu.html. В результате чего появились просто пункты меню ссылками без картинок. :( Поясните пожалуйста кому не лень ^-^
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
я может быть когото разочарую, но меню с картинками без подписей можно сделать из обычного mod_mainmenu с картинками и подписями, добавив в CSS
Код: css
.menu span{display: none;}

так и не пойму - что нам дает extended menu ?
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

Шура Балаганов

  • Осваиваюсь на форуме
  • 11
  • 0 / 0
Ну у меня то есть меню с картинками  ^-^, вот только надо их сделать что бы они при наведении менялись. Попробовал на данном примере, ничего не вышло  :(. Может как нибудь тогда по-другому можно сделать, менее запудрено?
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
Я для решения подобной задачи (смена картинки при ховере) делал так:
Код: php
	if (($node->name() == 'a') && isset($node->img)) {
$node->addAttribute('style', "background-image: url('".$node->getElementByPath(img)->attributes('src')."')");
$node->removeChild($node->getElementByPath(img));
}

добавляем этот код в перекрытый в шаблоне default.php модуля mod_mainmenu

что он делает: превращает элемент img в атрибут style c background-image, другими словаме делает из тега картинки фон ссылки.
Далее все уже на CSS. Делаем спрайты, и на :hover меняем background-position.
Таким образом все картинки задаются через админку и не нужно ставить лишних модулей. Или можно еще простейший скрипт написать, который навесит обработчик mouseover'a и будет менять src. это уже второй вариант, посложнее..
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

Шура Балаганов

  • Осваиваюсь на форуме
  • 11
  • 0 / 0
странно, добавил эту штуковину и все пропало с надписью: Fatal error: Call to a member function name() on a non-object in C:\AppServ\www\........  :(
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
добавить надо в функцию modMainMenuXMLCallback(&$node, $args) ;)
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
вот полный листинг default.php
[spoiler title=листинг]
Код: 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() == 'a') && isset($node->img)) {
$node->addAttribute('style', "background-image: url('".$node->getElementByPath(img)->attributes('src')."')");
$node->removeChild($node->getElementByPath(img));
}

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');
[/spoiler]
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

Шура Балаганов

  • Осваиваюсь на форуме
  • 11
  • 0 / 0
скопировал твой код, вставил все в default.php, подключил модуль к меню, в CSS прописал
Код
div#gost {
        background-position: center;
        margin-left: auto;
    margin-right: auto;
    border-collapse:collapse ;
 float:left;
 width:161px;
 height:58px;
 color:#FFFFFF;
 overflow: hidden;   
}

a.zame {
display:block;
width:161px;
height:106px;
background:url(templates/имя сайта/images/картинка) left top;
}
a.zame:hover {background-position:left 58px;}

в HTML прописал
Код
<a href="<jdoc:include type="modules" name="left7"/>” class=”zame“> </a>

Все равно не фурычит  :( хотя если вместо
Код
<jdoc:include type="modules" name="left7"/>
вставлять ссылку на какой нить сайт, то и кнопка меняется нормально, а вот модуль не хочет выводиться картинками  :(
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
честно говоря ничего не понял из вашего поста ))
еще раз объясняю: дефолтный mod_mainmenu, если задать картинки пунктам меню в админке, выводит их в теге img. примерно так:
<ul class="menu">
  <li><a href="ссылька"><img src="images/stories/указанная_картинка" /><span>надпись</span></a</li>
  ...
</ul>

если же перекрыть default.php тем что я запостил, то код станет таким:

<ul class="menu">
  <li><a href="ссылька" style="background-image: url(images/stories/указанная_картинка)"><span>надпись</span></a</li>
  ...
</ul>

в CSS стили должны быть примерно такими:
.menu a{
    display: block;
    width: 100px;
    height: 30px;
    background-position: top center;
}
.menu a:hover{
    background-position: bottom center;
}
.menu span{
    dipslay: none;
}

делаем картинки - спрайты с двумя состояниями(расположенными по вертикали) и задаем пунктам через админку. вот и все. Если возникнут проблемы - установите FireBug, посмотрите через него - вам все станет ясно.
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
боже, только щас заметил - че это за ужасть
Цитировать
<a href="<jdoc:include type="modules" name="left7"/>” class=”zame“> </a>

и еще запись background-position:left 58px; неверная. указывайте либо именованные значения либо цифрами, но перемешивать нельзя. left  это 0, right это 100%, top это 0, bottom это 100%. проценты и пиксели мешать можно.
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

Шура Балаганов

  • Осваиваюсь на форуме
  • 11
  • 0 / 0
Все вроде заработало!  yes! Проблема была в том, что я вместо ссылки на меню выставлял сам модуль. crazy!
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Настройка Maxi Menu CK

Автор Agentos

Ответов: 39
Просмотров: 41549
Последний ответ 06.07.2016, 11:31:08
от serjik
[Решено] Установка Extended Menu

Автор arton57

Ответов: 10
Просмотров: 6512
Последний ответ 30.05.2013, 21:53:56
от arton57
Extended menu 1.1.0 - мультиязычность

Автор gpush

Ответов: 1
Просмотров: 5750
Последний ответ 29.08.2012, 17:21:52
от gpush
Extended Menu Tree java меню ошибка

Автор avduevsky

Ответов: 0
Просмотров: 5732
Последний ответ 01.06.2012, 17:06:47
от avduevsky
После установки модуля Extended Menu 1.0.6 его нет в списке при клике на кнопку "Создать"

Автор orsy

Ответов: 2
Просмотров: 6969
Последний ответ 07.05.2012, 22:44:20
от jeka73