Modul als Menüpunkt


11

Ich muss das Suchmodul als Menüelement einfügen (Standardmenümodul).

Ich brauche diese Ausgabe:

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

Meine ersten Gedanken wären, das Standardmenü-Modul zweimal zu duplizieren:

  1. Eine, um Menüelemente vor dem Suchmodul ohne das schließende </ul>Tag anzuzeigen
  2. Eine andere, um Menüelemente nach dem Suchmodul ohne das öffnende <ul>Tag anzuzeigen

Und fügen Sie das Suchmodul dazwischen ein. Dies scheint nicht der einfachste und am besten zu wartende Weg zu sein, um mein Ziel zu erreichen, da es Folgendes erfordert:

  • 3 Modulpositionen für das Menü
  • 2 verschiedene Menüs im Menü-Manager

Ich weiß, dass ich einige der Mega-Menümodule verwenden könnte, um dies zu tun, aber ich möchte Erweiterungen von Drittanbietern vermeiden und benutzerdefinierten Code verwenden, den ich steuern kann.

Wie kann ich ein Modul als Menüelement im Standardmenü hinzufügen?


Sie können zwei verschiedene Menüs + eine Suche mit einigen CSS Tricks verwenden , aber wenn Sie genau mit der obigen Struktur wollen, können Sie prüfen , jQueryFunktionen wie append()oder prepend()die nicht auf JavaScript-fähigen Browser arbeiten.
Farahmand

Ich würde jQuery lieber nicht verwenden, um Elemente zu verschieben und die in der Frage beschriebene Technik zu verwenden, wenn es keinen besseren Weg gibt ...
web-tiki

1
Ich vermute, Sie müssen entweder eine Mega-Menüerweiterung oder ein Snippet-System verwenden, das ein Modul in die Dropdown-Liste lädt, indem es mit einem Snippet-Code eingezogen wird. Nicht nummerierte Snippets in Kombination mit nicht nummerierten Modulen überall würden wahrscheinlich funktionieren. Das Aktienmenüsystem ist dafür einfach nicht gebaut. Ich meine, ich denke, es ist möglich, nur die Menüausgabe zu überschreiben, aber der Nachteil ist dann, dass Sie ein vollständig benutzerdefiniertes Menü haben, anstatt nur einige von der Stange aktualisierbare Plugins zu verwenden.
Brian Peat

Ich bin mir ziemlich sicher, dass Brian Recht hat. Sie müssen entweder das Menü überschreiben und seine Funktionen neu schreiben, oder Sie müssen einen Drittanbieter verwenden. NoNumber wäre Ihre am wenigsten aufgeblähte Option eines Drittanbieters.
Faye

Wie generieren Sie gerade einen Link zum Modul? Haben Sie einen funktionierenden Link zum Menü?
David Fritsch

Antworten:


4

Hier ist eine Alternative, um das Suchmodul in Ihr Menü zu laden. Es erfordert ein paar einfache Schritte:

1. Überschreiben Sie Ihr mod_menuModul

  • Erstellen Sie eine Überschreibung in Ihrem Vorlagenordner \templates\YOURTEMPLATE\html\mod_menu\default_url.php.
  • Kopieren Sie den folgenden Inhalt in die Datei:

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

Ich habe eine if-elseAnweisung ab Zeile 29 hinzugefügt , die prüft, ob der Titel des Menüelements "CustomSearchBox" lautet. In diesem Fall wird die Modulposition "CustomSearchBox" geladen. Wenn nicht, wird der normale Menüpunkt zurückgegeben. Sie können "CustomSearchBox" nach Belieben ändern. Wenn Sie jedoch daran denken, in den folgenden Schritten denselben Wert zu verwenden.

2. Erstellen Sie ein neues Suchmodul

Erstellen Sie das Suchmodul und stellen Sie die Parameter nach Bedarf ein (ich empfehle, den Modultitel auszublenden).

Veröffentlichen Sie das Modul an der benutzerdefinierten Position "CustomSearchBox".

3. Erstellen Sie einen neuen Menüpunkt

Der Menüpunkt kann ein beliebiger Typ sein, ich schlage "Externe URL" vor und der Name MUSS "CustomSearchBox" sein.

Speichern Sie Ihren Menüpunkt und der gesamte Menüpunkt wird durch das Suchfeld ersetzt!

Lassen Sie mich wissen, wenn etwas unklar ist.


Danke für die Antwort. Ich habe versucht, Ihre Technik mit einer Modulposition zu verwenden, die ich bereits in meiner Vorlage (LOGO) hatte, aber es schien nicht zu funktionieren. Sollte ich versuchen, eine "CustomSearchBox" -Position in meiner Vorlage zu erstellen und diese verwenden?
Web-Tiki

Ja, Sie sollten die benutzerdefinierte Position "CustomSearchBox" erstellen und verwenden. Oder Sie können es im obigen Code hier ändern: $linktype == "CustomSearchBox"und hier$position = 'CustomSearchBox';
Dmitry Rekun

Sie müssen die Position nicht erstellen (in Ihren Dateien index.php oder template.xml). Schreiben Sie einfach CustomSearchBoxin das Feld für die Modulposition und drücken Sie die Eingabetaste.
Johanpw

Ok, ich hatte endlich Zeit, das durchzuhalten. Ich musste Ihren Code optimieren, damit er funktioniert. 1 / Aus irgendeinem Grund wurde nicht gewotzt, weil ich ein Bild im Menüpunkt verwendet habe. 2 / Ich habe Zeile 30 Ihres Codes in geändert $document = JFactory::getDocument();. Jetzt funktioniert es, aber ich muss einen Weg finden, mein Bild wieder hinzuzufügen.
Web-Tiki

Weiter optimiert: Ich habe die if-Anweisung auf der CSS- Menüelementklasse und nicht auf dem Titel des Menüelements basiert und die $linktypein der Echo-Funktion hinzugefügt . Der Code ist hier sichtbar: phpad.org/1645824385 . Danke, dass du mich in die richtige Richtung gelenkt hast. Das ist etwas, was ich schon seit einiger Zeit erreichen wollte. Es ist großartig! :)
Web-Tiki

1

Obwohl Sie sagen, dass Sie keine Erweiterungen von Drittanbietern verwenden möchten , habe ich eine Lösung, die RokCandy von RocketTheme verwendet . Es ist eine kleine Snippet-Komponente, die es sehr einfach macht, das Suchfeld im Menü hinzuzufügen. Installieren Sie einfach das Plugin und erstellen Sie ein neues Makro wie folgt:

Makro

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

Speichern und schließen.

Erstellen Sie nun ein Menüelement für das Suchfeld (ich schlage External URLals Typ vor, aber jeder Menüelementtyp reicht aus) und fügen Sie im Feld Titel Folgendes hinzu [searchfield][/searchfield]:

Suchfeld im Menü

RokCandy ersetzt den Titel durch den Code im Makro und Sie erhalten ein Suchfeld im Menü:

Ergebnis

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.