<!--- Kill extra output. ---> <cfsilent> <!--- Check to see if we are in the start mode of the tag. There is no need to param any attributes after the start mode. ---> <cfif (THISTAG.ExecutionMode EQ "Start")> <!--- Param the align attribute. This till determine if we show the list one after another in-line, or if the list should be displayed as block elements. Possible values: - horizontal (default) - vertical ---> <cfparam name="ATTRIBUTES.align" type="string" default="horizontal" /> </cfif> </cfsilent> <!--- Since this is a parent tag that is designed to have child tags, we can't really do anything until the child tags have been defined. Therefore, we can only really work in the End mode of execution. ---> <cfif (THISTAG.ExecutionMode EQ "End")> <!--- ASSERT: At this point, we should have all the child tags associated with this parent tag. As per the child tags, all the attribute data should be in a structure: THISTAG.Items. ---> <!--- Now, we have to check to see how to display the items. Vertically or horizontally? ---> <cfif (ATTRIBUTES.align EQ "vertical")> <!--- Display veritcally. ---> <!--- Loop over the Items array. Remember, this array contains the attributes of the child tags. Remember to use CFOutput tags as custom tags are NOT natural CFOutput blocks. ---> <cfoutput> <cfloop index="intI" from="1" to="#ArrayLen( THISTAG.Items )#" step="1"> <!--- Output value. ---> <p> Item #intI#: #THISTAG.Items[ intI ].value# </p> </cfloop> </cfoutput> <cfelse> <!--- We are going with the default, which is vertical. You might think the first CFIF clause should be the default statement since the default is probably the most often used. By making the default the ELSE clause, we don't really have to validate the types passed in. But that's not really here nor there. ---> <!--- Loop over the Items array. Remember, this array contains the attributes of the child tags. Remember to use CFOutput tags as custom tags are NOT natural CFOutput blocks. ---> <cfoutput> <cfloop index="intI" from="1" to="#ArrayLen( THISTAG.Items )#" step="1"> <!--- Output value. ---> Item #intI#: #THISTAG.Items[ intI ].value# </cfloop> </cfoutput> </cfif> </cfif>