919 - 926 - 9847

Cool FarCry 5.1 feature you may have missed

I'm not even sure when I noticed this, but there's a now a Country and State formtool type (fttype). The Meteorsite project needed a tours page that includes state information. I'm fairly sure that it's going to just be North America for now, but we can always hash that out later.

The Country type is pretty well defined out of the box, but the State type only includes information relevant to the Auzzie's (which makes sense, really). So, let's extend our new state type and include the provinces from Canada, and the US states.

Copy the /farcry/core/packages/formtools/state.cfc to your local /farcry/projects/packages/formtools/state.cfc. You'll need to change the extend to farcry.core.packages.formtools.state in the state.cfc. The following is the additions to the getState function.


<!--- North America - USA --->
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","AL") /><cfset querysetcell(q,"name","ALABAMA") /><cfset querysetcell(q,"countrycode","US") /><cfset querysetcell(q,"countryname","United States of America") />
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","AK") /><cfset querysetcell(q,"name","ALASKA") /><cfset querysetcell(q,"countrycode","US") /><cfset querysetcell(q,"countryname","United States of America") />    
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","AS") /><cfset querysetcell(q,"name","AMERICAN SAMOA") /><cfset querysetcell(q,"countrycode","US") /><cfset querysetcell(q,"countryname","United States of America") />
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","AZ") /><cfset querysetcell(q,"name","ARIZONA") /><cfset querysetcell(q,"countrycode","US") /><cfset querysetcell(q,"countryname","United States of America") />
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","AR") /><cfset querysetcell(q,"name","ARKANSAS") /><cfset querysetcell(q,"countrycode","US") /><cfset querysetcell(q,"countryname","United States of America") />
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","CA") /><cfset querysetcell(q,"name","CALIFORNIA") /><cfset querysetcell(q,"countrycode","US") /><cfset querysetcell(q,"countryname","United States of America") />
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","CO") /><cfset querysetcell(q,"name","COLORADO") /><cfset querysetcell(q,"countrycode","US") /><cfset querysetcell(q,"countryname","United States of America") />
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","CT") /><cfset querysetcell(q,"name","CONNECTICUT") /><cfset querysetcell(q,"countrycode","US") /><cfset querysetcell(q,"countryname","United States of America") />
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","DE") /><cfset querysetcell(q,"name","DELAWARE") /><cfset querysetcell(q,"countrycode","US") /><cfset querysetcell(q,"countryname","United States of America") />
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","DC") /><cfset querysetcell(q,"name","DISTRICT OF COLUMBIA") /><cfset querysetcell(q,"countrycode","US") /><cfset querysetcell(q,"countryname","United States of America") />
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","FM") /><cfset querysetcell(q,"name","FEDERATED STATES OF MICRONESIA") /><cfset querysetcell(q,"countrycode","US") /><cfset querysetcell(q,"countryname","United States of America") />
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","FL") /><cfset querysetcell(q,"name","FLORIDA") /><cfset querysetcell(q,"countrycode","US") /><cfset querysetcell(q,"countryname","United States of America") />
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","GA") /><cfset querysetcell(q,"name","GEORGIA") /><cfset querysetcell(q,"countrycode","US") /><cfset querysetcell(q,"countryname","United States of America") />
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","GU") /><cfset querysetcell(q,"name","GUAM") /><cfset querysetcell(q,"countrycode","US") /><cfset querysetcell(q,"countryname","United States of America") />
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","HI") /><cfset querysetcell(q,"name","HAWAII") /><cfset querysetcell(q,"countrycode","US") /><cfset querysetcell(q,"countryname","United States of America") />
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","ID") /><cfset querysetcell(q,"name","IDAHO") /><cfset querysetcell(q,"countrycode","US") /><cfset querysetcell(q,"countryname","United States of America") />
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","IL") /><cfset querysetcell(q,"name","ILLINOIS") /><cfset querysetcell(q,"countrycode","US") /><cfset querysetcell(q,"countryname","United States of America") />
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","IN") /><cfset querysetcell(q,"name","INDIANA") /><cfset querysetcell(q,"countrycode","US") /><cfset querysetcell(q,"countryname","United States of America") />
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","IA") /><cfset querysetcell(q,"name","IOWA") /><cfset querysetcell(q,"countrycode","US") /><cfset querysetcell(q,"countryname","United States of America") />
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","KS") /><cfset querysetcell(q,"name","KANSAS") /><cfset querysetcell(q,"countrycode","US") /><cfset querysetcell(q,"countryname","United States of America") />
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","KY") /><cfset querysetcell(q,"name","KENTUCKY") /><cfset querysetcell(q,"countrycode","US") /><cfset querysetcell(q,"countryname","United States of America") />
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","LA") /><cfset querysetcell(q,"name","LOUISIANA") /><cfset querysetcell(q,"countrycode","US") /><cfset querysetcell(q,"countryname","United States of America") />
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","ME") /><cfset querysetcell(q,"name","MAINE") /><cfset querysetcell(q,"countrycode","US") /><cfset querysetcell(q,"countryname","United States of America") />
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","MH") /><cfset querysetcell(q,"name","MARSHALL ISLANDS") /><cfset querysetcell(q,"countrycode","US") /><cfset querysetcell(q,"countryname","United States of America") />
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","MD") /><cfset querysetcell(q,"name","MARYLAND") /><cfset querysetcell(q,"countrycode","US") /><cfset querysetcell(q,"countryname","United States of America") />
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","MA") /><cfset querysetcell(q,"name","MASSACHUSETTS") /><cfset querysetcell(q,"countrycode","US") /><cfset querysetcell(q,"countryname","United States of America") />
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","MI") /><cfset querysetcell(q,"name","MICHIGAN") /><cfset querysetcell(q,"countrycode","US") /><cfset querysetcell(q,"countryname","United States of America") />
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","MN") /><cfset querysetcell(q,"name","MINNESOTA") /><cfset querysetcell(q,"countrycode","US") /><cfset querysetcell(q,"countryname","United States of America") />
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","MS") /><cfset querysetcell(q,"name","MISSISSIPPI") /><cfset querysetcell(q,"countrycode","US") /><cfset querysetcell(q,"countryname","United States of America") />
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","MO") /><cfset querysetcell(q,"name","MISSOURI") /><cfset querysetcell(q,"countrycode","US") /><cfset querysetcell(q,"countryname","United States of America") />
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","MT") /><cfset querysetcell(q,"name","MONTANA") /><cfset querysetcell(q,"countrycode","US") /><cfset querysetcell(q,"countryname","United States of America") />
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","NE") /><cfset querysetcell(q,"name","NEBRASKA") /><cfset querysetcell(q,"countrycode","US") /><cfset querysetcell(q,"countryname","United States of America") />
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","NV") /><cfset querysetcell(q,"name","NEVADA") /><cfset querysetcell(q,"countrycode","US") /><cfset querysetcell(q,"countryname","United States of America") />
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","NH") /><cfset querysetcell(q,"name","NEW HAMPSHIRE") /><cfset querysetcell(q,"countrycode","US") /><cfset querysetcell(q,"countryname","United States of America") />
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","NJ") /><cfset querysetcell(q,"name","NEW JERSEY") /><cfset querysetcell(q,"countrycode","US") /><cfset querysetcell(q,"countryname","United States of America") />
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","NM") /><cfset querysetcell(q,"name","NEW MEXICO") /><cfset querysetcell(q,"countrycode","US") /><cfset querysetcell(q,"countryname","United States of America") />
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","NY") /><cfset querysetcell(q,"name","NEW YORK") /><cfset querysetcell(q,"countrycode","US") /><cfset querysetcell(q,"countryname","United States of America") />
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","NC") /><cfset querysetcell(q,"name","NORTH CAROLINA") /><cfset querysetcell(q,"countrycode","US") /><cfset querysetcell(q,"countryname","United States of America") />
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","ND") /><cfset querysetcell(q,"name","NORTH DAKOTA") /><cfset querysetcell(q,"countrycode","US") /><cfset querysetcell(q,"countryname","United States of America") />
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","MP") /><cfset querysetcell(q,"name","NORTHERN MARIANA ISLANDS") /><cfset querysetcell(q,"countrycode","US") /><cfset querysetcell(q,"countryname","United States of America") />
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","OH") /><cfset querysetcell(q,"name","OHIO") /><cfset querysetcell(q,"countrycode","US") /><cfset querysetcell(q,"countryname","United States of America") />
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","OK") /><cfset querysetcell(q,"name","OKLAHOMA") /><cfset querysetcell(q,"countrycode","US") /><cfset querysetcell(q,"countryname","United States of America") />
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","OR") /><cfset querysetcell(q,"name","OREGON") /><cfset querysetcell(q,"countrycode","US") /><cfset querysetcell(q,"countryname","United States of America") />
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","PW") /><cfset querysetcell(q,"name","PALAU") /><cfset querysetcell(q,"countrycode","US") /><cfset querysetcell(q,"countryname","United States of America") />
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","PA") /><cfset querysetcell(q,"name","PENNSYLVANIA") /><cfset querysetcell(q,"countrycode","US") /><cfset querysetcell(q,"countryname","United States of America") />
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","PR") /><cfset querysetcell(q,"name","PUERTO RICO") /><cfset querysetcell(q,"countrycode","US") /><cfset querysetcell(q,"countryname","United States of America") />
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","RI") /><cfset querysetcell(q,"name","RHODE ISLAND") /><cfset querysetcell(q,"countrycode","US") /><cfset querysetcell(q,"countryname","United States of America") />
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","SC") /><cfset querysetcell(q,"name","SOUTH CAROLINA") /><cfset querysetcell(q,"countrycode","US") /><cfset querysetcell(q,"countryname","United States of America") />
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","SD") /><cfset querysetcell(q,"name","SOUTH DAKOTA") /><cfset querysetcell(q,"countrycode","US") /><cfset querysetcell(q,"countryname","United States of America") />
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","TN") /><cfset querysetcell(q,"name","TENNESSEE") /><cfset querysetcell(q,"countrycode","US") /><cfset querysetcell(q,"countryname","United States of America") />
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","TX") /><cfset querysetcell(q,"name","TEXAS") /><cfset querysetcell(q,"countrycode","US") /><cfset querysetcell(q,"countryname","United States of America") />
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","UT") /><cfset querysetcell(q,"name","UTAH") /><cfset querysetcell(q,"countrycode","US") /><cfset querysetcell(q,"countryname","United States of America") />
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","VT") /><cfset querysetcell(q,"name","VERMONT") /><cfset querysetcell(q,"countrycode","US") /><cfset querysetcell(q,"countryname","United States of America") />
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","VI") /><cfset querysetcell(q,"name","VIRGIN ISLANDS") /><cfset querysetcell(q,"countrycode","US") /><cfset querysetcell(q,"countryname","United States of America") />
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","VA") /><cfset querysetcell(q,"name","VIRGINIA") /><cfset querysetcell(q,"countrycode","US") /><cfset querysetcell(q,"countryname","United States of America") />
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","WA") /><cfset querysetcell(q,"name","WASHINGTON") /><cfset querysetcell(q,"countrycode","US") /><cfset querysetcell(q,"countryname","United States of America") />
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","WV") /><cfset querysetcell(q,"name","WEST VIRGINIA") /><cfset querysetcell(q,"countrycode","US") /><cfset querysetcell(q,"countryname","United States of America") />
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","WI") /><cfset querysetcell(q,"name","WISCONSIN") /><cfset querysetcell(q,"countrycode","US") /><cfset querysetcell(q,"countryname","United States of America") />
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","WY") /><cfset querysetcell(q,"name","WYOMING") /><cfset querysetcell(q,"countrycode","US") /><cfset querysetcell(q,"countryname","United States of America") />
            
            <!--- North America - Canada--->
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","AB") /><cfset querysetcell(q,"name","Alberta") /><cfset querysetcell(q,"countrycode","CA") /><cfset querysetcell(q,"countryname","Canada") />
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","BC") /><cfset querysetcell(q,"name","British Columbia") /><cfset querysetcell(q,"countrycode","CA") /><cfset querysetcell(q,"countryname","Canada") />
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","MB") /><cfset querysetcell(q,"name","Manitoba") /><cfset querysetcell(q,"countrycode","CA") /><cfset querysetcell(q,"countryname","Canada") />
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","NB") /><cfset querysetcell(q,"name","New Brunswick") /><cfset querysetcell(q,"countrycode","CA") /><cfset querysetcell(q,"countryname","Canada") />
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","NL") /><cfset querysetcell(q,"name","Newfoundland and Labrador") /><cfset querysetcell(q,"countrycode","CA") /><cfset querysetcell(q,"countryname","Canada") />
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","NT") /><cfset querysetcell(q,"name","Northwest Territories") /><cfset querysetcell(q,"countrycode","CA") /><cfset querysetcell(q,"countryname","Canada") />
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","NS") /><cfset querysetcell(q,"name","Nova Scotia") /><cfset querysetcell(q,"countrycode","CA") /><cfset querysetcell(q,"countryname","Canada") />
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","NU") /><cfset querysetcell(q,"name","Nunavut") /><cfset querysetcell(q,"countrycode","CA") /><cfset querysetcell(q,"countryname","Canada") />
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","ON") /><cfset querysetcell(q,"name","Ontario") /><cfset querysetcell(q,"countrycode","CA") /><cfset querysetcell(q,"countryname","Canada") />
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","PE") /><cfset querysetcell(q,"name","Prince Edward Island") /><cfset querysetcell(q,"countrycode","CA") /><cfset querysetcell(q,"countryname","Canada") />
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","QC") /><cfset querysetcell(q,"name","Quebec") /><cfset querysetcell(q,"countrycode","CA") /><cfset querysetcell(q,"countryname","Canada") />
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","SK") /><cfset querysetcell(q,"name","Saskatchewan") /><cfset querysetcell(q,"countrycode","CA") /><cfset querysetcell(q,"countryname","Canada") />
            <cfset queryaddrow(q) /><cfset querysetcell(q,"code","YT") /><cfset querysetcell(q,"name","Yukon") /><cfset querysetcell(q,"countrycode","CA") /><cfset querysetcell(q,"countryname","Canada") />
            

