it-swarm.dev

Modulo come voce di menu

Devo inserire il modulo di ricerca come voce di menu (modulo di menu predefinito).

Ho bisogno di questo risultato:

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

Il mio primo pensiero sarebbe di duplicare due volte il modulo menu predefinito:

  1. Uno per visualizzare le voci di menu prima del modulo di ricerca senza la chiusura </ul> tag
  2. Un altro per visualizzare le voci di menu dopo il modulo di ricerca senza l'apertura <ul> tag

E inserisci il modulo di ricerca tra di loro. Questo non sembra essere il modo più semplice e più sostenibile per raggiungere il mio obiettivo in quanto richiede:

  • 3 posizioni del modulo per il menu
  • 2 diversi menu nel menu manager

So che potrei usare alcuni dei moduli del menu mega per fare questo, ma vorrei evitare estensioni di terze parti e utilizzare il codice personalizzato che posso controllare.

Come posso aggiungere un modulo come voce di menu nel menu predefinito?

11
web-tiki

Ecco un'alternativa per caricare il modulo di ricerca nel tuo menu. Richiede un paio di semplici passaggi:

1. Sostituisci il tuo mod_menu modulo

  • Crea una sostituzione nella cartella dei modelli \templates\YOURTEMPLATE\html\mod_menu\default_url.php.
  • Copia i seguenti contenuti nel file:

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;
}

Ho aggiunto un if-else istruzione che inizia alla riga # 29, che controlla se il titolo della voce di menu è "CustomSearchBox". In tal caso, viene caricata la posizione del modulo "CustomSearchBox". In caso contrario, viene restituita la normale voce di menu. Puoi modificare "CustomSearchBox" in qualsiasi cosa ti piaccia, ma se ricordi di utilizzare lo stesso valore nei seguenti passaggi.

2. Creare un nuovo modulo di ricerca

Crea il modulo di ricerca e imposta i parametri secondo necessità (suggerisco di nascondere il titolo del modulo).

Pubblica il modulo nella posizione personalizzata "CustomSearchBox"

3. Creare una nuova voce di menu

La voce di menu può essere di qualsiasi tipo, suggerisco "URL esterno" e il nome DEVE essere "CustomSearchBox".

Salva la tua voce di menu e l'intera voce di menu verrà sostituita con la casella di ricerca!

Fammi sapere se qualcosa non è chiaro.

4
johanpw

Anche se dici di non voler utilizzare estensioni di terze parti, ho una soluzione che utilizza RokCandy da RocketTheme . È un piccolo componente snippet che semplifica l'aggiunta del campo di ricerca nel menu. Installa semplicemente il plugin e crea una nuova macro come questa:

Macro

 [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">

Salva e chiudi.

Ora crea una voce di menu per la casella di ricerca (suggerisco External URL come tipo, ma funzionerà qualsiasi tipo di voce di menu) e nel campo Titolo , aggiungi [searchfield][/searchfield]:

Searchfield in menu

RokCandy sostituirà il titolo con il codice nella macro e otterrai un campo di ricerca nel menu:

Result

1
johanpw