模块作为菜单项


11

我需要将搜索模块作为菜单项插入(默认菜单模块)。

我需要这个输出:

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

我的第一个想法是将默认菜单模块复制两次:

  1. 一个用于在搜索模块之前显示菜单项且不带有结束</ul>标签的菜单项
  2. 另一个在不带开始<ul>标签的搜索模块之后显示菜单项

并将搜索模块插入它们之间。这似乎并不是实现我的目标的最简单,最可维护的方法,因为它需要:

  • 菜单的3个模块位置
  • 菜单管理器中的2个不同菜单

我知道我可以使用某些大型菜单模块来执行此操作,但我想避免使用第三方扩展,并使用可以控制的自定义代码。

如何在默认菜单中将模块添加为菜单项?


您可以使用两种不同的菜单+一种使用CSS技巧的搜索,但是如果您希望完全采用上述结构,则可以考虑jQuery使用类似的功能,append()或者prepend()在禁用JavaScript的浏览器上无法使用的功能。
Farahmand 2014年

如果没有更好的方法,我宁愿不使用jQuery来移动元素并使用我在问题中描述的技术...
web-tiki 2014年

1
我怀疑您要么必须使用大型菜单扩展名,要么要使用摘要类型的系统,该系统通过使用摘要代码将其拉入下拉菜单中,从而将模块加载到下拉菜单中。Nonumber代码段与Nonumber模块结合使用在任何地方都可能有效。库存菜单系统并非为此而构建。我的意思是,我想可以覆盖菜单输出,但缺点是您拥有一个完全自定义的菜单,而不是仅使用一些现成的可升级插件。
Brian Peat 2014年

可以肯定Brian是正确的。您要么需要覆盖菜单并重写其功能,要么必须利用第三方。NoNumber将是您最不blo肿的第三方选择。
Faye 2014年

您现在如何生成到该模块的链接?您是否有指向菜单的有效链接?
David Fritsch 2014年

Answers:


4

这是将搜索模块加载到菜单中的一种替代方法。它需要几个简单的步骤:

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从第29行开始添加了一条语句,该语句检查菜单项标题是否为“ CustomSearchBox”。在这种情况下,将加载模块位置“ CustomSearchBox”。如果不是,则返回普通菜单项。您可以将“ CustomSearchBox”更改为所需的任何值,但是如果您确实记得在以下步骤中使用相同的值。

2.创建一个新的搜索模块

创建搜索模块并根据需要设置参数(我建议隐藏模块标题)。

将模块发布到自定义位置“ CustomSearchBox”

3.创建一个新的菜单项

菜单项可以是任何类型,我建议使用“外部URL”,并且名称必须为“ CustomSearchBox”。

保存菜单项,整个菜单项将被搜索框替换!

让我知道是否有不清楚的地方。


谢谢。我尝试将您的技术与模板(LOGO)中已有的模块位置结合使用,但似乎不起作用。我是否应该尝试在模板中创建“ CustomSearchBox”位置并使用该位置?
web-tiki 2014年

是的,您应该创建自定义位置“ CustomSearchBox”并使用它。或者,您可以在上面的代码中更改它:$linktype == "CustomSearchBox"在这里$position = 'CustomSearchBox';
Dmitry Rekun 2014年

您实际上不必创建位置(在index.php或template.xml文件中)。只需CustomSearchBox在模块位置字段中输入,然后按Enter。
johanpw 2014年

好的,我最终有时间解决这个问题,我必须调整您的代码以使其起作用。1 /由于某种原因,它没有启动,因为我正在使用菜单项中的和图像。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将标题替换为宏中的代码,您将在菜单中获得搜索字段:

结果

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.