如何更改位置模块中的国家/地区下拉列表?

时间:2011-06-02 18:06:46

标签: drupal location hook-form-alter

我一直在研究一种方法来限制contrib位置模块附带的下拉列表中的可用国家/地区。我认为hook_form_alter是处理只显示某些国家/地区的方法,但是从手上开始一个hook_form_alter片段并不是我有能力实现的。经过大量的谷歌搜索后,我无法找到一个代码片段来启动我。

我正在开展的一个项目现在只允许来自美国和加拿大的注册,所以我想将这个下拉限制在这两个国家。调用国家/地区列表的函数是location_get_iso3166_list,数组是$ countries。位置模块用于填充内容配置文件模块中的片段。

我在网上发现了一些帖子,建议只是评论.inc文件中不需要的国家...这不是这个项目的选项,因为我们正在进行多站点设置,所以在模块中更改它将影响其他站点。我想我需要在template.php

中添加一个hook_form_alter片段

非常感谢任何帮助。

谢谢! -Jeff

2 个答案:

答案 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,请编辑相关的字段设置,并从后端限制国家/地区选项。