Menü öğesi olarak modül


11

Arama modülünü bir menü öğesi (varsayılan menü modülü) olarak eklemem gerekiyor.

Bu çıktıya ihtiyacım var:

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

İlk düşüncelerim, varsayılan menü modülünü iki kez çoğaltmak olurdu:

  1. Biri arama modülünden önce kapanış </ul>etiketi olmadan menü öğelerini görüntülemek için
  2. Diğeri, arama modülünden sonra açılış <ul>etiketi olmadan menü öğelerini görüntülemek için

Ve arama modülünü aralarına yerleştirin. Bu, amacımın gerektirdiği şekilde başarmanın en kolay ve en sürdürülebilir yolu gibi görünmüyor:

  • Menü için 3 modül konumu
  • Menü yöneticisinde 2 farklı menü

Bunu yapmak için bazı mega menü modüllerini kullanabileceğimi biliyorum, ancak üçüncü taraf uzantılarından kaçınmak ve kontrol edebileceğim özel kodu kullanmak istiyorum.

Bir modülü varsayılan menüde menü öğesi olarak nasıl ekleyebilirim?


İki farklı menü + bir CSS hilesi ile bir arama kullanabilirsiniz, ancak tam olarak yukarıdaki yapıyı istiyorsanız , javascript devre dışı bırakılmış tarayıcılar jQuerygibi append()veya prepend()çalışmayan işlevleri düşünebilirsiniz .
Farahmand

Öğeleri hareket ettirmek ve daha iyi bir yol yoksa soruda tarif ettiğim tekniği kullanmak için jQuery kullanmak istemem ...
web-tiki

1
Bir mega menü uzantısı ya da bir parçacığı koduyla çekerek bir modülü açılır listeye yükleyecek bir parçacık tipi sistem kullanmak zorunda kalacağınızdan şüpheleniyorum. Nonumber Snippet'ler, nonumber Non Modüller ile birleştirilirdi. Stok menü sistemi bunun için tasarlanmamıştır. Yani, menü çıkışını geçersiz kılmak mümkündür, ancak dezavantajı, raf yükseltilebilir eklentilerden bazılarını kullanmak yerine tamamen özel bir menüye sahip olmanızdır.
Brian Peat

Eminim Brian haklı. Menüyü geçersiz kılmanız ve işlevlerini yeniden yazmanız gerekir veya üçüncü bir taraf kullanmanız gerekir. NoNumber en az şişkin üçüncü taraf seçeneğiniz olacaktır.
Faye

Şu an modüle nasıl bağlantı oluşturuyorsunuz? Menüye çalışan bir bağlantınız var mı?
David Fritsch

Yanıtlar:


4

Arama modülünü menünüze yüklemek için bir alternatif var. Birkaç basit adım gerektirir:

1. mod_menuModülünüzü geçersiz kılın

  • Şablonlar klasörünüzde bir geçersiz kılma oluşturun \templates\YOURTEMPLATE\html\mod_menu\default_url.php.
  • Aşağıdaki içerikleri dosyaya kopyalayın:

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

Ben if-elsemenü öğesi başlığı "CustomSearchBox" olup olmadığını kontrol # 29 satırında başlayan bir ifade ekledim . Bu durumda, modül konumu "CustomSearchBox" yüklenir. Değilse, normal menü öğesi döndürülür. "CustomSearchBox" ı istediğiniz herhangi bir şeyle değiştirebilirsiniz, ancak aşağıdaki adımlarda aynı değeri kullanmayı unutmayın.

2. Yeni bir arama modülü oluşturun

Arama modülünü oluşturun ve parametreleri gerektiği gibi ayarlayın (modül başlığını gizlemenizi öneririm).

Modülü "CustomSearchBox" özel konumuna yayınlayın

3. Yeni bir menü öğesi oluşturun

Menü öğesi herhangi bir tür olabilir, "Harici URL" öneririm ve adı "CustomSearchBox" OLMALIDIR.

Menü öğenizi kaydedin, tüm menü öğesi arama kutusuyla değiştirilecektir!

Bir şeyin belirsiz olup olmadığını bana bildirin.


Cevap için teşekkürler. Tekniğimi şablonumda (LOGO) zaten bir modül pozisyonuyla kullanmayı denedim ama işe yaramadı. Şablonumda bir "CustomSearchBox" konumu oluşturmayı ve bunu kullanmalı mıyım?
web-tiki

Evet, "CustomSearchBox" özel konumunu oluşturmalı ve kullanmalısınız. Veya yukarıdaki kodda buradan değiştirebilirsiniz: $linktype == "CustomSearchBox"ve burada$position = 'CustomSearchBox';
Dmitry Rekun

Aslında konumu oluşturmanız gerekmez (index.php veya template.xml dosyalarınızda). Basitçe yazma CustomSearchBoxmodülü pozisyon alanına ve enter tuşuna basın.
johanpw

Tamam, son olarak bunu aşmak için zamanım vardı, çalışmasını sağlamak için kodunuzu değiştirmek zorunda kaldım. 1 / Nedense menü öğesinde ve görüntü kullanıyordum çünkü wotking değildi. 2 / Kodunuzun 30. satırını olarak değiştirdim $document = JFactory::getDocument();. Şimdi çalışıyor ama resmimi tekrar eklemenin bir yolunu bulmam gerekecek.
web-tiki

Biraz daha tweaked: If ifadesini menü öğesi başlığı yerine CSS menü öğesi sınıfına dayandırdım $linktypeve echo işlevine ekledim . Kod burada görülebilir: phpad.org/1645824385 . Beni doğru yöne yönlendirdiğiniz için teşekkürler, bu bir süredir başarmak istediğim bir şey. :)
web-tiki

1

Üçüncü taraf uzantıları kullanmak istemediğinizi söylemenize rağmen, RocketTheme'den RokCandy kullanan bir çözümüm var . Arama alanına menüye eklenmeyi çok kolaylaştıran küçük bir snippet bileşenidir. Eklentiyi yükleyin ve bunun gibi yeni bir makro oluşturun:

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

Kaydet ve kapat.

Şimdi arama kutusu için bir menü öğesi oluşturun ( External URLtür olarak öneririm , ancak herhangi bir menü öğesi türü yapar) ve Başlık alanına şunu ekleyin [searchfield][/searchfield]:

Menüdeki arama alanı

RokCandy, başlığı makrodaki kodla değiştirecek ve menüde bir arama alanı alacaksınız:

Sonuç

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.