Как изменить страну в раскрывающемся меню модуля? - PullRequest
1 голос
/ 02 июня 2011

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

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

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

Любая помощь очень ценится.

Спасибо!-Джефф

Ответы [ 2 ]

0 голосов
/ 15 ноября 2016

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

0 голосов
/ 03 июня 2011

Вы правы, 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 варианта в списке стран. Используя этот метод, вы теперь можете легко вносить изменения и в другие формы.

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

...