Как изменить страну в раскрывающемся меню модуля?
Я исследовал способ ограничения доступных стран в раскрывающемся списке, который поставляется вместе с модулем размещения вкладов. Я думаю, что 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, то отредактируйте соответствующие настройки поля и ограничьте параметры страны из серверной части.