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


9

これはしばらくの間私を悩ませてきました。グループオーディエンスフィールドのようなフィールド、または発行設定をフォームから非表示にしようとすると、検証時にフォームはこれらのフィールドの両方を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>';

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

ありがとう


この答えは完全ではありません。使用すると、DOM操作で値が変更される可能性があるためです
iStryker

回答:


6

編集:

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

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で機能するかどうか、また前処理関数で実行できるかどうかはわかりません。


回答いただきありがとうございます。残念ながら私の場合は機能しませんでしたが、フォームフィールドには編集フォームであるため、#valueが既に登録されています
SilkAdmin

@silkAdmin新しい編集をご覧ください
iStryker '17 / 07/17

時間をかけて時間を割いてくれたStrykerに感謝します。上記の技術は機能しますが、フィールドを非表示にしますが、送信時にデフォルト値も考慮されないようです。そのため、プロファイルを編集するたびに、ユーザーがグループから追い出されることになります。これまでのところ、#prefix#サフィックストリックのみが正常に動作するようです。
SilkAdmin

$ form ['title'] ['
#value

5

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

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

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


バディ、あなたは私を救った。ありがとう。私が見た他のすべてのメソッドは、フォーム自体の要素を出力しません。私の場合、contribモジュールでフォーム要素を非表示にしたいと思います。contribモジュールでは、これらの要素がフォーム内にあると想定していると、正しく機能しません。CSS修正により、不要な要素が非表示になりますが、すべてが機能します。これは「ハッカープルーフ」ではなく、信頼できる編集ユーザーに提示するインターフェースを単純化することが必要な場合にのみ機能することにも注意してください。
Mario Awad 2015
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.