FW: [Zope] dtml-if fustration! (right code!)

Greg Conway greg@gmlnt.com
Sun, 25 Aug 2002 17:55:31 +0100


Okay, scrub all that...

Here's the right code! :)

  <dtml-in "REQUEST.CustomLinkVars">
    <dtml-let Counter=sequence-index>
      <dtml-let OuterVar=sequence-item>

        <dtml-if "_.getattr(REQUEST,REQUEST.CustomLinkVars[Counter])">

          <dtml-if sequence-start>
            <dtml-if "REQUEST.Where==0">
              WHERE
            </dtml-if>
          </dtml-if>

          <dtml-if "REQUEST.NeedSeperator==1"> AND <dtml-call
"REQUEST.set('NeedSeperator',0)"></dtml-if>
          <dtml-var "REQUEST.CustomLinkFields[Counter]">=<dtml-var
"_.int(_.getattr(REQUEST,REQUEST.CustomLinkVars[Counter]))">
          <dtml-call "REQUEST.set('NeedSeperator',1)">

        </dtml-if>

      </dtml-let>
    </dtml-let>
  </dtml-in>


I'm not going to snip anything this time so I don't mess it up in any way!!

REQUEST.CustomLinkVars is an array, currently containing (ie)
['SelectStudentID']

but could contain ['SelectStudentID','SelectOrgID','SelectHomeID'], etc.

and could also be empty! [''].


When this array is empty, no problems - the whole section doesn't run as
it's inside a <dtml-in .. > statement. that's good.

The problem occurs when this array DOES contain a value, but the value of
the variable it contains does not exist in the request.

ie REQUEST.CustomLinkVars is an array containing ['SelectStudentID'], but
SelectStudentID is not a variable in the request.


I want this line...         <dtml-if
"_.getattr(REQUEST,REQUEST.CustomLinkVars[Counter])">

... to test if this variable inside a variable exists inside the request,
and act accordingly.


BUT it doesn't - it throws up an error if the variable does not exist!!


So, hopefully it makes sense THIS time!!

many thanks for any help!

Regards,

Greg.


