web-dev-qa-db-ja.com

オーガニックグループのgroup_audienceなど、フォーム内のフィールドへのアクセスを非表示または禁止する方法

これはしばらくの間私を悩ませてきました。グループオーディエンスフィールドのようなフィールド、またはフォームから公開設定を非表示にしようとすると、検証時にフォームはこれらのフィールドの両方をnull値に設定しました。正しく宣言されています。

Invisible、#access、unset hidden none workを使用しようとしました!私の現在のプロジェクトでは、ユーザーが編集できるのは一度にプロファイルのごく一部、たとえば住所や写真だけなので、グループの聴衆を非表示にすると、ユーザーは所属するグループから追い出されてしまいます編集。

ユーザーをグループに残したまま、以下のコードを使用してこれらのフィールドを非表示にしました。

$variables['user_edit_about']['group_audience']= $temp['group_audience'];       
$variables['user_edit_about']['group_audience']['#prefix'] = '<div style="display:none;">';
$variables['user_edit_about']['group_audience']['#suffix'] = '</div>';

誰かがこれを達成するためのより良い方法を考えますか?

ありがとう

9
silkAdmin

編集:

わかりました。これをカスタムモジュールに配置します。

_function example_form_alter(&$form, &$form_state, $form_id) {
    if($form_id == 'story_node_form') {
        $form['title']['#value'] = 'hot stuff';
        $form['title']['#access'] = FALSE;

    }
}
_

これにより、ストーリーノードのタイトルが「ホットスタッフ」に設定され、#access = FALSEであるため、ページにレンダリングされません。

次のように、hook_form_alter()内にさらに細かい制御を追加できます

_  global $user;

  // Check to see if $user has does not have the administrator role.
  if (!in_array('administrator', array_values($user->roles))) {
    $form['title']['#access'] = FALSE;
  }
_

これはDrupal 6&7で機能します。

古い回答(無視):

このようなことをしたのは久しぶりなので間違っているかもしれません。フォーム項目の_[#value]_を設定すると、フォームに表示されなくなります。

私はこれをカスタムモジュールのDrupal 6、hook_form_alter()で行いました。それがDrupal 7で機能するかどうかはわかりませんあなたが前処理関数でそれを行うことができるかどうかわかりません

6
iStryker

'element-hidden' CSSクラスをフォーム要素に追加することもできます

$form['user_edit_about']['group_audience']['#attributes']['class'][] = 'element-hidden';

IStrykerが前述したように、DOM操作を通じて値を変更することは可能です。ただし、これは、フォームフィールド(またはその他のレンダリング要素)を非表示にする簡単な方法です。 element-hiddenクラスはsystem.base.cssで定義されています。

5
Chaulky