質問: メニュー項目としてのモジュール 検索モジュールをメニュー項目(デフォルトのメニューモジュール)として挿入する必要があります。私はこの出力が必要です:<ul> <li>menu item</li> <li>menu item</li> <li>search module</li> <li>menu item</li> ... </ul> 私の最初の考えは、デフォルトのメニューモジュールを2回複製することです。 クローズ</ul>タグなしで検索モジュールの前にメニュー項目を表示するもの もう一方は、開始モジュール<ul>タグなしで検索モジュールの後にメニュー項目を表示します そして、それらの間に検索モジュールを挿入します。これは、必要に応じて私の目的を達成するための最も簡単で保守可能な方法ではないようです。 メニューの3つのモジュール位置 メニューマネージャの2つの異なるメニュー メガメニューモジュールのいくつかを使用してこれを実行できることはわかっていますが、サードパーティの拡張機能を避け、自分で制御できるカスタムコードを使用したいと思います。モジュールをデフォルトメニューのメニュー項目として追加するにはどうすればよいですか?
回答: メニューに検索モジュールをロードする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; } #29行目から始まるif-elseステートメントを追加しました。これは、メニュー項目のタイトルが「customsearchbox」であるかどうかを確認します。その場合、モジュールの位置「customsearchbox」がロードされます。そうでない場合は、通常のメニュー項目が返されます。 "customsearchbox"は好きなように変更できますが、次の手順でも忘れずに同じ値を使用してください。2.新しい検索モジュールを作成します検索モジュールを作成し、必要に応じてパラメーターを設定します(モジュールのタイトルを非表示にすることをお勧めします)。モジュールをカスタム位置 "customsearchbox"に公開3.新しいメニュー項目を作成しますメニュー項目はどのタイプでもかまいません。「外部url」をお勧めします。名前は「customsearchbox」にする必要があります。メニュー項目を保存すると、メニュー項目全体が検索ボックスに置き換わります!不明な点がある場合はお知らせください。