Как изменить страну в раскрывающемся меню модуля?

Я исследовал способ ограничения доступных стран в раскрывающемся списке, который поставляется вместе с модулем размещения вкладов. Я думаю, что hook_form_alter - это способ обрабатывать только показ определенных стран, но запуск фрагмента hook_form_alter из рук - это не то, чего я могу достичь. После долгих поисков я не смог найти фрагмент кода для начала работы.

Проект, над которым я сейчас работаю, разрешает регистрацию только из США и Канады, поэтому я хочу ограничить это раскрытие только этими двумя странами. Функция, которая вызывает список стран, является location_get_iso3166_list, а массив - $ country. Модуль местоположения используется для заполнения частей в модуле профиля контента.

Я нашел пару постов в Интернете, которые предлагают просто комментировать страны, которые не нужны в файле.inc... это не вариант для этого проекта, так как мы находимся в многосайтовой конфигурации, поэтому изменим его в модуль повлияет на другие сайты. Я думаю, что мне нужно добавить фрагмент hook_form_alter в template.php

Любая помощь с благодарностью.

Благодарю вас! -Джефф

2 ответа

Решение

Вы правы, hook_form_alter () - хорошее начало. Если вы хотите изменить форму типа контента, я использовал один метод - создать действительно маленький и простой пользовательский модуль, реализующий hook_form_alter (). Подробности / инструкции по созданию этого модуля можно найти ниже.

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

Сначала вам нужно создать новую папку в папке ваших модулей (sites/all/modules, так далее). (Все файлы, созданные с этого момента, должны быть помещены в эту папку). Затем создайте новый файл с именем custom_countries.info и поместите в него следующее и сохраните:

name = "Custom Countries"
description = "Changes the list of countries available from Location module for certain content types"
core = 6.x

Затем создайте другой файл с именем custom_countries.module, поместите следующий код внутрь и сохраните файл:

<?php
/**
 * @file custom_countries.module
 * Module to change the countries options of location module
 * for certain content type(s)
 */

/**
 * Implementation of hook_form_alter()
 */
function custom_countries_form_alter(&$form, $form_state, $form_id) {
  // Replace "YOUR_CONTENT_TYPE with the name of the content type desired
  if ($form_id == 'YOUR_CONTENT_TYPE_node_form') {
    $form['#after_build'][] = 'custom_countries_after_build';
  }
}

/**
 * Make changes to countries field after all fields are rendered
 */
function custom_countries_after_build($form_element, &$form_state) {
  // Replace FIELD_NAME with the machine name of the location field for your content type
  $form_element[FIELD_NAME][0]['country']['#options'] = array(
    'ca' => 'Canada',
    'us' => 'United States',
  );
  return $form_element;
}

Важно: обязательно прочитайте комментарии и замените "YOUR_CONTENT_TYPE" на имя машины того типа контента, в котором находится ваше поле местоположения (возможно, просто "профиль", если используются настройки по умолчанию content_profile). Также замените "FIELD_NAME" на имя машины в поле местоположения.

Наконец, включите модуль в admin/build/modules,

Теперь, когда вы создаете / редактируете указанный вами тип контента, вы увидите только 2 варианта в списке стран. Используя этот метод, вы теперь можете легко вносить изменения и в другие формы.

Идея для этого пришла из полей формы "Сделать местоположение" доступными для hook_form_alter (). Если в будущем вы решите добавить другие страны, полный список пар ключ / значение можно найти по адресу http://api.lullabot.com/location_get_iso3166_list/5

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

Другие вопросы по тегам