我知道一种方法是在数据库中有一个包含所有状态的表,然后你会在表单中阅读它。你认为有没有更简单的方法呢?
我觉得这样的事情很糟糕,因为它是如此基础但是我想如此简单的东西已经在Drupal中实现了。
答案 0 :(得分:2)
无需点击数据库。构建一个返回状态数组的函数。
$form['state'] = array(
'#type' => 'select',
'#options' => mymodule_states_list(),
'#title' => t('State'),
);
function mymodule_states_list() {
return array(
'AL' => 'Alabama',
'AK' => 'Alaska',
...
'WY' => 'Wyoming',
);
}
答案 1 :(得分:0)
如果您使用Drupal的FormAPI构建表单,您可以在模块代码中包含状态数组,因为名称和缩写不应该很快改变。
如果您要保持代码清洁,可以使用variable_set()将状态数组保存为Drupal变量,然后使用variable_get()检索它。对于那种事情,你真的不需要为数据库烦恼。
答案 2 :(得分:0)
这是一种方法,当然。您可以将状态列表存储为变量,并将其调用。
$options = variable_get('mymodule_us_states', 0);
只要它是一个数组。您还可以使用返回状态的内部函数。
答案 3 :(得分:0)
或者将其存储在一个平面文件中并将其读入。例如
平面文件=
$us_states_options = array(
'AL' => 'Alabama',
'AK' => 'Alaska',
//...etc
)
功能:
include_once(drupal_get_path('module', 'module_name') .'/us_states.inc');
所有这些都非常丑陋,但您至少可以独立编辑该文件,如果您有更大的列表,可能会很好用。有一百万种方法可以包含列表 - 使用exec,fgetcsv / file等....
但我认为ceejayoz解决方案是最好的。我可能会将这些实用功能分解成一个单独的包含,以保持自己清洁。
答案 4 :(得分:0)
Country codes API模块还提供了包含美国州的区域代码API模块。使用此模块,您可以通过调用regions_api_iso2_get_options_array('US')
来获取适合Form API select元素的数组。
答案 5 :(得分:0)
我正在尝试使用Geonames模块,只记得这个问题。在众多其他功能中,Geonames包含函数“geonames_us_states()”,它返回由州的双字母代码键入的美国州的数组。