1

私は、投稿場所モジュールに付属するドロップダウンで利用可能な国を制限する方法を研究してきました。hook_form_alterは特定の国を表示するだけの処理方法だと思いますが、hook_form_alterスニペットを手元から開始することは、私が達成できることではありません。何度もグーグルした後、始めるためのコードスニペットを見つけることができませんでした。

私が現在取り組んでいるプロジェクトでは、米国とカナダからの登録のみが許可されているため、そのドロップダウンをこれら2か国のみに制限したいと思います。国リストを呼び出す関数はlocation_get_iso3166_listであり、配列は$countriesです。ロケーションモジュールは、コンテンツプロファイルモジュールにピースを入力するために使用されています。

.incファイルで不要な国をコメントアウトすることを提案するいくつかの投稿をオンラインで見つけました...これはマルチサイト設定であるため、このプロジェクトのオプションではないため、モジュールは他のサイトに影響します。template.phpにhook_form_alterスニペットを追加する必要があると思います

どんな助けでも大歓迎です。

ありがとう!-ジェフ

4

2 に答える 2

0

正解です。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にあります。

于 2011-06-02T20:51:29.787 に答える
0

Drupal 7を使用している場合は、関連するフィールド設定を編集し、バックエンドからの国のオプションを制限します。

于 2016-11-14T22:00:27.923 に答える