web-dev-qa-db-ja.com

ボディクラスにビュー名を追加するにはどうすればよいですか?

現時点でDrupal CSSクラスを追加page-VIEWPATHをbodyタグに追加します。 CSSクラスを追加するにはどうすればよいですかpage-VIEWNAMEサードパーティのモジュールまたはJQueryなしでbodyタグに?

前もって感謝します!

4
wzh

結局のところ、これは_hook_preprocess_html_と_function views_get_page_view_を組み合わせて行うことで、特定のビューとディスプレイの真の_<body>_クラスを取得できます( APIページを参照 =)。

したがって、それを_hook_preprocess_html_コンテキスト内でラップすると、次のようになります。

_/**
 * Implements template_preprocess_html().
 *
 * Misc page preprocess functions.
 */
function mytheme_preprocess_html(&$vars) {

// Query the view and add a class
$view = views_get_page_view();
 if (
  isset($view) &&
  $view->name == 'actions' &&
  $view->current_display == "page"
) {
    $vars['classes_array'][] = 'views-actions-page';
  }
}
_

上記のように、ビュー名と表示をクエリし、キーは$view = views_get_page_view();です。これは、ビューおよびディスプレイごとのカスタムビューボディクラスに最適です。

レンダリングされたHTMLの結果は次のようになります。

_<body class="html not-front logged-in no-sidebars 
page-actions section-actions page-views flush-header views-actions-page">
_

** _views-actions-page_は、上記の関数で追加したクラスです。

これとビュー生成クラスを使用することの利点は、ページのURLが変更されても、カスタムビュークラスは変更されないのに対し、_page-actions section-actions_はURLに基​​づいて変更されることです。したがって、これらのクラスをテーマ化に使用すると、リップル効果がマイナスになるため、これらのクラスを使用すると信頼性が低下する可能性があります。

6
Danny Englander

テーマフォルダのtemplate.phpで次の関数を使用します

function THEME_preprocess_views_view(&$variables){
    $view = $variables['view'];
    if($view->name == "YOUR_VIEW_NAME" && $view->current_display == "MACHINE_NAME_OF_VIEW"){
        $variables['classes_array'][]="page-".$view->name;
    }
}

current_pathなど、その他の条件を設定することもできます。

3
M a m a D