web-dev-qa-db-ja.com

特定のユーザー/ロールから非表示になっているときにフィールドの値を設定するにはどうすればよいですか?

特定のユーザーに対して表示したくないフィールドがありますが、データを入力する他のフィールドから推定された値をそのフィールドに入力したいのですが。

これを行うには、フィールドをhook_form_alterで非表示に設定します。

$form['field_target']['#type'] = 'hidden';

次に、次のような別のフィールドに基づいて、form_validate関数内からフィールドの値を設定します。

$form_state['values']['field_target']['und']['0'] = 
    $form_state['values']['field_source']['und']['0'];

そして、field_sourceでフォーム検証エラーを強制しない限り、これは正常に機能します。検証エラーを修正して再度送信すると、PHP Error:

PHP Fatal error:  Cannot create references to/from string offsets 
    nor overloaded objects in includes/common.inc on line 6288

このエラーは、field_targetの設定をコメントアウトしても発生します。ただし、[#type'] = 'hidden'行を削除することでこのエラーを修正でき、すべてのユーザーに対してフィールドが表示されることを除いて、すべてが正常に機能します。

上記のアプローチを修正する方法はありますか、または私がやろうとしていることを達成するためのより良い方法はありますか?

2
DanH

OK、設定するとこのエラーを回避できるようです:

$form['field_target']['#access'] = FALSE;

の代わりに ['#type'] = 'hidden';とDrupalがおかしくなりません。

誰かがより良いアイデアを持っているなら、私は別の答えを受け入れます:)

3
DanH