메뉴 항목으로 모듈


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()하는 자바 스크립트 장애인 브라우저에서 작동하지 않습니다.
Farahmand

차라리 jQuery를 사용하여 요소를 옮기고 더 나은 방법이 없다면 질문에 설명 된 기술을 사용하지 않을 것입니다.
web-tiki

1
메가 메뉴 확장 또는 스 니펫 코드를 사용하여 모듈을 드롭 다운에로드하는 스 니펫 유형 시스템을 사용해야한다고 생각합니다. Nonumber 스 니펫과 nonumber Modules Anywhere가 결합 된 것 같습니다. 스톡 메뉴 시스템은이를 위해 만들어진 것이 아닙니다. 메뉴 출력을 재정의하는 것이 가능하다고 생각하지만, 업그레이드 가능한 플러그인을 사용하지 않고 완전히 사용자 정의 메뉴가 있다는 단점이 있습니다.
Brian Peat

브라이언 말이 맞아 메뉴를 재정의하고 기능을 다시 작성하거나 타사를 활용해야합니다. NoNumber는 가장 부풀린 타사 옵션입니다.
페이

지금 모듈에 대한 링크를 어떻게 생성하고 있습니까? 메뉴에 대한 작업 링크가 있습니까?
David Fritsch

답변:


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메뉴 항목 제목이 "CustomSearchBox"인지 확인하는 29 번 줄부터 문 을 추가했습니다 . 이 경우 모듈 위치 "CustomSearchBox"가로드됩니다. 그렇지 않으면 일반 메뉴 항목이 반환됩니다. "CustomSearchBox"를 원하는 것으로 변경할 수 있지만 다음 단계에서 동일한 값을 사용해야합니다.

2. 새로운 검색 모듈 만들기

검색 모듈을 작성하고 필요에 따라 매개 변수를 설정하십시오 (모듈 제목을 숨기는 것이 좋습니다).

사용자 정의 위치 "CustomSearchBox"에 모듈 공개

3. 새로운 메뉴 항목을 만듭니다

메뉴 항목은 모든 유형이 될 수 있으며 "외부 URL"을 제안하고 이름은 "CustomSearchBox"여야합니다.

메뉴 항목을 저장하면 전체 메뉴 항목이 검색 창으로 바뀝니다!

불분명 한 것이 있으면 알려주세요.


답변을위한 Thx. 템플릿 (LOGO)에 이미 가지고있는 모듈 위치로 기술을 사용해 보았지만 작동하지 않는 것 같습니다. 내 템플릿에서 "CustomSearchBox"위치를 만들어서 사용해야합니까?
웹 티키

예, 맞춤 위치 "CustomSearchBox"를 만들어 사용해야합니다. : 또는 당신은 여기에 위의 코드에서 변경할 수 있습니다 $linktype == "CustomSearchBox"여기$position = 'CustomSearchBox';
드미트리 Rekun

실제로 위치를 만들 필요는 없습니다 (index.php 또는 template.xml 파일에서). 간단히 CustomSearchBox모듈 위치 필드에 쓰고 Enter를 누르십시오.
johanpw

좋아, 마지막 으로이 문제를 해결할 시간이 있었으므로 코드를 조정하여 작동시켜야했습니다. 1 / 어떤 이유로 메뉴 항목에서 이미지를 사용하고 있었기 때문에 깨우지 않았습니다. 2 / 코드의 30 행을로 변경했습니다 $document = JFactory::getDocument();. 이제 작동하지만 이미지를 다시 추가하는 방법을 찾아야합니다.
웹 티키

좀 더 수정 : 메뉴 항목 제목이 아닌 CSS 메뉴 항목 클래스를 기반으로 if 문을 기반 $linktype으로하고 echo 함수를 추가했습니다 . 코드는 여기에서 볼 수 있습니다 : phpad.org/1645824385 . 올바른 방향으로 나를 가리켜 주셔서 감사합니다. 이것은 내가 한동안 달성하고 싶었던 것입니다. 굉장합니다! :)
웹 티키

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.