Building a Menu with anchor links as second menu level - typo3

I am working on a menu, showing the first level as normal links. The second menu level should be build as anchor menu from the content elements. Inspired by this post I build the following ts:
lib.footerMenu = HMENU
lib.footerMenu {
1 = TMENU
1 {
wrap = <ul class="nav">|</ul>
noBlur = 1
NO = 1
NO {
wrapItemAndSub = <li class="first">|</li> |*| <li>|</li> |*| <li class="last">|</li>
ATagParams = class="first" |*| |*| class="last"
after.cObject = CONTENT
after.cObject {
table = tt_content
select {
pidInList = this
orderBy = sorting
where = colPos=1
languageField = sys_language_uid
}
wrap = <ul>|</ul>
renderObj = TEXT
renderObj {
field = header
dataWrap = <li>|</li>
}
}
}
}
}
producing something like that ('Arnold ipsum.' and 'Who the hell are you.' being CEs of the Homepage):
<ul class="nav">
<li class="first">Homepage
<ul>
<li>Arnold ipsum.</li>
<li>Who the hell are you.</li>
</ul>
</li>
<li>Team
<ul>
<li>Arnold ipsum.</li>
<li>Who the hell are you.</li>
</ul>
</li>
...
</ul>
The problem now is, that this (pidInList = this) always holds the actual page id and so the anchor menu of the actual page is appended to all main menu items.
How to show the right anchor menu below every main menu?

lib.footerMenu = HMENU
lib.footerMenu {
1 = TMENU
1 {
wrap = <ul class="nav">|</ul>
noBlur = 1
NO = 1
NO {
wrapItemAndSub = <li class="first">|</li> |*| <li>|</li> |*| <li class="last">|</li>
ATagParams = class="first" |*| |*| class="last"
after.cObject = CONTENT
after.cObject {
table = tt_content
select {
pidInList.stdWrap.cObject = CASE
pidInList.stdWrap.cObject {
key.field = doktype
default = TEXT
default.field = uid
4 = TEXT
4.field = shortcut
}
orderBy = sorting
where = colPos=1
languageField = sys_language_uid
selectFields = uid,pid,header
}
wrap = <ul>|</ul>
renderObj = TEXT
renderObj {
field = header
typolink {
parameter.field = pid
section.field = uid
}
wrap = <li>|</li>
}
}
}
}
}
Though, it might not work on old TYPO3 installations because if I remember correctly pidInList didn't used to have stdWrap. It should work on TYPO3 4.5+.

Related

How to make main menu item unclickable if it has a dropdown - TYPO3

