Welcome!

ColdFusion Authors: Maureen O'Gara, Hovhannes Avoyan, Yakov Fain, Pat Romanski, Liz McMillan

Related Topics: ColdFusion

ColdFusion: Article

CFDJ Cover Story — Get in the Right Group

The group attribute of the cfquery tag is a powerful tool for not only organizing your data but for styling and presenting it

In Table 3 note that we get a "state_ab" result for every state, as well as the coordinates needed on our map, but for those states that are only found in "tbl_states" and not in "biocenters" we get a row with no data in the "city" field, a condition that we'll use to trigger a different result than those that do have cities defined.

Our next group level defined by the ORDER BY of the query, and called by the "group" attribute, is "status," and, finally, "city," which we'll call twice, once nested inside of each of the two possible values for "status."

You can see how this information is used by following the program listing for "MainMap.CFM" abridged from the actual site to include only the code we need to illustrate the process used to populate the map display (see Listing 1).

The first item of business once we've called the query is to offset our map coordinates to account for the spot on the page where the containing div will display it. Then we begin a rather detailed grouped output that's used to set styles for the items that will display on the raw map.

Because we used a left outer join in our "getmapinfo" query, at the level of the group="state_ab" the parameter #state_ab# will be a list of the 51 states (including the District of Columbia) whether or not there are join matches. We'll evaluate each of these rows to see whether there's a city defined (because we asked for "SELECT distinct," those cities that have more than one match will be listed only once). The rows with no city defined (meaning there are no plasma centers in that state) are used to create one kind of div, "#state_ab#_set," and those that do have at least one city defined have created for them some additional offset information, the div "#state_ab#abbrev" and the additional "div #state_ab#detail."

That first <cfoutput>, in the <style> section of the <head> block, used only the topmost group of the query, since all we needed to do was list the states and evaluate if, based on whether they had data in their #city# fields, they needed merely the div that will write the abbreviation in place on the map; or, if they did have centers present, the richer pair of divs that we'll use to provide rollover display and links.

Digging in at All Three Levels
In the body of the page, however, we use a <cfoutput> that employs the "group" attribute at all three of the levels offered by the query's "ORDER BY" clause.

Once again, the <cfoutput> begins by being grouped on "state_ab" and we evaluate whether a given #state_ab# has city data associated with it, our tip-off that there's at least one plasma center in that state. For those with no city, we write the div that writes the state abbreviation in white onto the map and we're done with that state.

But for those states with city data, we write a link that will pass the #state_ab# parameter to a page that will show the detailed information, and then after we pull the #state_full# state name to head the rollover div, we have a nested <cfoutput> that is grouped on "status," so we can differentiate between centers that are already open and those in the preparation stages. Here's a case in which we use the next level of the <cfoutput> grouping twice, once for each of our two possible values of "status."

The result is a map that highlights those states that have biocenters in them, which provides those states with a link to a detail page for drilling down and summarizes the centers in the state grouped by open status in a rollover div that shows when the mouse hovers on the link.

Grouped Newspaper Columns
I'll pass along one more example of the use of the "group" attribute that I find particularly useful (Figure 1). There are times that I like to display query results in newspaper-like columns (Table 4). Because this grouping of the data all happens on the output side, we can operate the logic that determines how a column will be distributed at whichever levels of the nested <cfoutputs> that helps us make an attractive display. In the case of listing the states and cities with biocenters in them, I wanted the cities to stay grouped with their states. First I set up the query "GetSoonAndOpenCenters" with the ORDER BY state_full, city clause, a sub-query that counts the distinct instances of state_full, and output it as shown in Listing 2.

Note that rather than use the query's rowcount as the trigger for jumping to a new column with the <td> tag, we set up a incrementer based on the "state_full" count and put the evaluation trigger for the column change at the end of each iteration of that outer <cfoutput> group. The result is a reasonably evenly distributed three-column display that keeps the cities grouped in their state.

In all of these examples, the utility of the "group" attribute rests with the fact that it resides on the output side of our data handling, giving us multiple ways of distributing and displaying the results of a given query. This includes adding styling, conditional branches in the various nested output levels, and the association of our choice of styling with each sublevel of the output. Sometimes it reminds me of my dear mom, who used to stress to me in my school years that getting in with the right group was the key to success!.

More Stories By James Edmunds

James Edmunds is a freelance Internet developer and arts administration consultant living in New Iberia, Louisiana. After a career in journalism that included writing for national publications such as Newsweek and serving as editor for an alternative weekly newspaper he founded in southern Louisiana, James began to pursue a second career working with arts groups. Though he had no technology background, his interest in harnessing the power of the Internet to serve the interests of the arts led him into Internet development, an arena in which he has now gone beyond the arts to serve a general business clientele.

Comments (1) View Comments

Share your thoughts on this story.

Add your comment
You must be signed in to add a comment. Sign-in | Register

In accordance with our Comment Policy, we encourage comments that are on topic, relevant and to-the-point. We will remove comments that include profanity, personal attacks, racial slurs, threats of violence, or other inappropriate material that violates our Terms and Conditions, and will block users who make repeated violations. We ask all readers to expect diversity of opinion and to treat one another with dignity and respect.


Most Recent Comments
SYS-CON Brasil News Desk 04/17/06 01:33:05 PM EDT

In a previous article for ColdFusion Developers Journal I described a ColdFusion component (CFC) that I wrote to report on what search terms visitors used on a site's search facility when visiting the Web sites I managed (February 11, 2005 - http://cfdj.sys-con.com/read/48234.htm).