- Zope Example Formatting Field data indirectly via a TinyTable
Here's an example I thought you all might be interested in. Note that this is supposed to be Structured Text, however when trying to view it as such Zope reports an error with 'identifier' (seems it sees _['identifier'] for evaluation even though it's in "example code") Also, when I try to upload this, the upload process dies on the first <!--#in--> in the text. Btw, I don't know anything about python, very little about html and I've spent only about four days setting up Zope on my web site, most of that time was lurking in this list and being a pest. ;-) Anyway, here's the report. * Formatting Record Fields Indirectly Using TinyTable Data * While constructing my Zope based web site, I encountered an annoying problem displaying record field data. The problem: there are many record fields, I'm not sure what order I want to list them in, and I'm not sure how I want to format the fields. If I immediately began constructing an html table, it would take a lot of effort to re-arrange the table format or change the attributes. I devised a neat scheme to dynamically format the record data using a TinyTable that contains the names of each field variable, description and formatting information. I use two <!--#in--> dhtml commands, the first selects the desired record from my database, and the second selects formatting data from the TinyTable. This method allows me to arrange the data fields along columns or rows, or without even using a table at all. In my case, I chose to display record data in a table, where each field is in it's own row. The table output looks like this:: Owner's Name | Village Of Potsdam Address | Box 5168 | Potsdam, Ny 13676 Phone | 315-265-7480 Manager's Name | Brad Clements Address | Box 5168 | Potsdam, Ny 13676 Phone | 315-268-1000x11 Email Address | bkc@murkworks.com Airport Web Site | www.air.gen.ny.us The format of the TinyTable follows:: Id: AirportInfoFormatTable Title: Used to format AirportInfo display Columns: dbvar description format rowspan color Delimiter: : Data: OWN_NAME:Owner's Name:capwords::EvenColor OWN_ADD:Address:capwords:2:OddColor OWN_CSZ::capwords::OddColor OWN_PHN:Phone:asis::EvenColor MGR_NAME:Manager's Name:capwords::OddColor MGR_ADD:Address:capwords:2:EvenColor MGR_CSZ::capwords::EvenColor MGR_PHN:Phone:asis::OddColor MAILTO:Email Address:mailto::EvenColor URL:Airport Web Site:url::OddColor The TinyTable "AirportInfoFormatTable" defines the following columns dbvar -- The field name in the master database description -- Descriptive text format -- Controls how the master data is formatted rowspan -- Causes the description to span rows color -- Specifies the html class for each row A ZSQL Method is used to retrieve data from the master database using a select call through a ZODBC database connection. In the example code that follows, 'getall=1' is used to signal the ZSQL Method 'AirportLookup' to return all fields (i.e., select *). In the DHTML document code that follows, note the use of the _['name'] dhtml construct. This is replaced with the contents of the variable called 'name', however we're using _[dbvar]. Dbvar is a variable from our TinyTable, which contains each of the field names in turn, such as OWN_NAME. So _[dbvar] is replaced with the contents of the variable OWN_NAME when dbvar equals OWN_NAME. This is an indirect lookup of the field contents. Also, in the following example text, size=1 is used to retrieve only the first record from the ZSQL method. In my case, I only want the first record. Also, if the master data field is blank, we don't list it in the output table:: <!--#if expr="AirportLookup(getall='1',identifier=_['identifier'])"--> <!--#in expr="AirportLookup(getall='1',identifier=_['identifier'])" size=1--> <table width=80% border=0> <!--#in AirportInfoFormatTable--> <!--#if "_[dbvar]"--> <!--#if description--> <td <!--#if rowspan-->rowspan=<!--#var rowspan--><!--#endif--> <!--#if color-->class=<!--#var color--><!--#endif-->
<b><!--#var description--></b></td> <!--#endif--> <td align=left> <!--#if "format == 'capwords'"--> <!--#var "_.string.capwords(_[dbvar])"--> <!--#elif "format == 'url'"--> <A href="http://<!--#var "_[dbvar]"-->"> <!--#var "_[dbvar]" url_quote--></a> <!--#elif "format == 'mailto'"--> <A href="mailto:<!--#var "_[dbvar]"-->"><!--#var "_[dbvar]"--></a> <!--#else--> <!--#var "_[dbvar]"--> <!--#endif--> </td> </tr> <!--#endif--> <!--#/in--> </table> <!--#/in--> <!--#else--> <!--#var AirportLocator--> <!--#endif-->
Brad Clements, bkc@murkworks.com (315)268-1000 http://www.murkworks.com (315)268-9812 Fax netmeeting: ils://ils.murkworks.com ICQ: 14856937 We must come down from our heights, and leave our straight paths, for the byways and low places of life, if we would learn truths by strong contrasts; and in hovels, in forecastles, and among our own outcasts in foreign lands, see what has been wrought upon our fellow-creatures by accident, hardship, or vice. - Richard Henry Dana, Jr. 1836
participants (1)
-
Brad Clements