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