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" />
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.
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.
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.