2013-07-04 94 views
0

我的自定義Joomla 3.0模板使用Bootstrap下拉菜單發生了一件奇怪的事情。它在我的本地主機和我的遠程主機站點的主頁上工作得非常好。但是,當我點擊任何鏈接時,下拉菜單功能停止工作,並且所有子菜單項都變成可見的不美觀的列表!Bootstrap下拉菜單隻能在主頁上使用(Joomla 3.0)

我檢查了生成的代碼,好像我的JavaScript只能在主頁上正確處理,但似乎在其他地方完全忽略。我已經包含在我的index.php文件的底部下面的代碼插入類,因爲它是一個Joomla網站,而不是手工編碼(即我可以應付!!):

<script type="text/javascript"> 
    (function($){ 
    $(document).ready(function(){ 
     // dropdown 
     $('.parent').addClass('dropdown'); 
     $('.parent > a').addClass('dropdown-toggle'); 
     $('.parent > a').attr('data-toggle', 'dropdown'); 
     $('.parent > a').append(' ', '<span class="caret"></span>'); 
     $('.parent > ul').addClass('dropdown-menu'); 
    }); 
    })(jQuery); 
</script> 

頂層菜單項正在通過指向#字符的外部鏈接觸發,正如我所說的,腳本正在本地主機上實現,奇怪的是,在遠程託管的主頁上執行,而不是在任何其他對我毫無意義的頁面上執行。

我希望有人對可能導致問題的原因有一些想法。

回答

1

您需要配置頂層菜單模塊的子菜單始終顯示。

從的Joomla 3後端,去模塊管理

找到您想要的子菜單下拉

在此菜單模塊配置的菜單,進入選項標籤

配置「展子菜單項」設置爲yes

保存更改

我建議你檢查子菜單顯示在所有日。在您啓用子菜單刪除代碼之前,您希望此子菜單出現在您想瀏覽的頁面上。然後,添加JavaScript代碼來實現引導下拉效果。

go to module manager

from module configuration, go to options tab

set show sub-menu items setting to yes

1

好對於初學者不設置最高級別的鏈接是外部URL,將它們設置爲你通常會。如果你使用外部URLS,它會打破SITEMAPs等任何麪包屑樣式不會正常工作。相反,更新您的JavaScript來刪除href的,並用「#」替換它們。我重視的JavaScript低於它多一點比你

jQuery(document).ready(function(){ 

     // dropdown 

     jQuery('.parent').addClass('dropdown'); 
     jQuery('.parent > a').addClass('dropdown-toggle'); 
     jQuery('.parent > a').attr('data-toggle', 'dropdown'); 
     jQuery('.nav > .parent > a').attr('href','#'); 
     jQuery('.parent > a').append('<span class="caret"></span>'); 
     jQuery('.parent > ul').addClass('dropdown-menu'); 
     jQuery('.nav-child .parent').removeClass('dropdown'); 
     jQuery('.nav-child .parent').addClass('dropdown-submenu'); 
     jQuery('.dropdown-submenu > a').removeAttr('class'); 
     jQuery('.dropdown-submenu > a').removeAttr('data-toggle', 'dropdown'); 
     jQuery('.dropdown-submenu > a > span').remove(); 
    }); 

這應該有效地解決您的菜單,如上面提到的,你還需要確保所有的子菜單,在頁面加載呈現,也就是說,它們是可見的。

此外,您可能需要考慮將您的JavaScript移動到位於/ template/$ yourtemplate/js中的獨立js文件中,然後將其作爲來自索引的加載進行調用。像

$doc->addScript('templates/' . $this->template . '/js/template.js', 'text/javascript'); 

這個PHP模板文件到服務器,這樣它會增加服務器應變稍微另一個呼叫,但它一直JS的所有額外的「位」在一個地方(在頭,他們應該是)

這個答案是基於使用Joomla 3.2的bootstrap 2.3.1和jquery 1.9.1(這兩個版本都默認爲Joomla)