I am quite new to TypoScript, I am making a dropdown menu in TYPO3 which works perfectly fine.
When user clicks the menu item (with hamburger icon which indicates that this menu item has a dropdown) a dropdown opens up. I want to make the menu item itself not clickable, it should only open a dropdown menu. Below is my code, I would appreciate any ideas or help. Right Now, If I click the menu item item It opens up a new page (It should only open a dropdown).
lib.mobileNav = HMENU
lib.mobileNav {
entryLevel = 0
1 = TMENU
wrap = <nav id="mobile-menu" class="main-nav"><ul> | </ul></nav>
doNotLinkIt = 1
1 {
expAll = 1
wrap = <ul class="1">|</ul>
NO = 1
NO {
wrapItemAndSub = <li class="level-1">|</li>
ATagTitle.field = title
}
IFSUB < .NO
IFSUB = 1
IFSUB {
wrapItemAndSub = <li class="level-1 dropdown">|</li>
}
ACT < .NO
ACT = 1
ACT {
wrapItemAndSub = <li class="level-1 active">|</li>
ATagParams = class="level-1 active"
}
ACTIFSUB < .NO
ACTIFSUB = 1
ACTIFSUB {
wrapItemAndSub = <li class="dropdown active level-1">|</li>
}
}
2 = TMENU
2 {
wrap = <ul class=" level-2" role="menu">|</ul>
NO = 1
NO {
wrapItemAndSub = <li class="level-2">|</li>
ATagParams = class="level-2"
stdWrap.htmlSpecialChars = 1
}
ACT = .NO
ACT {
wrapItemAndSub = <li class="active level-2">|</li>
ATagParams = class="active level-2"
}
}
}
You've the parameter doNotLinkIt on the wrong level, it's for TMENU-items and not for the whole HMENU or whole TMENUs. You can see the reference here in TSREF
Below is the menu as it should work, I sorted a bit to make it easier readable.
lib.mobileNav = HMENU
lib.mobileNav {
entryLevel = 0
wrap = <nav id="mobile-menu" class="main-nav"><ul> | </ul></nav>
1 = TMENU
1 {
expAll = 1
wrap = <ul class="1">|</ul>
NO = 1
NO {
wrapItemAndSub = <li class="level-1">|</li>
ATagTitle.field = title
doNotLinkIt = 1
}
IFSUB < .NO
IFSUB = 1
IFSUB {
wrapItemAndSub = <li class="level-1 dropdown">|</li>
}
ACT < .NO
ACT = 1
ACT {
wrapItemAndSub = <li class="level-1 active">|</li>
ATagParams = class="level-1 active"
}
ACTIFSUB < .NO
ACTIFSUB = 1
ACTIFSUB {
wrapItemAndSub = <li class="dropdown active level-1">|</li>
}
}
2 = TMENU
2 {
wrap = <ul class=" level-2" role="menu">|</ul>
NO = 1
NO {
doNotLinkIt = 1
wrapItemAndSub = <li class="level-2">|</li>
ATagParams = class="level-2"
stdWrap.htmlSpecialChars = 1
}
ACT < .NO
ACT {
wrapItemAndSub = <li class="active level-2">|</li>
ATagParams = class="active level-2"
}
}
}
Actually the items without subitems should stay clickable or should be removed, since otherwise you will have menu entries that can not be clicked at all.
So the code for a menu with clickable items AND non-clickable items with dropdowns for subitems would look like this:
lib.mobileNav = HMENU
lib.mobileNav {
entryLevel = 0
wrap = <nav id="mobile-menu" class="main-nav"><ul> | </ul></nav>
1 = TMENU
1 {
expAll = 1
wrap = <ul class="1">|</ul>
NO = 1
NO {
wrapItemAndSub = <li class="level-1">|</li>
ATagTitle.field = title
}
IFSUB < .NO
IFSUB {
wrapItemAndSub = <li class="level-1 dropdown">|</li>
doNotLinkIt = 1
}
ACT < .NO
ACT {
wrapItemAndSub = <li class="level-1 active">|</li>
ATagParams = class="level-1 active"
}
ACTIFSUB < .NO
ACTIFSUB {
wrapItemAndSub = <li class="dropdown active level-1">|</li>
doNotLinkIt = 1
}
}
2 = TMENU
2 {
wrap = <ul class=" level-2" role="menu">|</ul>
NO = 1
NO {
wrapItemAndSub = <li class="level-2">|</li>
ATagParams = class="level-2"
stdWrap.htmlSpecialChars = 1
}
ACT < .NO
ACT {
wrapItemAndSub = <li class="active level-2">|</li>
ATagParams = class="active level-2"
}
}
}

Howto set a CSS class in a TYPOscript menu depending on content from tt_content

I am building a navigation menu with TYPOscript which is extended with content from the tt_content table.
Now I am trying to change the CSS-class of the parent element (.drop-wrapp), if there is content from tt_content and put the page title from parent page in second level (here: "PAGE TITLE FIRST LEVEL").
This is my TYPOscript so far:
lib.navMain = COA
lib.navMain {
10 = TEXT
10.wrap = |
10.value = {$const.lang.navi.skip}
10.typolink {
parameter.data = page:uid
parameter.dataWrap = |#skipMainNavi
ATagParams = class="sr-only sr-only-focusable"
}
20 = HMENU
20 {
special = directory
special.value = {$const.pid.home}
entryLevel = 0
1 = TMENU
1 {
wrap = <ul class="nav navbar-nav" role="menubar">|</ul>
expAll = 1
target = _top
noBlur = 1
wrap= <ul class="nav navbar-nav" role="menubar">|</ul>
NO {
wrapItemAndSub = <li class="first">|</li> |*| <li>|</li> |*| <li class="last">|</li>
linkWrap = |
ATagParams = role="menuitem"
title = field:title
ATagTitle.field = subtitle // title
}
ACT < .NO
ACT = 1
ACT {
wrapItemAndSub = <li class="first active">|</li> |*| <li class="active">|</li> |*| <li class="last active">|</li>
ATagParams = class="mainmenuActive"
# linkWrap = <strong>|</strong>
}
}
2 < .1
2 {
wrap = <div class="drop-wrapp CLASS_IF_CONTENT_FROM_TT_CONTEN"><div class="drop-wrapp-inner">|</div></div>
20 = HMENU
20 {
special = directory
special.value.data = field:pid
1 = TMENU
1 {
expAll = 1
NO {
wrapItemAndSub = <li class="first">|</li> |*| <li>|</li> |*| <li class="last">|</li>
linkWrap = |
ATagParams = role="menuitem"
title = field:title
ATagTitle.field = subtitle // title
}
ACT < .NO
ACT = 1
ACT {
wrapItemAndSub = <li class="first active">|</li> |*| <li class="active">|</li> |*| <li class="last active">|</li>
ATagParams = class="mainmenuActive"
# linkWrap = <strong>|</strong>
}
}
}
stdWrap.append = CONTENT
stdWrap.append {
table = tt_content
select {
pidInList.field = pid
where = colPos=1 AND deleted=0 AND hidden=0
orderBy = sorting
languageField = sys_language_uid
max = 2
}
stdWrap {
wrap = <div class="teaser-block"><div class="teaser-block-inner"><strong class="title">PAGE TITLE FIRST LEVEL</strong><div class="teaser-text">|</div></div></div>
// wrap only if there is content!
required = 1
}
}
stdWrap.innerWrap = <div class="drop-block"><ul class="list-unstyled nav-list" role="menubar">|</ul></div>
}
}
30 = TEXT
30.wrap = <a id="skipMainNavi" class="sr-only">|</a>
30.value =
30.htmlSpecialChars = 0
}
UPDATE:
This is very breafly what I want to achieve:
<nav>
<ul>
<li>Level 0.0</li>
<li>
Level 0.1
<div class="drop-wrapp wide"><!-- only add class ".wide" if there is content from tt_content in "div.teaser-block" -->
<div class="drop-wrapp-inner">
<div class="drop-block">
<ul>
<li>Level 1.0</li>
<li>Level 1.1</li>
<li>Level 1.2</li>
</ul>
</div>
<div class="teaser-block">
Here is content from tt_content
</div>
</div>
</div>
</li>
<li>Level 0.2</li>
</ul>
</nav>
I am sure, there are better solutions, but the following example works now for me. My trick are the two elements after the "30 = CONTENT" element. If there is content from tt_content I open a "div"-element and close if afterwards. Maybe there is a better way to do this with a special wrap?
lib.navMain = COA
lib.navMain {
10 = TEXT
10.wrap = |
10.value = {$const.lang.navi.skip}
10.typolink {
parameter.data = page:uid
parameter.dataWrap = |#skipMainNavi
ATagParams = class="sr-only sr-only-focusable"
}
20 = HMENU
20 {
special = directory
special.value = {$const.pid.home}
entryLevel = 0
1 = TMENU
1 {
expAll = 1
target = _top
noBlur = 1
wrap = <ul class="nav navbar-nav" role="menubar">|</ul>
NO {
wrapItemAndSub = <li class="first">|</li> |*| <li>|</li> |*| <li class="last">|</li>
linkWrap = |
ATagParams = role="menuitem"
title = field:title
ATagTitle.field = subtitle // title
}
ACT < .NO
ACT = 1
ACT {
wrapItemAndSub = <li class="first active">|</li> |*| <li class="active">|</li> |*| <li class="last active">|</li>
ATagParams = class="mainmenuActive"
# linkWrap = <strong>|</strong>
}
}
2 < .1
2 {
wrap = <div class="drop-wrapp"><div class="drop-wrapp-inner">|</div></div>
stdWrap.cObject = COA
stdWrap.cObject {
20 = HMENU
20 {
special = directory
special.value.data = field:pid
1 = TMENU
1 {
expAll = 1
wrap = <div class="drop-block"><ul class="list-unstyled nav-list" role="menubar">|</ul></div>
NO {
wrapItemAndSub = <li class="first">|</li> |*| <li>|</li> |*| <li class="last">|</li>
linkWrap = |
ATagParams = role="menuitem"
title = field:title
ATagTitle.field = subtitle // title
}
ACT < .NO
ACT = 1
ACT {
wrapItemAndSub = <li class="first active">|</li> |*| <li class="active">|</li> |*| <li class="last active">|</li>
ATagParams = class="mainmenuActive"
# linkWrap = <strong>|</strong>
}
}
}
30 = CONTENT
30 {
table = tt_content
select {
pidInList.field = pid
where = colPos=99 AND deleted=0 AND hidden=0
orderBy = sorting
languageField = sys_language_uid
max = 2
}
stdWrap {
wrap = |
// wrap only if there is content!
required = 1
}
}
1 = COA
1 {
if.isTrue.numRows < lib.navMain.20.2.stdWrap.cObject.30
10 = TEXT
10.value = <div class="wide">
}
100 = COA
100 {
if.isTrue.numRows < lib.navMain.20.2.stdWrap.cObject.30
10 = TEXT
10.value = </div><!-- /.wide -->
}
}
}
}
30 = TEXT
30.wrap = <a id="skipMainNavi" class="sr-only">|</a>
30.value =
30.htmlSpecialChars = 0
}

TypoScript / Typo3 : How to use | to set the value more than once in the same wrapper?

How to put the same value inside {againTheSameValue} for the menu in TypoScript? I want the same value for both text of a-tag and href-value:
[eg: Home]
Here's my TypoScript:
lib.mainmenu = HMENU
lib.mainmenu {
entryLevel = 0
1 = TMENU
1{
wrap = <li class="hidden"></li><ul class="nav navbar-nav navbar-right"> | </ul>
noBlur = 1
NO = 1
NO {
#
# I want the href too have the same value as set by "|" for it's text
#
wrapItemAndSub = <li><a class="page-scroll" href="#">|</a></li>
doNotLinkIt = 1
stdWrap.htmlSpecialChars = 1
ATagTitle.field = title
ATagParams = class="page-scroll"
}
}
}
Please suggest.
You can play around with stdWrap and field:...:
wrapItemAndSub = <li><a class="page-scroll" href="#{field:title}">|</a></li>
wrapItemAndSub.insertData = 1
In case you want to manipulate your href attribute (e.g. make it lowercase), the code must be written the other way round:
wrapItemAndSub = <li><a class="page-scroll" href="#|">{field:title}</a></li>
wrapItemAndSub.insertData = 1
stdWrap.case = lower
As you see, you can't apply stdWrap to {field:...}, but you can swap positions in wrapItemAndSub and apply stdWrap to a menu item text.
Tested both variants under 7.3 - works.

TYPO3 Menu: only first level is displayed

I am currently working on a new site with Typo3, Version 7.3.
This site will have a menu that should list all levels no matter of the current page.
I tried with this TypoScript (which I also found on the internet in very similar variants):
MENU = HMENU
MENU.special = directory
MENU.special.value = 5
MENU.1 = TMENU
MENU.1 {
wrap = <ul>|</ul>
expAll = 1
NO = 1
NO {
wrapItemAndSub = <li>|</li>
}
ACT = 1
ACT {
wrapItemAndSub = <li class="active">|</li>
}
}
MENU.2 < MENU.1
MENU.2.wrap = <ul>|</ul>
Unfortunately this only outputs the first level of the page tree.
Did I miss something?
(The examples I found on the internet mostely related to version 6.x of Typo3) Is there some new command/syntax for menus in version 7.x of Typo3?
Thanks a lot for your help!
hello here is your Top navigation menu typo-script if you want to go with third level menu then it also possible this code is second level menu only
lib.Main_menu = COA
lib.Main_menu {
10 = HMENU
10.special = directory
10.special.value = 2
10 {
wrap =<ul class="nav navbar-nav navbar-right text-uppercase">|</ul>
#entryLevel = 0
1 = TMENU
1 {
expAll = 1
noBlur = 1
# target = _top
NO {
ATagTitle {
field = title
fieldRequired = nav_title
}
ATagBeforeWrap = 1
linkWrap = |
wrapItemAndSub.insertData = 1
wrapItemAndSub = <li class="menu-{field:uid}">|</li> |*| <li class="menu-{field:uid}">|</li>
stdWrap.htmlSpecialChars = 1
# allWrap = <div class="menu_header_no">|</div>
}
ACT < .NO
ACT = 1
ACT {
wrapItemAndSub.insertData = 1
wrapItemAndSub = <li class="active menu-{field:uid}" >|</li>
# ATagParams = class=""
# allWrap = <div class="menu_header_act">|</div>
}
IFSUB < .NO
IFSUB = 1
IFSUB {
stdWrap.htmlSpecialChars = 1
wrapItemAndSub = <li class="dropdown menu-{field:uid}">|</li>
# allWrap = <div class="menu_header_no">|</div>
# ATagParams = class="dropdown-toggle" data-toggle="dropdown"
}
ACTIFSUB < .IFSUB
ACTIFSUB = 1
ACTIFSUB {
stdWrap.htmlSpecialChars = 1
wrapItemAndSub = <li class="active menu-{field:uid} dropdown">|</li>
# allWrap = <div class="menu_header_no">|</div>
# ATagParams = class="dropdown-toggle" data-toggle="dropdown"
# stdWrap.wrap = <b class="caret"></b>
}
}
2 = TMENU
2 {
noBlur = 1
wrap = <div class="hide-caret" data-toggle="dropdown" role="button" aria-expanded="false"><span class="caret"></span></div><ul class="dropdown-menu" role="menu">|</ul>
NO {
ATagTitle {
field = title
fieldRequired = nav_title
}
wrapItemAndSub.insertData = 1
stdWrap.htmlSpecialChars = 1
wrapItemAndSub = <li menu-{field:uid}><span class="sub-name">|</span><div class="menu-img"><img src="typo3conf/ext/fluxtemplate/Resources/Public/img/menu-5.png" class="img-responsive" alt="a" /></div></li>
}
ACT < .NO
ACT = 1
ACT {
wrapItemAndSub = <li class="active menu-{field:uid}"><span class="sub-name">|</span><div class="menu-img"><img src="typo3conf/ext/fluxtemplate/Resources/Public/img/menu-5.png" class="img-responsive" alt="a" /></div></li>
# ATagParams = class=""
# allWrap = <div class="menu_header_act">|</div>
}
}
}
}
Following script will help you to show till third level menu.
lib.MainMenu= HMENU
lib.MainMenu.special = directory
lib.MainMenu.special.value = 1
lib.MainMenu.1 = TMENU
lib.MainMenu.1 {
NO {
wrapItemAndSub = <li >|</li>
ATagTitle.field = 1
# = 1
}
ACT = 1
ACT{
wrapItemAndSub = <li>|</li>
ATagTitle.field = 1
stdWrap.htmlSpecialChars = 1
ATagParams = class="activemenu"
}
IFSUB{
wrapItemAndSub = <li >|</li>
ATagTitle.field = 1
}
}
lib.MainMenu.2 < .lib.MainMenu.1
lib.MainMenu.2{
wrap = <ul>|</ul>
noBlur = 1
expAll = 1
NO {
wrapItemAndSub = <li >|</li>
ATagTitle.field = 1
}
IFSUB{
wrapItemAndSub = <li >|</li>
ATagTitle.field = 1
}
}
lib.MainMenu.3 < .lib.MainMenu.2
lib.MainMenu.3{
wrap = <ul>|</ul>
noBlur = 1
expAll = 1
NO {
wrapItemAndSub = <li>|</li>
ATagTitle.field = 1
}
CUR = 1
CUR{
linkWrap= <li>|</li>
}
CURIFSUB = 1
CURIFSUB{
linkWrap= <li>|</li>
}
ACTIFSUB = 1
ACTIFSUB{
linkWrap= <li>|</li>
}
}
You may change HTML as per your requirement
For more information about TYPO3 stuff you may visit my blog
https://jainishsenjaliya.wordpress.com/
meanwhile I found a solution (which I don't fully understand):
MENU = HMENU
MENU.special = directory
MENU.special.value = 5
MENU.1 = TMENU
MENU {
1 {
wrap = <ul>|</ul>
expAll = 1
NO = 1
NO {
wrapItemAndSub = <li>|</li>
stdWrap.htmlSpecialChars = 1
ATagTitle.field = title
}
ACT <.NO
ACT {
ATagParams = class="active"
}
}
2 < .1
3 < .2
}
So all I changed is putting everything in MENU into a block ( {...} ) instead of using the dot-notation.
To my understanding this should actually not make any difference, right?

Typoscript navigation with subpages

I am trying to implement my navigation with typoscript and I am having problems to understand how to wrap right.
I already have a base navigation with 1 level that is working fine.
Now I have pages that has subpages and other that don't have.
For the ones without subpages I want the behavior that I have now.
For the pages with subpages I want to add this as an dropdown menu.
The HTML code should look like this.
<ul class="nav">
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
Test0
<b class="caret"></b>
</a>
<ul class="dropdown-menu">
<li class="">DropwDownItem1</li>
</ul>
</li>
<li class="active">Test1</li>
<li>Test2</li>
<li>Test3</li>
</ul>
TypoScript:
lib.menu = HMENU
lib.menu {
special = list
special.value = 3,2
1 = TMENU
1 {
wrap = <ul class="nav">|</ul>
expAll = 1
NO.wrapItemAndSub = <li class="">|</li>
RO < .NO
RO = 1
CUR < .NO
CUR = 1
CUR.wrapItemAndSub = <li class="active">|</li>
ACT < .CUR
IFSUB = 1
IFSUB.wrapItemAndSub= <li class="dropdown">|</li>
IFSUB.ATagParams = class="dropdown-toggle" data-toggle="dropdown"
IFSUB.stdWrap.innerWrap= |<b class="caret"></b>
ACTIFSUB = 1
ACTIFSUB.wrapItemAndSub= <li class="dropdown">|</li>
ACTIFSUB.ATagParams = class="dropdown-toggle" data-toggle="dropdown"
ACTIFSUB.stdWrap.innerWrap= |<b class="caret"></b>
CURIFSUB = 1
CURIFSUB.wrapItemAndSub= <li class="dropdown">|</li>
CURIFSUB.ATagParams = class="dropdown-toggle" data-toggle="dropdown"
CURIFSUB.stdWrap.innerWrap= |<b class="caret"></b>
}
2 = TMENU
2 {
wrap = <ul class="dropdown-menu">|</ul>
expAll = 1
NO = 1
NO.wrapItemAndSub = <li>|</li>
}
}
//EDIT: I have changed the code but now when I click on an item in the dropdown menu the ul class="dropdown-menu" is wrapped two times and the dropdown isn't shown properly.
The option noBlur is removed since TYPO3 v6.0 and I read somewhere, that the RO state does something with javascript to show/hide the submenu - so I try not to use it. I rather do the showing/hiding via css.
I would've done it like this:
lib.menu = HMENU
lib.menu {
special = list
special.value = 3,2
1 = TMENU
1 {
expAll = 1
wrap = <ul class="nav">|</ul>
NO.wrapItemAndSub = <li>|</li>
CUR = 1
CUR.wrapItemAndSub = <li class="active">|</li>
ACT < .CUR
}
2 = TMENU
2 {
wrap = <ul>|</ul>
NO = 1
NO.wrapItemAndSub = <li>|</li>
}
}
Add the hover-effect via CSS:
.nav ul {
display: none;
}
.nav li:hover ul {
display: block;
}
The <ul> wrap of your subnavi should be around the TMENU. I don't think you need the ATagBeforeWrap as it only makes linkWrap within the <a> tag. So it should look like this (not tested):
lib.menu = HMENU
lib.menu {
special = list
special.value = 3,2
1 = TMENU
1 {
wrap = <ul class="nav">|</ul>
expAll = 1
NO.wrapItemAndSub = <li class="">|</li>
RO < .NO
RO = 1
CUR < .NO
CUR = 1
CUR.wrapItemAndSub = <li class="active">|</li>
ACT < .CUR
noBlur = 1
IFSUB = 1
IFSUB.wrapItemAndSub= <li class="dropdown">|</li>
}
2 = TMENU
2 {
wrap = <ul class="dropdown-menu">|</ul>
expAll = 1
noBlur = 1
NO = 1
NO.wrapItemAndSub = <li>|</li>
}
}
Here you can find good info about wraps, unfortunately it's in german: http://jweiland.net/typo3/typoscript/wrap-moeglichkeiten-und-hierarchie-in-menues.html
By the way: if you are using TYPO3 6+ the noBlur setting has been removed.
---> EDIT:
I shortened your code a little, but I really coudn't reproduce the problem. For me it's working fine. The li around the dropdown gets the dropdown class. But I don't see a duplicate of the <ul class="dropdown-menu">
special = list
special.value = 3,2
1 = TMENU
1 {
wrap = <ul class="nav">|</ul>
expAll = 1
NO = 1
NO.wrapItemAndSub = <li class="">|</li>
RO < .NO
CUR < .NO
CUR.wrapItemAndSub = <li class="active">|</li>
ACT < .CUR
IFSUB = 1
IFSUB.wrapItemAndSub= <li class="dropdown">|</li>
IFSUB.ATagParams = class="dropdown-toggle" data-toggle="dropdown"
IFSUB.stdWrap.innerWrap= |<b class="caret"></b>
ACTIFSUB < .IFSUB
CURIFSUB < .IFSUB
}
2 = TMENU
2 {
wrap = <ul class="dropdown-menu">|</ul>
expAll = 1
NO = 1
NO.wrapItemAndSub = <li>|</li>
}
This snippet I have used for internal page links:
I have used subtitle field for internal navigation.
for example:
<a href="#about>about</a>
Ourservice
menu.main_menu = HMENU
menu.main_menu {
#special = directory
#special.value = 2
1 = TMENU
1 {
wrap = <ul class="nav navbar-nav navbar-right">|</ul>
expAll = 1
noBlur = 1
NO = 1
NO {
doNotLinkIt = 1
allWrap.insertData = 1
allWrap = <li class="first menu-{field:uid}">|</li>
}
ACT < .NO
ACT {
ATagParams = class="active dropdown"
allWrap = <li class="active first menu-{field:uid}">|</li> |*| <li class="active menu-{field:uid}">|</li>
}
CUR < .NO
CUR {
ATagParams = class="parent_menu active"
allWrap = <li class="first active menu-{field:uid}">|</li> |*| <li class="active menu-{field:uid}">|</li>
}
}
}