The Number Game - Down Memory Lane
(Page 5 of 7 )
So that takes care of the mechanics of displaying a question, registering votes, and displaying totals. The next item to address is the ability to view an archive of previous polls. The DTML Method to accomplish this is called "viewPollResults", and it looks like this:
<dtml-var standard_html_header>
<dtml-in getPollResults>
<table border=0
cellspacing=0 cellpadding=5>
<tr><td colspan=3><b><dtml-var question></b></td></tr>
<tr><td><dtml-var
response1></td><td> <dtml-var votes1> </td></tr>
<tr><td><dtml-var
response2></td><td> <dtml-var votes2> </td></tr>
<tr><td><dtml-var
response3></td><td> <dtml-var votes3> </td></tr>
<tr><td><font
size=-2>Posted on <dtml-var date fmt="%d/%m/%Y">
</font></td><td><font
size=-2><dtml-var expr="votes1 + votes2 + votes3">
total votes</font></td></tr>
</table><p>
</dtml-in>
<p>
<font
size="-2"><a href="viewCurrentPoll">back to main page</a></font>
<p>
<dtml-var standard_html_footer>
This method is extremely simple - it merely calls the "getPollResults" Z SQL Method without any arguments, and iterates through the returned result set to display a list of previous polls.
At this point, you should be thinking to yourself, "...that doesn't compute". This is because a couple of paragraphs ago, I said that the "getPollResults" required the question ID as mandatory argument. And now I'm contradicting myself by saying that I'm going to call the same method without passing it any arguments. Huh?
Well, you're right - calling "getPollResults" without any arguments is sure to make Zope barf. Unless, that is, I alter the Z SQL Method and add a little more intelligence to it, so that it can make a decision about which query to execute based on the presence or absence of the question ID.
<dtml-if qid>
SELECT question, response1, response2, response3, votes1, votes2,votes3, date from poll WHERE qid = <dtml-sqlvar qid type="int"><dtml-else> SELECT question, response1, response2, response3, votes1,votes2, votes3, date from poll </dtml-if>
Simple, isn't it?
Here's what it all looks like:

Next: Cookie-Cutter Code >>
More Zope Articles
More By Harish Kamath, (c) Melonfire