Je dois insérer le module de recherche comme élément de menu (module de menu par défaut).
J'ai besoin de cette sortie:
<ul>
<li>menu item</li>
<li>menu item</li>
<li>SEARCH MODULE</li>
<li>menu item</li>
...
</ul>
Ma première idée serait de dupliquer deux fois le module de menu par défaut:
</ul>
tag<ul>
tagEt insérez le module de recherche entre eux. Cela ne semble pas être le moyen le plus simple et le plus facile à atteindre pour atteindre mon objectif car il nécessite:
Je sais que je pourrais utiliser certains des méga-menus pour cela, mais j'aimerais éviter les extensions tierces et utiliser un code personnalisé que je peux contrôler.
Comment puis-je ajouter un module en tant qu'élément de menu dans le menu par défaut?
Voici une alternative pour charger le module de recherche dans votre menu. Cela nécessite quelques étapes simples:
mod_menu
module\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;
}
J'ai ajouté un if-else
déclaration à partir de la ligne 29, qui vérifie si le titre de l'élément de menu est "CustomSearchBox". Si tel est le cas, la position du module "CustomSearchBox" est chargée. Sinon, l'élément de menu normal est renvoyé. Vous pouvez remplacer "CustomSearchBox" par tout ce que vous voulez, mais si vous vous en souvenez, utilisez la même valeur dans les étapes suivantes.
Créez le module de recherche et définissez les paramètres nécessaires (je suggère de masquer le titre du module).
Publier le module à la position personnalisée "CustomSearchBox"
L'élément de menu peut être n'importe quel type, je suggère "URL externe" et le nom DOIT être "CustomSearchBox".
Enregistrez votre élément de menu, et l'élément de menu entier sera remplacé par le champ de recherche!
Faites-moi savoir si quelque chose n'est pas clair.
Bien que vous disiez que vous ne souhaitiez pas utiliser d'extensions tierces, j'ai une solution qui utilise RokCandy de RocketTheme . C'est un petit composant d'extrait qui facilite l'ajout du champ de recherche dans le menu. Installez simplement le plugin et créez une nouvelle macro comme celle-ci:
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">
Sauver et fermer.
Maintenant, créez un élément de menu pour le champ de recherche (je suggère External URL
en tant que type, mais tout type d’élément de menu convient), et dans le champ Titre , ajoutez [searchfield][/searchfield]
:
RokCandy remplacera le titre par le code dans la macro et vous obtiendrez un champ de recherche dans le menu: