我一直在研究一种方法来限制contrib位置模块附带的下拉列表中的可用国家/地区。我认为hook_form_alter是处理只显示某些国家/地区的方法,但是从手上开始一个hook_form_alter片段并不是我有能力实现的。经过大量的谷歌搜索后,我无法找到一个代码片段来启动我。
我正在开展的一个项目现在只允许来自美国和加拿大的注册,所以我想将这个下拉限制在这两个国家。调用国家/地区列表的函数是location_get_iso3166_list,数组是$ countries。位置模块用于填充内容配置文件模块中的片段。
我在网上发现了一些帖子,建议只是评论.inc文件中不需要的国家...这不是这个项目的选项,因为我们正在进行多站点设置,所以在模块中更改它将影响其他站点。我想我需要在template.php
中添加一个hook_form_alter片段非常感谢任何帮助。
谢谢! -Jeff
答案 0 :(得分:0)
你是对的,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个选项。使用此方法,您现在也可以轻松地更改其他表单。
这个想法来自Make Location form fields available to hook_form_alter()。如果将来您决定添加其他国家/地区,则可以在http://api.lullabot.com/location_get_iso3166_list/5
找到完整的键/值对列表答案 1 :(得分:0)
如果您使用的是Drupal 7,请编辑相关的字段设置,并从后端限制国家/地区选项。