コンテンツタイプまたはユーザーロールごとに垂直タブを無効にする


10

一部のユーザーは、ノード編集フォームの垂直タブに表示されるフィールドセットのいずれかを編集する機能しか持っていない場合があります。このような場合、垂直タブを1つしか選択できないため、垂直タブを使用するのはかなりばかげています。スクリーンショットを見る:

スクリーンショット

では、ユーザーの役割によって垂直タブを無効にすることは可能ですか?または、それを除いて、特定のコンテンツタイプに対して完全に無効化しますか?私のユースケースでは、場所を垂直タブに表示しないようにします。

レンダリング可能なフィールドとフィールドグループを一緒に試しましたが、フォームが正しく管理されていませんでした(バグだと思います)。アレンジフィールドは垂直タブを分離することはできません。


これを修正したことがありますか?ubercart製品タブでも同じことをしようとしています。
ディー

回答:


7

これにはいくつかの方法があります。

  1. レンダリング可能要素モジュールを使用できます(前述のとおり)。これにより、インストールの任意のビルドを登録し、フィールドUIを介して表示を管理できます。フォームの管理/表示画面で既存のエンティティの(追加の)要素を利用できるようにします。たとえば、連絡先フォームを登録し、フィールドUIを介してフィールドを再配置できます。現在フォームで問題なく動作しますが、他のサポートは2回目の反復で提供されます。

  2. または、カスタムモジュールに以下を追加します。

    $config['yourcontenttype_node_form'] = FALSE;
    variable_set('vertical_tabs_forms', $config);
  3. 垂直タブを無効にするサンドボックスモジュール

これを参照するこの主要な問題はここにあります。


質問で述べたように、レンダリング可能な要素が機能しません。それはまだアルファ段階にあり、場所に関する既知のバグがあります。だから私の状況ではうまくいきません。そうでなければ、はい、私はこれがうまくいくと思います。将来そのバグが修正された場合、おそらくレンダリング可能な要素がこれに対処するための最良の方法です。
ジェイ

申し訳ありませんが、あなたの質問をすくい取り、レンダリング可能な要素モジュールへの参照を完全に逃しました。そうは言っても、開発バージョンは魅力のように機能します。それを試してみてください。

うーん、わかりました。他に選択肢がない場合は、開発版を使用してみます。とりあえず、このままにしておきます。
Jay

上記の回答をより多くのオプションで変更しました。

1
あなたが正しいです。私はそれを試してみましたが、これはD6のようにD7では機能しません。残念ながら、レンダリング可能な要素が機能せず、独自のモジュールやサンドボックスモジュールの使用に満足できない場合、他に何があるかわかりません。

6

#accessチェックを使用して、垂直タブが表示されないようにすることもできます。

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

それをフックフォームの変更に、またはフォームのロードとレンダリングの間に追加するだけです。その後、render($ form)を呼び出してマークアップを取得できます。


2

私はすでに述べたスレッドで可能な簡単な解決策を書きました:https : //drupal.org/node/1048644#comment-7822687。便宜上、ここに貼り付けます。

$form['additional_settings']['#type']変数の値を'fieldset'に等しい場合は、hook_form_alter()またはhook_form_FORM_ID_alter()の実装で変数の値を変更するだけで、フォームの垂直タブを無効にする簡単な方法があります'vertical_tabs'
アクセス設定を変更したり、$formアレイ全体を再帰的にウォークしたりする必要はありません。後者は不必要に多くのリソースを消費します。
(Drupal 7.23でテスト済み。)

/**
 * Disable Vertical tabs on a form with simply changing the value of $form['additional_settings']['#type']
 * @see https://drupal.org/node/1048644
 */
function form_disable_vertical_tabs(&$form){
  // originally $form['additional_settings']['#type'] equals to 'vertical_tabs'
  if(isset($form['additional_settings']['#type']) && ($form['additional_settings']['#type'] === 'vertical_tabs')){
    $form['additional_settings']['#type'] = 'fieldset';
  }
}

/**
 * Implements hook_form_alter().
 */
function MYMODULEORTHEMENAME_form_alter(&$form, &$form_state, $form_id) {

  if($form_id == 'my_form_id'){
    // disable vertical tabs for this form
    form_disable_vertical_tabs($form);
  }
}

もちろん、これですべてです。独自のモジュールまたはテーマの名前(ファイル内の後者)フォームのID に置き換えMYMODULEORTHEMENAMEてください。template.phpmy_form_id


管理者の役割を持たないユーザーに対してのみ、垂直フィールドを無効にすることもできます。

/**
 * Implements hook_form_alter().
 */
function MYMODULEORTHEMENAME_form_alter(&$form, &$form_state, $form_id) {

  global $user;
  $is_administrator = in_array('administrator', array_values($user->roles));

  if($form_id == 'my_form_id'){
    // if $user does NOT have the administrator role.
    if (!$is_administrator) {
      // disable vertical tabs for this form
      form_disable_vertical_tabs($form);
    }
  }
}

誰かが興味を持っている場合は、パッチ(上記と同じ)をDripmanのサンドボックスモジュールに添付し$form['additional_settings']['#type']ました'fieldset'


優れたソリューション、@ Sk8erPeter。'#access' = FALSEを設定せずに追加の設定を非表示にする可能性があるのではないかと思います。これにより、URLエイリアスや公開ステータスなどのデフォルト設定で設定される値が失われます。
Jav

0

レンダリング可能な要素は現在サポートされていません。プロジェクトページでは、他の提供されたモジュールと競合するため、本番サイトではこれに依存しないことを認めています。

このスレッドでは、垂直タブを完全に無効にする方法の問題に取り組んでいます

Dripmanは、垂直タブを完全に無効にするシンプルなサンドボックスモジュールを作成しました。

Dripmanのモジュールは、コーディングに対する希望のレベルに応じて、フィールド/ロールに基づいて選択できるように簡単にカスタマイズできます。

@nicozによる簡潔な回答との重複についての謝罪


0

垂直タブの可視性モジュールを使用できます。

このモジュールは、コンテンツタイプの追加/編集フォームの垂直タブの可視性を管理するのに役立ちます。

コンテンツタイプの垂直タブの表示を管理するには、フォームを追加/編集します。/admin/config/user-interface/vertical-tabs-visibility ページにアクセスしてコンテンツタイプを選択するだけです。ノードの追加/編集フォームの垂直タブは、チェックされたコンテンツタイプに対して無効になります。

現在モジュールはサンドボックスにあります


0

私の使用例では、ノード編集フォームの[ 公開オプション]セクションに適用されている垂直タブを無効にしようとしました(これは、特定のユーザーセットがアクセスできる唯一のフィールドセットだったためです)。

// Place somewhere in MYMODULE_form_alter()...
$form['additional_settings']['#type'] = 'fieldset';
$form['additional_settings']['#collapsible'] = FALSE;
$form['options']['#collapsible'] = FALSE;

明確にするためにadditional_settings #collapsible、FALSE に設定する必要があるだけでなく、内のすべての要素にも#collapsible set toFALSE , in my case that was theoptions`要素が必要です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.