[Zope] sqlgroup-if-and-else-or dilemma

Martijn Pieters mj@antraciet.nl
Wed, 08 Sep 1999 12:01:06 +0200


At 11:22 08/09/99 , TFE MMS JARVIS JOHN wrote:
>Hi all,
>   I'm trying to construct a search interface which allows users to
>build a set of search conditions against a large DB view. One of the
>requirements for this is that the users be able to choose between AND
>and OR operators for each condition.
>
>   Something like (silly example...):
>      Country = Japan
>      and Area = Tokyo
>      or Area = Kyushu
>
>   These conditions are converted to a where statement using DTML. The
>problem is that Zope (still 1.10.3 :^(

Switch now, before it is too late! =)


>  complains about unexpected
><!--#and--> and <!--#or--> tags within <!--#if--> blocks.
>
>   For example:
>   <!--#sqlgroup where-->
>   ...
>   generated conditions
>   ...
>   <!--#if "LogOp=='AND'"-->
>     <!--#and-->
>   <!--#else-->
>     <!--#or-->
>   <!--#/if-->
>    ...
>    Another condition
>   ...
>   <!--#/sqlgroup-->
>   doesn't work.
>
>   I guess the Zope internals weren't meant to handle this
>construct. Has anyone been here before? Any ideas?
>   Any suggestions would be greatly appreciated.

Hmm.. this indeed does not work at all, because that's not the way DTML works.

What you could do is this:

   <!--#sqlgroup where-->
   ...
   generated conditions
   ...
   <!--#and-->
     <!--#if "LogOp=='AND'"-->
       ...
       Another condition
       ...
     <!--#/if-->
   <!--#or-->
     <!--#if "LogOp=='OR'"-->
       ...
       Another condition
       ...
     <!--#/if-->
   <!--#/sqlgroup-->

Now, if your LogOp equals 'AND', then the 'and' block will actually be 
used, because it contains output, but the 'or' block will not be used, 
because it remains empty. And, of course, when LogOp equals 'OR', it will 
be the other way around.

So, with LogOp == 'AND' you'll get:

   where ...generated conditions...
   and ...Another condition..

and with LogOp == 'OR' you'll get:

   where ...generated conditions...
   or ...Another condition..

which is what I think you want..

--
Martijn Pieters, Web Developer
| Antraciet http://www.antraciet.nl
| Tel: +31-35-7502100 Fax: +31-35-7502111
| mailto:mj@antraciet.nl http://www.antraciet.nl/~mj
| PGP: http://wwwkeys.nl.pgp.net:11371/pks/lookup?op=get&search=0xA8A32149
------------------------------------------