正解です。hook_form_alter()は良いスタートです。コンテンツタイプのフォームを変更しようとしている場合、私が使用した1つの方法は、hook_form_alter()を実装する非常に小さくて単純なカスタムモジュールを作成することです。このモジュールの作成に関する詳細/手順は、以下にあります。
例として、私はこのモジュールを「custom_countries」と呼んでいます。名前を変更したい場合は、いつでもファイルの名前を変更し、後で検索して置き換えることができます。
sites/all/modules
まず、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設定を使用している場合は「profile」のみ)。また、「FIELD_NAME」をロケーションフィールドのマシン名に変更します。
最後に、でモジュールを有効にしますadmin/build/modules
。
これで、指定したコンテンツタイプを作成/編集するときに、国リストに2つのオプションのみが表示されます。この方法を使用すると、他のフォームにも簡単に変更を加えることができるようになりました。
このアイデアは、hook_form_alter()で[場所]フォームフィールドを使用できるようにすることから生まれました。将来、他の国を追加することにした場合、キーと値のペアの完全なリストはhttp://api.lullabot.com/location_get_iso3166_list/5にあります。