webform内のフィールドにプロファイルの値を表示させたい

Events happening in the community are now at Drupal community events on www.drupal.org.
bzj00220's picture

プロファイルタイプをいくつか作りたかったため
profile2というモジュールを使って
複数のプロファイルタイプを作っています。

webformで作ったフィールドにデフォルト値として
上記のプロファイルの値を表示させたいのですが
どのようにすればよいのかわかりません。

フィールドの下のトークン値という部分を開くと
下記のような説明が書かれています。

%profile[キー] - Any user profile field or value, such as %profile[name] or %profile[profile_first_name]

なのでキーのところにプロファイルタイプのフィールド名のシステム内部名称を記載してみたのですがなにも表示されませんでした。

%profile[field_kentikuka_jimusyomei]

webformで作ったフィールドにデフォルト値として
上記のプロファイルの値を表示させる方法がわかる方は教えていただければ幸いです。

Comments

blauerberg's picture

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

bzj00220's picture

%profileは、Drupal coreのprofile moduleが提供しているtokenなので、profile2のデータは取れません。

そうだったんですね。
他にも方法を書いて頂いてありがとうございます。
せっかく書いていただいたんですが
私には難しそうなので今回は諦めることにしました。
ありがとうございました。

日本 コミュニティ: Drupal Japan User Group

Group organizers

Group categories

Group notifications

This group offers an RSS feed. Or subscribe to these personalized, sitewide feeds: