In a view site/menu.html I have the following code to generate a menu with
drop down menus.
<div class="nav-collapse">
<ul class="nav">
{{for _name,_active,_link in session.site_menu:}}
{{if session['%sDropdown' % _name]:}}
<li class="dropdown" {{if _active:}} class="active" {{pass}}>
<a href="" class="dropdown-toggle"
data-toggle="dropdown">{{=_name}}
<b class="caret"></b></a>
<ul class="dropdown-menu">
{{for _name,_active,_link in session['%sDropdown' % _name]:}}
<li {{if _active:}} class="active" {{pass}}>
<a href="{{=_link}}">{{=_name}}</a>
</li>
{{pass}}
<ul>
</li>
{{else:}}
<li {{if _active:}} class="active" {{pass}}>
<a href="{{=_link}}">{{=_name}}</a>
</li>
{{pass}}
{{pass}}
</ul>
</div><!--/.nav-collapse -->
Whether or not a menu item has a drop down menu depends on database queries
stored in session:
session.site_menu=[
['Home',request.controller=='site' and
request.function=='index',URL('site','index',args=session.id)]]
if session.whq:
session.site_menu.append(['Whq',request.controller=='whq',URL('whq','index',args=session.id)])
session.WhqDropdown=[]
if session.whq.who_we_are:
session.WhqDropdown.append(['Wie we
zijn',request.function=='whoWeAre',\
URL('whq','whoWeAre',args=session.id)])
if session.whq.what_we_do:
session.WhqDropdown.append(['Wat we
doen',request.function=='whatWeDo',\
URL('whq','whatWeDo',args=session.id)])
if session.whq.how_we_work:
session.WhqDropdown.append(['Hoe we
werken',request.function=='howWeWork',\
URL('whq','howWeWork',args=session.id)])
if session.whq.where_we_are:
session.WhqDropdown.append(['Waar we
zitten',request.function=='whereWeAre',\
URL('whq','whereWeAre',args=session.id)])
if session.cal:
session.site_menu.append(['Agenda',request.controller=='calendar',URL('calendar','index',args=session.id)])
session.AgendaDropdown=[]
if session.cal.opening_hours:
session.AgendaDropdown.append(['Openingstijden',request.function=='openingHours',\
URL('calendar','openingHours',args=session.id)])
if session.cal.event_list:
session.AgendaDropdown.append(['Event
list',request.function=='eventList',\
URL('calendar','eventList',args=session.id)])
if session.cal.timetable:
session.AgendaDropdown.append(['Lesrooster',request.function=='timetable',\
URL('calendar','timetable',args=session.id)])
if session.cal.course_table:
session.AgendaDropdown.append(['Cursusrooster',request.function=='courseTable',\
URL('calendar','courseTable',args=session.id)])
return None
What the code in the view should generate is:
<ul class="nav">
<li class="active">
<a>Home</a>
</li>
<li class="dropdown">
<a>Whq</a>
<ul class="dropdown-menu"></ul>
</li>
<li class=""dropdown">
<a>Agenda</a>
<ul class="dropdown-menu"></ul>
</li>
<ul>
What it does generate is:
<ul class="nav">
<li class="active">
<a>Home</a>
</li>
<li class="dropdown">
<a>Whq</a>
<ul class="dropdown-menu"></ul>
<li></li>
<li></li>
<li></li>
<li></li>
<ul> ## ul with no class name
<li class="dropdown">
<a>Agenda</a>
<ul class="dropdown-menu></ul>
<li></li>
<li></li>
<li></li>
<li></li>
<ul></ul> ## empty ul
</li>
</ul>
</li>
</ul>
There's obviously something wrong with the logic in the view but I don't
see what's wrong.
Annet.