Модуль як пункт меню


11

Мені потрібно вставити модуль пошуку як пункт меню (модуль меню за замовчуванням).

Мені потрібен цей вихід:

<ul>
    <li>menu item</li>
    <li>menu item</li>
    <li>SEARCH MODULE</li>
    <li>menu item</li>
    ...
</ul>

Мої перші думки полягали б у тому, щоб двічі повторити модуль меню за замовчуванням:

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

І вставити між ними модуль пошуку. Здається, це не найпростіший і найрентабельніший спосіб досягти моєї мети, як цього потрібно:

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

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

Як можна додати модуль як пункт меню в меню за замовчуванням?


Ви можете використовувати два різних меню + один пошук за допомогою деяких хитрощів CSS, але якщо ви хочете точно вказану вище структуру, ви можете розглянути jQueryтакі функції, як append()або prepend()які не працюватимуть у браузерах з обмеженим JavaScript.
Farahmand

Я б краще не використовував jQuery для переміщення елементів і використання техніки, описаної у питанні, якщо немає кращого способу ...
web-tiki

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

Досить впевнений, прав Брайана. Вам або потрібно змінити меню і переписати його функції, або вам доведеться скористатися третьою стороною. NoNumber буде вашим найменш роздутим стороннім варіантом.
Faye

Як ви зараз створюєте посилання на модуль? Чи є у вас робоче посилання на меню?
Девід Фрітш

Відповіді:


4

Ось одна з альтернатив для завантаження пошукового модуля у своє меню. Для цього потрібно кілька простих кроків:

1. Перезазначте свій mod_menuмодуль

  • Створіть перевизначення у папці шаблонів \templates\YOURTEMPLATE\html\mod_menu\default_url.php.
  • Скопіюйте у файл такий вміст:

default_url.php

 <?php
 /**
 * @package     Joomla.Site
 * @subpackage  mod_menu
 *
 * @copyright   Copyright (C) 2005 - 2014 Open Source Matters, Inc. All rights   reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

defined('_JEXEC') or die;

// Note. It is important to remove spaces between elements.
$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 . '</span> ' :
        $linktype = '<img src="' . $item->menu_image . '" alt="' . $item->title . '"  />';
 }
 else
 {
    $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) :
    default:
    case 0:
?><a <?php echo $class; ?>href="<?php echo $flink; ?>" <?php echo $title; ?>><?php echo $linktype; ?></a><?php
        break;
    case 1:
        // _blank
?><a <?php echo $class; ?>href="<?php echo $flink; ?>" target="_blank" <?php echo $title; ?>><?php echo $linktype; ?></a><?php
        break;
    case 2:
        // window.open
        $options = 'toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes,'.$params->get('window_open');
            ?><a <?php echo $class; ?>href="<?php echo $flink; ?>" onclick="window.open(this.href,'targetWindow','<?php echo $options;?>');return false;" <?php echo $title; ?>><?php echo $linktype; ?></a><?php
        break;
endswitch;
}

Я додав if-elseзаяву, починаючи з рядка №29, який перевіряє, чи назва пункту меню "CustomSearchBox". Якщо це так, завантажується позиція модуля "CustomSearchBox". Якщо ні, нормальний пункт меню повертається. Ви можете змінити "CustomSearchBox" на все, що вам подобається, але якщо ви пам'ятаєте, використовуйте те саме значення в наступних кроках.

2. Створіть новий модуль пошуку

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

Опублікуйте модуль у спеціальній позиції "CustomSearchBox"

3. Створіть новий пункт меню

Пункт меню може бути будь-якого типу, я пропоную "Зовнішня URL-адреса", а назва ОБОВ'ЯЗКОВО "CustomSearchBox".

Збережіть пункт меню, і весь пункт меню буде замінено на поле пошуку!

Повідомте мене, якщо щось незрозуміло.


Thx для відповіді. Я спробував використовувати вашу техніку з положенням модуля, який я вже мав у своєму шаблоні (LOGO), але, схоже, це не спрацювало. Чи варто спробувати створити позицію "CustomSearchBox" у своєму шаблоні та використати це?
web-tiki

Так, ви повинні створити власну позицію "CustomSearchBox" і використовувати її. Або ви можете змінити його у наведеному вище коді тут: $linktype == "CustomSearchBox"а тут$position = 'CustomSearchBox';
Дмитро Рекун

Фактично не потрібно створювати позицію (у файлах index.php або template.xml). Просто запишіть CustomSearchBoxу поле позиції модуля і натисніть клавішу Enter.
johanpw

Гаразд, я, нарешті, встиг пройти це, мені довелося підправити ваш код, щоб він працював. 1 / Чомусь це не wotking, тому що я використовував і зображення в пункті меню. 2 / Я змінив рядок 30 вашого коду на $document = JFactory::getDocument();. Зараз це працює, але мені доведеться знайти спосіб знову додати своє зображення.
web-tiki

Ще трохи підкоригували: я будувати оператор if на класі пункту меню CSS, а не на заголовку пункту меню, і додав $linktypeфункцію echo. Код видно тут: phpad.org/1645824385 . Дякую, що вказали на мене в правильному напрямку, це те, чого я хотів досягти протягом деякого часу, зараз це приголомшливо! :)
web-tiki

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='Search...';" onfocus="if (this.value=='Search...') this.value='';">       
 <input type="hidden" name="task" value="search">
 <input type="hidden" name="option" value="com_search">
 <input type="hidden" name="Itemid" value="101">

Збережіть і закрийте.

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

Поле пошуку в меню

RokCandy замінить заголовок кодом в макросі, і ви отримаєте поле пошуку в меню:

Результат

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.