it-swarm-es.tech

Módulo como elemento de menú

Necesito insertar el módulo de búsqueda como elemento de menú (módulo de menú predeterminado).

Necesito esta salida:

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

Mis primeros pensamientos serían duplicar el módulo de menú predeterminado dos veces:

  1. Uno para mostrar los elementos del menú antes del módulo de búsqueda sin el cierre </ul> etiqueta
  2. Otro para mostrar los elementos del menú después del módulo de búsqueda sin abrir <ul> etiqueta

E inserte el módulo de búsqueda entre ellos. Esta no parece ser la forma más fácil y fácil de lograr mi objetivo, ya que requiere:

  • 3 posiciones de módulo para el menú
  • 2 menús diferentes en el administrador de menús

Sé que podría usar algunos de los módulos de mega menú para hacer esto, pero me gustaría evitar extensiones de terceros y usar código personalizado que pueda controlar.

¿Cómo puedo agregar un módulo como elemento de menú en el menú predeterminado?

11
web-tiki

Aquí hay una alternativa para cargar el módulo de búsqueda en su menú. Requiere un par de pasos simples:

1. Anula tu mod_menu módulo

  • Crea una anulación en tu carpeta de plantillas \templates\YOURTEMPLATE\html\mod_menu\default_url.php.
  • Copie los siguientes contenidos al archivo:

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

He agregado un if-else declaración que comienza en la línea 29, que verifica si el título del elemento del menú es "CustomSearchBox". Si ese es el caso, se carga la posición del módulo "CustomSearchBox". Si no, se devuelve el elemento de menú normal. Puedes cambiar "CustomSearchBox" a lo que quieras, pero si recuerdas usar el mismo valor en los siguientes pasos.

2. Crear un nuevo módulo de búsqueda

Cree el módulo de búsqueda y configure los parámetros según sea necesario (sugiero ocultar el título del módulo).

Publique el módulo en la posición personalizada "CustomSearchBox"

3. Crear un nuevo elemento de menú

El elemento del menú puede ser de cualquier tipo, sugiero "URL externa" y el nombre DEBE ser "CustomSearchBox".

¡Guarde su elemento de menú, y todo el elemento de menú será reemplazado por el cuadro de búsqueda!

Avísame si algo no está claro.

4
johanpw

Aunque diga que no desea usar extensiones de terceros, tengo una solución que usa RokCandy de RocketTheme . Es un componente de fragmento pequeño que hace que sea muy fácil agregar el campo de búsqueda en el menú. Simplemente instale el complemento y cree una nueva macro como esta:

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

Guardar y cerrar.

Ahora cree un elemento de menú para el cuadro de búsqueda (sugiero External URL como tipo, pero cualquier tipo de elemento de menú servirá), y en el campo Título , agregue [searchfield][/searchfield]:

Searchfield in menu

RokCandy reemplazará el título con el código en la macro, y obtendrá un campo de búsqueda en el menú:

Result

1
johanpw