And, there you go. Ready made dropdowns to capture state information. You'd set the cfproperty to call this like the example below. You can specify a delimited list of country codes in ftCountries to grab from, or leave the property blank to grab all states in the getStates funtion.


<cfproperty ftseq="7" ftfieldset="Tour Event Overview" ftwizardStep="General Details" name="state" type="string" hint="State." fttype="state" ftCountries="US,CA" required="no" default="" ftLabel="State" />

Comments (Comment Moderation is enabled. Your comment will not appear until approved.)
cfalchemist's Gravatar Why would you not populate a table with the state/country data instead of hard-coding the values with querysetcell?
# Posted By cfalchemist | 2/13/09 4:11 AM
Geoff Bowers's Gravatar It would be easy enough to have a database query populate the formtool, but then you need to deploy and manage a table. For very static data-sets and form widgets that are used in lots of different applications, its very convenient to have a hardcoded option that is completely code driven.
# Posted By Geoff Bowers | 2/13/09 4:44 AM
CfAlchemist's Gravatar It seems to me that the table option allows the programmer to more accurately manage the data. If city, state, region, provinces and countries lines are redrawn then the code becomes obsolete. Under a table scenario, a page to update this data would be needed for a site owner to make those changes, whereas in this situation a programmer has to be hired to find the code and
make the changes.