>> -----Original Message-----
>> From: zope-admin@zope.org [mailto:zope-admin@zope.org]On Behalf Of Greg
>> Conway
>> Sent: 25 August 2002 17:18
>> To: Michael
>> Cc: Zope@Zope. Org
>> Subject: RE: [Zope] dtml-if fustration!
>>
>>
>> Hi Michael,
>>
>> Okay, here is a prime example of what I am trying to achieve!
>>
>> here's the code... (it's a snippet of a DTML method)
>>
>>
>> <dtml-if "_.getattr(REQUEST,REQUEST.Variable)">
>>   <dtml-in "REQUEST.CustomLinkFields">
>>     <dtml-let Counter=sequence-index>
>>
>>       <dtml-var "REQUEST.CustomLinkFields[Counter]">=<dtml-var
>> "_.int(_.getattr(REQUEST,REQUEST.Variable))">
>>
>>     </dtml-let>
>>   </dtml-in>
>> </dtml-if>
>>
>> "Variable" as var in memory, let's say it contains "SelectStudentID".
>>
>> Now... sometimes this DTML method (form) will be called from
>> another form so
>> the variable "Variable" set, and other times this variable will
>> not be set!
>>
>> The idea is the middle line of code should print the contents of the
>> variable "SelectStudentID" - if it exists. If it doesn't, I want Zope to
>> ignore this line of code.
>>
>> I have to put the code [ _.getattr() ] inside quotes [ " ... "
>> ], but if I
>> do this then errors occur when I call the form without this
>> variable set -
>> as it doesn't exist.
>>
>> I got round the problem by hard-coding the variable name into
>> the page, but
>> I don't want to do this, I want DTML to look up the value for me, and act
>> based on whether there is such a variable stored in the request,
>> the way a
>> normal <dtml-if Variable> would work - by not throwing up an error if the
>> variable doesn't exist!!
>>
>> Hope this is now clearer, any enlightenment much appreciated!!
>>
>> Regards,
>>
>> Greg.
>>
>> >> -----Original Message-----
>> >> From: Michael [mailto:michael@nichestaffing.com]
>> >> Sent: 24 August 2002 20:15
>> >> To: Greg Conway; Zope@Zope. Org
>> >> Subject: Re: [Zope] dtml-if fustration!
>> >>
>> >>
>> >> This statement will check to see if SelectSID contains a value,
>> >> if true, it
>> >> will set the value, if false, it will not.  I'm not really
>> sure of what
>> >> you're trying to do with [ SelectSID = <dtml-var SelectSID> ]
>> >>
>> >> <dtml-if expr="selectSID">
>> >> <dtml-call "REQUEST.set('SelectSID',SelectSID)">
>> >> </dtml-if>
>> >>
>> >>
>> >> Michael
>> >>
>> >> On Saturday 24 August 2002 10:56 am, Greg Conway wrote:
>> >> > Hi all,
>> >> >
>> >> > I have a fustrating problem with dtml-if's!! I've tried to
>> >> work round it in
>> >> > many ways, but there is probably an easy one I am overlooking
>> >> knowing my
>> >> > luck...
>> >> >
>> >> > Anyway... Consider the following dtml-if statement:
>> >> >
>> >> >     <dtml-if SelectSID>
>> >> >       SelectSID = <dtml-var SelectSID>
>> >> >       <dtml-call "REQUEST.set('SelectSID', SelectSID)">
>> >> >     </dtml-if>
>> >> >
>> >> > This works okay, and stores the variable SelectSID in the
>> >> request for the
>> >> > code to pick up again on it's next pass.
>> >> >
>> >> > However, on the next pass, the variable SelectSID doesn't
>> exist! As the
>> >> > variable is now REQUEST.SelectSID - and the following code
>> >> doesn't work....
>> >> >
>> >> >     <dtml-if "REQUEST.SelectSID">
>> >> >       SelectSID = <dtml-var SelectSID>
>> >> >       <dtml-call "REQUEST.set('SelectSID', REQUEST.SelectSID)">
>> >> >     </dtml-if>
>> >> >
>> >> > ...as an error is thrown up if REQUEST.SelectSID doesn't exist!
>> >> >
>> >> > Anybody got a simple answer to my dilemma?!!
>> >> >
>> >> > Many thanks for any help!
>> >> >
>> >> > Regards,
>> >> >
>> >> > Greg Conway.
>> >> >
>> >> > This electronic transmission and any files attached to it
>> are strictly
>> >> > confidential and intended solely for the addressee. If you are not
>> >> > the intended addressee, you must not disclose, copy or take
>> any action
>> >> > in reliance of this transmission. If you have received this
>> >> > transmission in error, please notify us by return and
>> delete the same.
>> >> > Further enquiries/returns can be posted to postmaster@gmlnt.com
>> >> > Thank you.
>> >> >
>> >> > _______________________________________________
>> >> > Zope maillist  -  Zope@zope.org
>> >> > http://lists.zope.org/mailman/listinfo/zope
>> >> > **   No cross posts or HTML encoding!  **
>> >> > (Related lists -
>> >> >  http://lists.zope.org/mailman/listinfo/zope-announce
>> >> >  http://lists.zope.org/mailman/listinfo/zope-dev )
>> >>
>>
>> This electronic transmission and any files attached to it are strictly
>> confidential and intended solely for the addressee. If you are not
>> the intended addressee, you must not disclose, copy or take any action
>> in reliance of this transmission. If you have received this
>> transmission in error, please notify us by return and delete the same.
>> Further enquiries/returns can be posted to postmaster@gmlnt.com
>> Thank you.
>>
>> _______________________________________________
>> Zope maillist  -  Zope@zope.org
>> http://lists.zope.org/mailman/listinfo/zope
>> **   No cross posts or HTML encoding!  **
>> (Related lists -
>>  http://lists.zope.org/mailman/listinfo/zope-announce
>>  http://lists.zope.org/mailman/listinfo/zope-dev )
>>

This electronic transmission and any files attached to it are strictly
confidential and intended solely for the addressee. If you are not
the intended addressee, you must not disclose, copy or take any action
in reliance of this transmission. If you have received this
transmission in error, please notify us by return and delete the same.
Further enquiries/returns can be posted to postmaster@gmlnt.com
Thank you.