Modul sebagai item menu

11

Saya perlu memasukkan modul pencarian sebagai item menu (modul menu default).

Saya membutuhkan hasil ini:

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

Pikiran pertama saya adalah menggandakan modul menu default dua kali:

  1. Satu untuk menampilkan item menu sebelum modul pencarian tanpa </ul>tag penutup
  2. Yang lain untuk menampilkan item menu setelah modul pencarian tanpa <ul>tag pembuka

Dan masukkan modul pencarian di antara mereka. Ini tampaknya bukan cara termudah dan paling dapat dipertahankan untuk mencapai tujuan saya karena itu membutuhkan:

  • 3 posisi modul untuk menu
  • 2 menu berbeda di pengelola menu

Saya tahu saya bisa menggunakan beberapa modul menu mega untuk melakukan ini, tetapi saya ingin menghindari ekstensi pihak ketiga dan menggunakan kode khusus yang dapat saya kontrol.

Bagaimana saya bisa menambahkan modul sebagai item menu di menu default?

web-tiki
sumber
Anda dapat menggunakan dua menu yang berbeda + satu pencarian dengan beberapa trik CSS tetapi jika Anda ingin struktur yang tepat di atas, Anda dapat mempertimbangkan jQueryfungsi seperti append()atau prepend()yang tidak akan berfungsi pada browser yang dinonaktifkan javascript.
Farahmand
Saya lebih suka tidak menggunakan jQuery untuk memindahkan elemen dan menggunakan teknik yang saya jelaskan dalam pertanyaan jika tidak ada cara yang lebih baik ...
web-tiki
1
Saya menduga Anda harus menggunakan ekstensi menu mega, atau sistem tipe snippet yang akan memuat modul ke drop down dengan menariknya dengan kode snippet. Cuplikan bukan-jumlah yang dikombinasikan dengan Modul bukan-jumlah di mana saja mungkin akan berfungsi. Sistem menu persediaan tidak dibangun untuk ini. Maksudku, kurasa itu mungkin untuk hanya mengesampingkan output menu, tetapi kekurangannya adalah bahwa Anda memiliki menu sepenuhnya kustom daripada hanya menggunakan beberapa dari plugin yang bisa diupgrade.
Brian Peat
Cukup yakin Brian benar. Anda harus mengganti menu dan menulis ulang fungsinya, atau Anda harus menggunakan pihak ketiga. NoNumber akan menjadi opsi pihak ketiga yang paling tidak Anda kembung.
Faye
Bagaimana Anda menghasilkan tautan ke modul saat ini? Apakah Anda memiliki tautan yang berfungsi ke menu?
David Fritsch

Jawaban:

4

Berikut ini salah satu alternatif untuk memuat modul pencarian di menu Anda. Dibutuhkan beberapa langkah sederhana:

1. Ganti mod_menumodul Anda

  • Buat override di folder template Anda \templates\YOURTEMPLATE\html\mod_menu\default_url.php.
  • Salin konten berikut ke file:

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

Saya telah menambahkan if-elsepernyataan mulai dari baris # 29, yang memeriksa apakah judul item menu adalah "CustomSearchBox". Jika demikian, posisi modul "CustomSearchBox" dimuat. Jika tidak, item menu normal dikembalikan. Anda dapat mengubah "CustomSearchBox" menjadi apa pun yang Anda suka, tetapi jika Anda ingat untuk menggunakan nilai yang sama pada langkah-langkah berikut.

2. Buat modul pencarian baru

Buat modul pencarian dan atur parameter sesuai kebutuhan (saya sarankan untuk menyembunyikan judul modul).

Publikasikan modul ke posisi khusus "CustomSearchBox"

3. Buat item menu baru

Item menu dapat berupa jenis apa pun, saya sarankan "URL Eksternal", dan nama HARUS "CustomSearchBox".

Simpan item menu Anda, dan seluruh item menu akan diganti dengan kotak pencarian!

Beri tahu saya jika ada sesuatu yang tidak jelas.

johanpw
sumber
Terima kasih untuk jawabannya. Saya mencoba menggunakan teknik Anda dengan posisi modul yang sudah saya miliki di template saya (LOGO) tetapi tampaknya tidak berhasil. Haruskah saya mencoba membuat posisi "CustomSearchBox" di templat saya dan menggunakannya?
web-tiki
Ya, Anda harus membuat posisi khusus "CustomSearchBox" dan menggunakannya. Atau Anda dapat mengubahnya dalam kode di atas di sini: $linktype == "CustomSearchBox"dan di sini$position = 'CustomSearchBox';
Dmitry Rekun
Anda sebenarnya tidak harus membuat posisi (dalam file index.php atau template.xml Anda). Cukup tulis CustomSearchBoxdi kolom posisi modul dan tekan enter.
johanpw
Ok, akhirnya saya punya waktu untuk melewati ini, saya harus mengubah kode Anda untuk membuatnya berfungsi. 1 / Untuk beberapa alasan, itu bukan wotking karena saya menggunakan dan gambar dalam item menu. 2 / Saya mengubah baris 30 kode Anda menjadi $document = JFactory::getDocument();. Sekarang berfungsi tetapi saya harus menemukan cara untuk menambahkan gambar saya kembali.
web-tiki
Tweaked more: Saya mendasarkan pernyataan if pada kelas item menu CSS daripada pada judul item menu dan menambahkan $linktypefungsi gema. Kode ini terlihat di sini: phpad.org/1645824385 . Terima kasih telah mengarahkan saya ke arah yang benar ini adalah sesuatu yang ingin saya capai untuk beberapa waktu sekarang ini luar biasa! :)
web-tiki
1

Meskipun Anda mengatakan Anda tidak ingin menggunakan ekstensi pihak ketiga, saya punya solusi yang menggunakan RokCandy dari RocketTheme . Ini adalah komponen snippet kecil yang membuatnya sangat mudah untuk menambahkan bidang pencarian di menu. Cukup instal plugin, dan buat makro baru seperti ini:

Makro

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

Simpan dan tutup.

Sekarang buat item menu untuk kotak pencarian (saya sarankan External URLsebagai tipe, tetapi semua tipe item menu akan dilakukan), dan di kolom Title , tambahkan [searchfield][/searchfield]:

Cari di menu

RokCandy akan mengganti judul dengan kode di makro, dan Anda akan mendapatkan bidang pencarian di menu:

Hasil

johanpw
sumber