[Zope] dtml-newbie question: sql

Joel Burton jburton@scw.org
Sat, 21 Jul 2001 09:38:38 -0400 (EDT)


On Sat, 21 Jul 2001, Lambert Muhr wrote:

> the structure of my zope-site is fully based on relational mysql-tables.
> I am generating, e.g., submenu-entries by selecting submenu-titel, submenu-id, submenu-text, submenu-image, etc., from the sql-table 'submenu' and inserting them into the page as dtml-variables (with that, I manage to maintain a 4-level sitemap with users editing contents via some simple ms-access-masks).
>  
> on a specific content page, e.g., the start page of submenu_1, I added a horizontal navigation list like:
> submenu_1 || submenu_2 || submenu_3
> by means of a <dtml-in submenu-sql-method> listing the <dtml-var submenu-titel>'s as well as their url's (traversal sql-methods).
>  
> now, I want to escape the link-html-tag (<a href>) for that very sequence-item (submenu-entry) which is the one of the current page (e.g., when I am in submenu_2, I want to drop the (<a href>) for the sequence-item submenu_2):
> submenu_1 || submenu_2 || submenu_3
>  
> I tried this by means of a <dtml-unless> around the <a href>-tag, checking whether the current sequence-item is the same as the one the current page is being built on.
>  
> my problem:
> how can I - within a dtml-in-tag - check whether the current sequence-item is a specific one:
>  
> <dtml-var standard_html_header>
> <p>this is the submenu number <dtml-var submenu_id></p>
> <p>navigate to any of the submenu-entries at the same level
> <dtml-in submenu-sql-method>
> <dtml-unless expr="sm_id == '[current submenu_id]'"><a href="traversal_url"><dtml-unless>
> <dtml-var submenu-titel>
> <dtml-unless expr="sm_id == '[current submenu_id]'"></a><dtml-unless>
> </dtml-in>
>  
> I tried to set - outside of the dtml-in-tag - a variable using REQUEST:
> <dtml-call "REQUEST.set('[current submenu_id]',????)">
> but it seems I cannot replace ???? by <dtml-var submenu_id> which - content-wise - would be the solution.

To not show the link for the current page:

<dtml-let me=getId>
  <dtml-in submenu-sql-method>
    <dtml-if "sm_id == me">
      <a href="&dtml-traversal_url;"><dtml-var submenu-title></a>
    <dtml-else>
      <dtml-var submenu-title>
    </dtml-if>
  </dtml-in>
</dtml-let>

However, you probably want to check something like "am I on a page
*within* the submenu section, and if so, change the nav bar", in which
case you could do it at least two ways:

* look at your current location, using methods like PARENTS[] or URL, to
find where you are in the hierarchy; or

* set a property in each 1st-level folder of your site, setting the
submenu id for that area. This is how we do it at www.scw.org. Our site
looks like this:

  /about
  /board
  /catalog
  /consult
  /trainers

but our "top level navigation" is coarser -- the section are just "about",
"training", and "consulting". So, in each folder is a property called
something like submenu_name, which contains

  /about     = about
  /board     = about
  /catalog   = training
  /consult   = consulting
  /trainesr  = training

and then, when you're within that section, the topNav method changes the
apparance of the link.


NB: I'm not sure that taking away the link is the best idea. When you're
deep into subsection 2, having a link back to the top of subsection 2 is
sometimes desired, and the logical place to go is the link. We keep it a
link, but highlight it to make it obvious that 'you are here'

-- 
Joel Burton   <jburton@scw.org>
Director of Information Systems, Support Center of Washington