Posted by bzj00220 on December 24, 2013 at 3:25am
プロファイルタイプをいくつか作りたかったため
profile2というモジュールを使って
複数のプロファイルタイプを作っています。
webformで作ったフィールドにデフォルト値として
上記のプロファイルの値を表示させたいのですが
どのようにすればよいのかわかりません。
フィールドの下のトークン値という部分を開くと
下記のような説明が書かれています。
%profile[キー] - Any user profile field or value, such as %profile[name] or %profile[profile_first_name]
なのでキーのところにプロファイルタイプのフィールド名のシステム内部名称を記載してみたのですがなにも表示されませんでした。
%profile[field_kentikuka_jimusyomei]
webformで作ったフィールドにデフォルト値として
上記のプロファイルの値を表示させる方法がわかる方は教えていただければ幸いです。
Comments
2年くらい前に同じ事を実現する必要があり、調べた事がありま
2年くらい前に同じ事を実現する必要があり、調べた事があります。
%profileは、Drupal coreのprofile moduleが提供しているtokenなので、profile2のデータは取れません。
その時は、以下のようにhook_form_alter()を実装して同じ機能を作りました。
/**
* Implements of hook_form_alter().
*/
function foo_form_alter(&$form, &$form_state, $form_id) {
if (!user_is_logged_in()) {
return;
}
global $user;
if (strpos($form_id, 'webform_client_form_') == 0 && array_key_exists('submitted', $form)) {
$p = profile2_load_by_user($user, 'default');
$keys = array_keys($form['submitted']);
foreach ((array)$keys as $key) {
if (strpos($key, 'profile2_') === false) continue;
$k = substr($key, strlen('profile2_'));
$property = 'field_' . $k;
if (property_exists($p, $property) && array_key_exists('und', $p->{$property})) {
$form['submitted'][$key]['#value'] = $p->{$property}['und'][0]['value'];
}
}
}
}
コードを見ると分かるのですが、profile2からデフォルト値を入力させたいwebform componentのキーは'profile2_{peofile2のfield key}'とする必要があります。
今はもっと簡単な実現方法があるかもしれません。
%profileは、Drupal coreのprofile
そうだったんですね。
他にも方法を書いて頂いてありがとうございます。
せっかく書いていただいたんですが
私には難しそうなので今回は諦めることにしました。
ありがとうございました。