在Drupal Forms中拥有50状态下拉框的最有效方法

时间:2010-06-14 03:40:34

标签: drupal drupal-6 drupal-fapi

我知道一种方法是在数据库中有一个包含所有状态的表,然后你会在表单中阅读它。你认为有没有更简单的方法呢?

我觉得这样的事情很糟糕,因为它是如此基础但是我想如此简单的东西已经在Drupal中实现了。

6 个答案:

答案 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()”,它返回由州的双字母代码键入的美国州的数组。