There is also the consideration for mistakes and security in the code itself. Optimized code is less code and potentially more secure code. We all know how one little jot or tittle can give us the "bug in machine". And does this code give a hacker access to alter data in the dropdown? Does this code lend its self to any relations within the database that could impact performance, such as sorting, filter, etc.?

It would also be interesting to see a quick study on time to purpose for this code versus a generic query/loop code to the same purpose, just to get some insight as to which CF is optimized for, I'm betting Matthews code is quicker since its native java construct.

My point is that this adds one more layer of complexity to the page when a simple query and loop element to populate the dropdown would suffice.
# Posted By CfAlchemist | 2/13/09 5:20 AM
Geoff Bowers's Gravatar Hey, don't get me wrong, managing it all in a table has its advantages. The point is having a library in the database has been an available option since the beginning. FarCry 5.1 has some new formtools -- it does countries and states, and that's handy.

For the technically minded, the real feature is not countries and state drop downs at all, but rather the ftwatch option that allows you to have formtools bind to each other and automatically ajax in changes.
# Posted By Geoff Bowers | 2/13/09 6:08 AM
Matthew Williams's Gravatar Yeah, the ftWatch property came up the other day in the google groups. In this case, since I *THINK* we're only doing stints in North America, it made sense just to go with States. If the tour heads out to other regions, it makes sense go with the country linked to state option. Something to post about in the future for sure, and it looks like it's not just limited to country/state. You could use it to join any type.

The real advantage I can see for making country and state a database table is you could give more control to the CMS minded users to modify country and states. Those who cannot change the underlying CFC are required to call upon their developers to do it for them. It would really just require making a new Country and State pacakge/type, and then query from there. Heck, they're stored as a query now... it just would be a move to a real database, instead of an in memory query.
# Posted By Matthew Williams | 2/13/09 10:25 AM
CfAlchemist's Gravatar Thanks guys for the thoughtful replies. Don't get me wrong on my posts either, hardcoding the data does have its advantages and this could be one of them. I just want to make sure its the best solution. I'll definitely check out the "watch" function. Thanks.
# Posted By CfAlchemist | 2/13/09 2:26 PM
Geoff Bowers's Gravatar Also it's not just about whether to hardcode data. Matthew's example illustrates how to extend the default behaviour of the formtool. One of the key advantages is that the country/state formtools are part of a greater library that anyone using FarCry can leverage. The typical user is never going to bother with extending the data once the framework aggregates the most common country/state combinations.
# Posted By Geoff Bowers | 2/16/09 4:16 AM