In db.py I defined the following table:

db.define_table('cardfunction',
 
Field('company_id',db.company,default='',notnull=True,unique=True),
    Field('home',type='boolean',default=True),
    Field('logo',type='boolean',default=False),
    Field('tagline',type='boolean',default=False),
    Field('image',type='boolean',default=False),
    Field('css',type='boolean',default=False),
    Field('customcss',type='boolean',default=False),
    Field('keywords',type='boolean',default=False),
    migrate=False)


Based on this table I would like to generate a menu. In a controller I
got the following code:

if not session.id or session.id!=auth.user.bedrijf_id:
    session.id=auth.user.bedrijf_id
 
session.row=db(db.cardfunction.bedrijf_id==session.id).select(db.cardfunction.ALL)
    session.card_menu=[
        ['Home',...],
        ['Logo',...],
        ...
        ['Keywords',...]]


In a view I got the following code to generate the menu:

{{if session.card_menu:}}
  <div class="sidebox" style="margin-top: 24px;">
    <ul>
      {{for _name,_active,_link in session.card_menu:}}
        {{if session.row.home:}}
          <li>
            <a {{if _active:}} class="active" {{pass}}
href="{{=_link}}">{{=_name}}</a>
          </li>
        {{else:}}
          <li>
            {{=_name}}
          </li>
        {{pass}}
         {{if session.row.logo:}}
          <li>
            <a {{if _active:}} class="active" {{pass}}
href="{{=_link}}">{{=_name}}</a>
          </li>
        {{else:}}
          <li>
            {{=_name}}
          </li>
        {{pass}}
        .....
      {{pass}}
    </ul>
  </div> <!-- sidebox -->
{{pass}}


I wonder whether there is a more efficient way to generate the menu,
e.g. using an index instead of the field names: session.row.field_i
where i ranges from 0 to 7.


Kind regards,

Annet.

Reply via email to