メニュー項目としてのモジュール


11

検索モジュールをメニュー項目(デフォルトのメニューモジュール)として挿入する必要があります。

私はこの出力が必要です:

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

私の最初の考えは、デフォルトのメニューモジュールを2回複製することです。

  1. 終了</ul>タグなしで検索モジュールの前にメニュー項目を表示するもの
  2. 開始<ul>タグなしで検索モジュールの後にメニュー項目を表示するもう1つの方法

そして、それらの間に検索モジュールを挿入します。これは、必要に応じて私の目的を達成するための最も簡単で保守可能な方法ではないようです。

  • メニューの3つのモジュール位置
  • メニューマネージャの2つの異なるメニュー

メガメニューモジュールのいくつかを使用してこれを実行できることはわかっていますが、サードパーティの拡張機能を避け、自分で制御できるカスタムコードを使用したいと思います。

デフォルトメニューのメニュー項目としてモジュールを追加するにはどうすればよいですか?


2つの異なるメニュー+いくつかのCSSトリックを使用した1つの検索を使用できますが、上記の構造が正確に必要な場合は、JavaScriptが無効なブラウザーではjQuery機能しない、append()または機能しprepend()ない機能を検討できます。
Farahmand 2014

要素を移動するためにjQueryを使用せず、質問で説明した手法を使用した方がよい場合は、この方法を使用しません...
web-tiki

1
メガメニュー拡張を使用するか、スニペットコードでモジュールをプルしてドロップダウンにロードするスニペットタイプシステムを使用する必要があると思います。Nonumberスニペットとnonumber Modules Anywhereを組み合わせるとおそらく機能します。ストックメニューシステムは、このために構築されていません。つまり、メニュー出力を単にオーバーライドすることは可能だと思いますが、欠点は、既成のアップグレード可能なプラグインを使用するだけでなく、完全にカスタムメニューがあることです。
ブライアンピート

ブライアンの言う通りだ。メニューを上書きして機能を書き換えるか、サードパーティを利用する必要があります。NoNumberは、最も肥大化したサードパーティのオプションです。
Faye

現在、モジュールへのリンクをどのように生成していますか?メニューへのリンクはありますか?
David Fritsch 2014

回答:


4

メニューに検索モジュールをロードする1つの方法を次に示します。いくつかの簡単な手順が必要です。

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メニュー項目のタイトルが「CustomSearchBox」であるかどうかをチェックするステートメントを29行目から追加しました。その場合、モジュールの位置「CustomSearchBox」がロードされます。そうでない場合は、通常のメニュー項目が返されます。"CustomSearchBox"を好きなように変更できますが、次の手順でも忘れずに同じ値を使用してください。

2.新しい検索モジュールを作成します

検索モジュールを作成し、必要に応じてパラメーターを設定します(モジュールのタイトルを非表示にすることをお勧めします)。

モジュールをカスタム位置「CustomSearchBox」に公開します

3.新しいメニュー項目を作成します

メニュー項目はどのタイプでもかまいません。「外部URL」をお勧めします。名前は「CustomSearchBox」にする必要があります。

メニュー項目を保存すると、メニュー項目全体が検索ボックスに置き換わります!

不明な点がある場合はお知らせください。


答えはThx。テンプレート(LOGO)に既にあるモジュールの位置であなたのテクニックを使ってみましたが、うまくいかないようです。テンプレートに「CustomSearchBox」の位置を作成して、それを使用する必要がありますか?
web-tiki 2014

はい、カスタム位置「CustomSearchBox」を作成して使用する必要があります。または、上記のコードでここを変更できます:$linktype == "CustomSearchBox"そしてここ$position = 'CustomSearchBox';
Dmitry Rekun

実際に(index.phpまたはtemplate.xmlファイルに)位置を作成する必要はありません。CustomSearchBoxモジュールの位置フィールドに書き込み、Enterキーを押すだけです。
johanpw 14

さて、私は最終的にこれを乗り越える時間がありました、私はそれを機能させるためにあなたのコードを微調整しなければなりませんでした。1 /何らかの理由で、メニュー項目でとimageを使用していたため、問題がありませんでした。2 /コードの30行目をに変更しました$document = JFactory::getDocument();。これで機能しますが、画像を再度追加する方法を見つける必要があります。
web-tiki 2014年

さらに微調整:ifステートメントをメニュー項目のタイトルではなくCSSメニュー項目クラスに基づいて$linktype、echo関数に追加しました。コードは、phpad.org / 1645824385にあります。私を正しい方向に向けてくれてありがとう、これは私がしばらくの間達成したかったことですが、今は素晴らしいです!:)
web-tiki 2014年

1

あなたはサードパーティの拡張機能を使いたくないと言っていますが、私にはRocketThemeのRokCandyを使用するソリューションがあります。これは小さなスニペットコンポーネントで、メニューに検索フィールドを非常に簡単に追加できます。プラグインをインストールして、次のような新しいマクロを作成します。

大きい

 [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がタイトルをマクロのコードに置き換え、メニューに検索フィールドが表示されます。

結果

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.