Модуль как элемент меню

Мне нужно вставить модуль поиска в качестве элемента меню (модуль меню по умолчанию).

Мне нужен этот вывод:

& л; уль >
    <li> пункт меню </li>
    <li> пункт меню </li>
    <li> МОДУЛЬ ПОИСКА </li>
    <li> пункт меню </li>
    ...
& Lt; /мкл >

Мои первые мысли состоят в том, чтобы дважды дублировать модуль меню по умолчанию:

  1. Один для отображения пунктов меню перед поисковым модулем без закрытия тега </ul>
  2. Другое для отображения пунктов меню после модуля поиска без открытия тега <ul>

И вставьте модуль поиска между ними. Это, по-видимому, не самый простой и удобный способ достижения моей цели:

  • 3 позиции модуля для меню
  • 2 разных меню в диспетчере меню

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

Как добавить модуль в качестве элемента меню в меню по умолчанию?

10 голосов | спросил web-tiki 20 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowSat, 20 Sep 2014 14:31:31 +0400 2014, 14:31:31

2 ответа


4

Вот одна из альтернатив загрузки модуля поиска в вашем меню. Для этого требуется несколько простых шагов:

1. Переопределите модуль mod_menu

  • Создайте переопределение в папке шаблонов \ templates \ YOURTEMPLATE \ html \ mod_menu \ default_url.php.
  • Скопируйте в файл следующее содержимое:

default_url.php

<? php
 /**
 * @package Joomla.Site
 * @subpackage mod_menu
 *
 * @copyright Авторское право (C) 2005 - 2014 Open Source Matters, Inc. Все права защищены.
 * @license GNU General Public License версии 2 или новее; см. LICENSE.txt
 * /

('_ JEXEC') или умереть;

//Заметка. Важно удалить пробелы между элементами.
$ class = $ item-> anchor_css? 'class = "'. $ item-> anchor_css. '"': '';
$ title = $ item-> anchor_title? 'title = "'. $ item-> anchor_title. '' ':' ';

if ($ item-> menu_image)
    {
        $ item-> params-> get ('menu_text', 1)?
        $ linktype = '<img src = "'. $ item-> menu_image. '" alt = "'. $ item-> title. '" /> <span class = "image-title"> ' , $ item-> title. «& Л; /& продолжительность GT; ':
        $ linktype = '<img src = "'. $ item-> menu_image. '" alt = "'. $ item-> title. '" />';
 }
 еще
 {
    $ linktype = $ item-> title;
 }

 $ flink = $ item-> flink;
$ flink = JFilterOutput :: ampReplace (htmlspecialchars ($ flink));
if ($ linktype == "CustomSearchBox") {
    $ document = & JFactory :: getDocument ();
    $ renderer = $ document-> loadRenderer ('modules');
    $ options = array ('style' => 'xhtml');
    $ position = 'CustomSearchBox';
    echo $ renderer-> render ($ position, $ options, null);
}
else {

switch ($ item-> browserNav):
    по умолчанию:
    случай 0:
> <a <& phis; echo $ class;> href = "<php echo $ flink;> <? php echo $ title;> <& phis; & echo $ linktype; ? > & Lt; /а > & Lt;? PHP
        ломать;
    Дело 1:
        //_blank
> <a <& phis; echo $ class;> href = "<php echo $ flink;> target = "_ blank" <? php echo $ title;> <& phis; & echo $ linktype; ? > & Lt; /а > & Lt;? PHP
        ломать;
    случай 2:
        //window.open
        $ options = 'toolbar = no, location = no, status = no, menubar = no, scrollbars = yes, resizable = yes,'. $ params-> get ('window_open');
            > <a <& phis; echo $ class;> href = "<php echo $ flink;> onclick = "window.open (this.href, 'targetWindow', '<? php echo $ options;?>'); return false;" <? php echo $ title;> <& phis; & echo $ linktype; ? > & Lt; /а > & Lt;? PHP
        ломать;
EndSwitch;
}

Я добавил оператор if-else, начиная с строки # 29, который проверяет, является ли заголовок пункта меню «CustomSearchBox». Если это так, загружается позиция модуля «CustomSearchBox». Если нет, возвращается нормальный пункт меню. Вы можете изменить «CustomSearchBox» на все, что захотите, но если вы не забудете использовать одно и то же значение в следующих шагах.

2. Создать новый модуль поиска

Создайте модуль поиска и установите необходимые параметры (я предлагаю скрыть заголовок модуля).

Опубликовать модуль в пользовательской позиции «CustomSearchBox»

3. Создайте новый пункт меню

Элемент меню может быть любого типа, я предлагаю «Внешний URL», а имя ДОЛЖНО быть «CustomSearchBox».

Сохраните свой пункт меню, и весь элемент меню будет заменен окном поиска.

Сообщите мне, если что-то неясно.

ответил johanpw 22 ndEurope/Moscowp30Europe/Moscow09bEurope/MoscowMon, 22 Sep 2014 21:05:48 +0400 2014, 21:05:48
1

Хотя вы говорите, что не хотите использовать сторонние расширения, у меня есть решение, которое использует RokCandy из RocketTheme . Это небольшой фрагментарный компонент, который позволяет очень легко добавить поле поиска в меню. Просто установите плагин и создайте новый макрос следующим образом:

Макрос

[searchfield] [/searchfield]

HTML

<form action = "index.php" method = "post" class = "form-inline" _lpchecked = "1">
 <input name = "searchword" id = "mod-search-searchword" maxlength = "20" class = "inputbox search-query" type = "text" size = "20" value = "Search ..." onblur = "if (this.value == '') this.value = 'Поиск ...';" onfocus = "if (this.value == 'Поиск ...') this.value = '';">
 <input type = "hidden" name = "task" value = "search">
 <input type = "hidden" name = "option" value = "com_search">
 <input type = "hidden" name = "Itemid" value = "101">

Сохранить и закрыть.

Теперь создайте пункт меню для окна поиска (я предлагаю Внешний URL как тип, но любой тип элемента меню будет делать), а в поле Заголовок добавьте [searchfield] [/searchfield]:

Поле поиска в меню

RokCandy заменит заголовок кодом в макросе, и вы получите поле поиска в меню:

Результат

ответил johanpw 28 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowSun, 28 Sep 2014 05:14:32 +0400 2014, 05:14:32

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132