Mô-đun như mục menu


11

Tôi cần chèn mô-đun tìm kiếm dưới dạng một mục menu (mô-đun menu mặc định).

Tôi cần đầu ra này:

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

Suy nghĩ đầu tiên của tôi sẽ là nhân đôi mô-đun menu mặc định hai lần:

  1. Một để hiển thị các mục menu trước mô-đun tìm kiếm mà không có </ul>thẻ đóng
  2. Một cái khác để hiển thị các mục menu sau mô-đun tìm kiếm mà không có <ul>thẻ mở

Và chèn mô-đun tìm kiếm vào giữa chúng. Đây dường như không phải là cách dễ nhất và dễ bảo trì nhất để đạt được mục tiêu của tôi vì nó yêu cầu:

  • 3 vị trí mô-đun cho menu
  • 2 menu khác nhau trong trình quản lý menu

Tôi biết tôi có thể sử dụng một số mô-đun menu lớn để làm điều này nhưng tôi muốn tránh các tiện ích mở rộng của bên thứ ba và sử dụng mã tùy chỉnh mà tôi có thể kiểm soát.

Làm thế nào tôi có thể thêm một mô-đun như một mục menu trong menu mặc định?


Bạn có thể sử dụng hai menu khác nhau + một tìm kiếm với một số thủ thuật CSS nhưng nếu bạn muốn chính xác cấu trúc trên, bạn có thể xem xét các jQuerychức năng như append()hoặc prepend()không hoạt động trên các trình duyệt bị vô hiệu hóa javascript.
Farahmand

Tôi thà không sử dụng jQuery để di chuyển các phần tử xung quanh và sử dụng kỹ thuật mà tôi đã mô tả trong câu hỏi nếu không có cách nào tốt hơn ...
web-tiki

1
Tôi nghi ngờ bạn sẽ phải sử dụng tiện ích mở rộng menu lớn hoặc hệ thống loại đoạn mã sẽ tải mô-đun vào trình đơn thả xuống bằng cách kéo nó vào bằng mã đoạn. Nonumber Snippets kết hợp với các mô-đun nonumber Bất cứ nơi nào có thể sẽ hoạt động. Hệ thống menu chứng khoán không được xây dựng cho việc này. Ý tôi là, tôi đoán có thể chỉ ghi đè đầu ra của menu, nhưng nhược điểm là sau đó bạn có một menu hoàn toàn tùy chỉnh thay vì chỉ sử dụng một số bổ sung có thể nâng cấp.
Brian Peat

Khá chắc chắn rằng Brian đúng. Bạn cần ghi đè menu và viết lại các chức năng của nó hoặc bạn phải sử dụng bên thứ ba. NoNumber sẽ là lựa chọn bên thứ ba ít ỏi nhất của bạn.
Faye

Làm thế nào bạn đang tạo một liên kết đến các mô-đun ngay bây giờ? Bạn có một liên kết làm việc với menu?
David Fritsch

Câu trả lời:


4

Đây là một thay thế để tải mô-đun tìm kiếm trong menu của bạn. Nó đòi hỏi một vài bước đơn giản:

1. Ghi đè mod_menumô-đun của bạn

  • Tạo ghi đè trong thư mục mẫu của bạn \templates\YOURTEMPLATE\html\mod_menu\default_url.php.
  • Sao chép các nội dung sau vào tệp:

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;
}

Tôi đã thêm một if-elsecâu lệnh bắt đầu từ dòng # 29, để kiểm tra xem tiêu đề mục menu có phải là "CustomSearchBox" không. Nếu đó là trường hợp, vị trí mô-đun "CustomSearchBox" được tải. Nếu không, mục menu bình thường được trả lại. Bạn có thể thay đổi "CustomSearchBox" thành bất cứ điều gì bạn thích, nhưng nếu bạn nhớ sử dụng cùng một giá trị trong các bước sau.

2. Tạo mô-đun tìm kiếm mới

Tạo mô-đun tìm kiếm và đặt các tham số khi cần (Tôi đề nghị ẩn tiêu đề mô-đun).

Xuất bản mô-đun đến vị trí tùy chỉnh "CustomSearchBox"

3. Tạo một mục menu mới

Mục menu có thể là bất kỳ loại nào, tôi đề xuất "URL bên ngoài" và tên PHẢI là "CustomSearchBox".

Lưu mục menu của bạn và toàn bộ mục menu sẽ được thay thế bằng hộp tìm kiếm!

Hãy cho tôi biết nếu một cái gì đó không rõ ràng.


Thx cho câu trả lời. Tôi đã thử sử dụng kỹ thuật của bạn với vị trí mô-đun tôi đã có trong mẫu (LOGO) nhưng dường như nó không hoạt động. Tôi có nên thử tạo vị trí "CustomSearchBox" trong mẫu của mình và sử dụng vị trí đó không?
web-tiki

Có, bạn nên tạo vị trí tùy chỉnh "CustomSearchBox" và sử dụng nó. Hoặc bạn có thể thay đổi nó trong đoạn mã trên tại đây: $linktype == "CustomSearchBox"và tại đây$position = 'CustomSearchBox';
Dmitry Rekun

Bạn thực sự không phải tạo vị trí (trong tệp index.php hoặc tệp template.xml). Chỉ cần viết CustomSearchBoxvào trường vị trí mô-đun và nhấn enter.
johanpw

Ok, tôi cuối cùng đã có thời gian để vượt qua điều này, tôi đã phải điều chỉnh mã của bạn để làm cho nó hoạt động. 1 / Vì một số lý do, đó không phải là wotking vì tôi đang sử dụng và hình ảnh trong mục menu. 2 / Tôi đã thay đổi dòng 30 mã của bạn thành $document = JFactory::getDocument();. Bây giờ nó hoạt động nhưng tôi sẽ phải tìm cách thêm lại hình ảnh của mình.
web-tiki

Tinh chỉnh thêm một số: Tôi dựa vào câu lệnh if trên lớp mục menu CSS thay vì dựa trên tiêu đề mục menu và thêm vào $linktypechức năng echo. Mã này có thể nhìn thấy ở đây: phpad.org/1645824385 . Cảm ơn vì đã chỉ cho tôi đi đúng hướng, đây là điều mà tôi muốn đạt được trong một thời gian bây giờ thật tuyệt vời! :)
web-tiki

1

Mặc dù bạn nói rằng bạn không muốn sử dụng tiện ích mở rộng của bên thứ ba, tôi có một giải pháp sử dụng RokCandy từ RocketTheme . Đây là một thành phần đoạn nhỏ giúp dễ dàng thêm trường tìm kiếm vào menu. Chỉ cần cài đặt plugin và tạo một macro mới như thế này:

Vĩ mô

 [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">

Lưu và đóng.

Bây giờ tạo một mục menu cho hộp tìm kiếm (tôi đề xuất External URLlà loại, nhưng bất kỳ loại mục menu nào cũng được) và trong trường Tiêu đề , hãy thêm [searchfield][/searchfield]:

Tìm kiếm trong menu

RokCandy sẽ thay thế tiêu đề bằng mã trong macro và bạn sẽ nhận được một trường tìm kiếm trong menu:

Kết quả

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.