Webform モジュールを使用してノード参照フィールドを追加することは可能ですか?
もしそうなら、どうすれば私のウェブフォームに追加できますか?
私はこれを行いましたが、新しいモジュールと新しいwebformコンポーネントを作成することにより、ユーザー参照のために行いました。
この新しいコンポーネントは、ユーザー参照機能を効果的に再作成し、Webフォームで選択できるようにします。ノード参照に対して同じアプローチを試すこともできます。
また、_webform_defaults_component()
のようなフックを使用して新しいコンポーネントを作成する際の基本を支援するために、Webフォームの例にはいくつかの良い例があります。
あなたを助ける主なものは、コンポーネントで必要となる_webform_render_component()
の'#autocomplete_path' => 'autocomplete/node',
です。
...モジュールに以下のようなものを追加します(明らかにノード検索用に変更します):
//create a url path for the autocomplete
function hook_menu() {
$items['autocomplete/users'] = array(
'path' => 'autocomplete/users',
'title' => 'Auto Complete Users',
//page callback to a custom function
'page callback' => 'hook_autocomplete_users',
'type' => MENU_CALLBACK,
'access arguments' => array('access content'),
);
return $items;
}
//custom function created to mimic auto complete functionailty
function hook_autocomplete_users($string = '') {
$matches = array();
$query = "SELECT u.name, u.uid FROM {users} u WHERE name LIKE LOWER('%s%%')";
$result = db_query_range($query, $string, 0, 10);
while ($user = db_fetch_object($result)) {
$matches[$user->name.' uid:'.$user->uid] = $user->name;
}
//print drupal_to_js($matches);
drupal_json($matches);
//exit();
}
デフォルトでは単にnidであるため、ノード参照にも必要なものを選択する必要があります。これはメールではかなり役に立たないためです。
Entityforms モジュールは標準のDrupalフィールドを使用します。つまり、任意の標準Drupalフィールドを使用できます。Webformsを使用したことがある人は、このモジュールはWebformの機能を「標準」に組み込みますDrupalフィールド/エンティティの世界。
Webformは大勢のフォロワーを持つ素晴らしいモジュールですが、標準のDrupalフィールドまたはエンティティ対応モジュールとは統合されていません。したがって、Drupal 7サイトの場合、 Entityformsモジュールの使用をお勧めします!
Webformと同様に、フォーム送信通知のルールモジュールとうまく統合し、複雑な通知ロジックを可能にします。
チェックアウト Webform参照モジュール 。私はそれがあなたのケースに完全に合っていると思います。
モジュールページが読むように
Webフォームのノード/用語を参照できるWebフォームコンポーネントを提供します。現在、モジュールにはノード/用語参照コンポーネントが含まれています。 「選択リスト」と「オートコンプリート」をウィジェットとして提供します。ユーザー参照は後で追加されます。
古いWebformモジュールをダンプして、 Entity Form :)を見てください。
たとえば、Nodeフォームの参照フィールドを追加できます。きちんとしたモジュールでした!
function MY_MODULE_webform_select_options_info() {
$items = array();
$items['my_custom_list'] = array(
'title' => t('Custom list'),
'options callback' => 'MY_MODULE_custom_list'
);
return $items;
}
function MY_MODULE_custom_list() {
$my_custom_list = array(
'foo' => 'bar',
);
return $my_custom_list;
}
これで、新しいビルド済みオプションリストができました。新しいフィールドタイプ「select options」を作成すると、「Load a pre-built option list」を選択でき、新しいリストがあります。