Самый эффективный способ иметь выпадающий список из 50 состояний в Drupal Forms - PullRequest
1 голос
/ 14 июня 2010

Я знаю, что одним из способов является создание таблицы в базе данных со всеми состояниями, и тогда вы прочитаете ее в своей форме. Есть ли более простой способ, по вашему мнению, ребята?

Мне плохо, когда я спрашиваю о чем-то подобном, поскольку это настолько элементарно, но я бы предположил, что что-то такое простое, как это, уже реализовано в Drupal.

Ответы [ 6 ]

2 голосов
/ 14 июня 2010

Нет необходимости попадать в базу данных.Создайте себе функцию, которая возвращает массив состояний.

$form['state'] = array(
  '#type' => 'select',
  '#options' => mymodule_states_list(),
  '#title' => t('State'),
);

function mymodule_states_list() {
  return array(
    'AL' => 'Alabama',
    'AK' => 'Alaska',
    ...
    'WY' => 'Wyoming',
  );
}
0 голосов
/ 21 июня 2010

Просто вспомнил этот вопрос, когда я экспериментировал с модулем Geonames. Среди множества других функций Geonames включает в себя функцию "geonames_us_states ()", которая возвращает массив состояний США, обозначенных двухбуквенным кодом штатов.

0 голосов
/ 15 июня 2010

Модуль API кодов стран также предоставляет модуль API кодов регионов, который включает штаты США.С помощью этого модуля вы можете получить массив, подходящий для элемента выбора Form API, вызвав regions_api_iso2_get_options_array('US').

0 голосов
/ 14 июня 2010

Или сохраните его в плоском файле и прочитайте его. Например:

Плоский файл =

$us_states_options = array(
 'AL' => 'Alabama',
 'AK' => 'Alaska',
//...etc
)

Функция:

include_once(drupal_get_path('module', 'module_name') .'/us_states.inc');

Все довольно уродливо, нопо крайней мере, вы можете редактировать этот файл независимо, и вы можете работать хорошо, если у вас большой список.Есть миллион способов, которыми вы могли бы включить этот список - используя exec, fgetcsv / file и т.д ....

Но я думаю, что решение ceejayoz - самое хорошее.Я бы, вероятно, раскрутил эти виды утилитарных функций в отдельное включение, чтобы содержать его в чистоте.

0 голосов
/ 14 июня 2010

Это один из способов сделать это, конечно.Вы можете сохранить список состояний как переменную и вызывать ее.

$options = variable_get('mymodule_us_states', 0);

Пока это массив.Вы также можете иметь внутреннюю функцию, которая возвращает состояния.

0 голосов
/ 14 июня 2010

Если вы создаете форму с помощью FormAPI Drupal, вы можете просто включить массив состояний в код вашего модуля, поскольку имена и сокращения не должны скоро изменяться.

Если вы пытаетесь сохранить свой код в чистоте, вы можете сохранить массив состояний в виде переменной Drupal с помощью variable_set (), а затем извлечь его с помощью variable_get (). Вы действительно не должны беспокоиться о базе данных для такого рода вещей.

...