6

Drupal7template.phpファイルに次のコードがあります。

 function mytheme_preprocess_views_view__videos__videos(&$vars) {
        drupal_add_css(drupal_get_path('theme', 'mytheme') . "/css/qwembed-jquery-1.0.css");
        drupal_add_js(drupal_get_path('theme', 'mytheme').'/js/jquery.swfobject.1-1-1.min.js', array('type' => 'file', 'scope' => 'footer'));
        drupal_add_js(drupal_get_path('theme', 'mytheme').'/js/qwembed-jquery-1.0.js', array('type' => 'file', 'scope' => 'footer'));
    }

このビューが表示されている場合にのみ、これらのcssおよびjsファイルをロードする必要があります。

ビューの表示名は次Videos のとおりです。ビューのマシン名は次のとおりです。videos

オーバーライドファイルは次のとおりです。

views-view--videos--videos.tpl.php

views-view-unformatted--videos--videos.tpl.php

views-view-fields--videos--videos.tpl.php

これが機能しない理由はありますか?

4

1 に答える 1

22

テンプレートのオーバーライドに使用されるのと同じ命名パターンに基づいて前処理関数を実装しようとすると、問題が発生する可能性があります。ただし、前処理関数は、デフォルトでは「ベース」テンプレートの名前に基づいてのみ実装でき、テンプレートの提案に基づく「特定の」バージョンには同じメカニズムがないという点で少し異なります。詳細については、より一般的な質問に対する私の回答を参照してください。

したがって、「ベース」前処理関数の実装にフォールバックし、その関数内で目的のビュー (およびオプションで表示) に対して呼び出されるかどうかを確認する必要があります。

function [yourThemeName]_preprocess_views_view(&$vars) {
  $view = $vars['view'];
  if ('videos' == $view->name) {
    // Add desired manipulations for all 'videos' views
    if ('videos' == $view->current_display) {
      // Add desired manipulations for the 'videos' display only
    }
  }
}

適切な名前の関数をチェックして特定のバージョンを呼び出そうとする一般的な前処理関数を実装することで、期待した動作を追加することもできます - 例については、この記事の最後を参照してください-しかしこれはかなりの処理オーバーヘッドを導入し、多くのビューに対して特定の前処理関数が必要な場合は、意味があります。

直接実装できる、ビュー タイプごとの「ベース」前処理関数が他にもtemplate_preprocess_views_view_*あります。使用可能なオプションについては、「views/theme/theme.inc」のリストを参照してください。

原則として、template_preprocess_*テンプレートに関数があれば、対応するyourThemeOrModuleName_preprocess_*関数も実装できます。テンプレート名の提案に基づいてテンプレートを操作する必要がある場合は、「ベース」の前処理関数名を見つけて実装し、その関数の特定のケースを確認する必要があります (上記の例のような特定のビューの場合など)。

于 2012-05-04T10:26:25.493 に答える