web-dev-qa-db-ja.com

パネルに適切なテーマを設定する方法は?

私は ページマネージャーパネル を使用して、タイプごとの選択ルールをカスタムノードパネルに提供しています(たとえば、記事用に1つのパネルバリアント、ブログコンテンツタイプ用に1つのパネルバリアント)。これはこれまでスムーズに機能し、スタイリングもきれいです。しかし、どうすれば要素のレンダリングを強化できますか?

特定の要素をレンダリングする方法はいくつかあります。フィールドを追加する、トークンを使用する、カスタムビューを使用して特定のフィールドのみをレンダリングする、レンダリングされたノードエンティティをビューモードで使用する。プレースホルダーなどでカスタムパネルコンテンツを使用する.

ここでの最善のアプローチは何ですか? * .tpl.phpでスタイルを設定できるカスタム(何か)ペイン要素を追加できると便利です。

私の現在のアプローチは、表示スイートを使用して、さまざまなパーツ/パネル領域のビューモードを作成し、各ビューモードにカスタムnode.tpl.phpを追加するためのテーマフックの提案を使用することです。ビューを呼び出す必要はないでしょう。レンダリング、追加のクエリ...)、すでにキャッシュされたエンティティを使用できます。

function mytheme_preprocess_node(&$vars) {
  if ($vars['node']->type == 'my_content_type' && $vars['view_mode'] == 'panel_region_left') {
    $vars['theme_hook_suggestions'][] = 'node__my_content_type__panel_region_left';
  }

  if ($vars['node']->type == 'my_content_type' && $vars['view_mode'] == 'panel_region_right') {
    $vars['theme_hook_suggestions'][] = 'node__my_content_type__panel_region_right';
  }
}

これがどれだけ適切にキャッシュされ、どれだけのリソースが消費されるかはわかりません。アドバイスはありがたいです。

8
Andre Baumeier

公式ドキュメントが言うように、あなたは何かをすることができます

panel-pane_node-title.tpl.php

panel-pane_panel_node_title.tpl.php

panel-pane-node-title.tpl.php

panel-pane-node_title.tpl.php

いくつかの検索の後、提案がパネルによって検出されていないことがわかり、最終的にこの前処理機能に行き着きました。

function MYTHEME_preprocess_panels_pane(&$vars) {
// get the subtype
$subtype = $vars['pane']->subtype;

// Add the subtype to the panel theme suggestions list
$vars['theme_hook_suggestions'][] = 'panels_pane__'.$subtype;

return $vars;
}

フォーラムで長時間検索した後、私もこれを見つけました、

<?php
function THEMENAME_preprocess_page(&$vars) {
    global $theme_path;
    if($panel_page = page_manager_get_current_page()){

        $target_menu = 'menu-sixth-form-college';
        $current_path = menu_get_item();

        $target_menu_links = menu_load_links($target_menu);
        foreach($target_menu_links as $links) {
            $link_paths[] = $links['link_path'];
        }
        $preferred_link_paths = $link_paths;
        // if the current link is inside menu_load_link
        if(in_array($current_path['href'], $preferred_link_paths)) {
            $vars['theme_hook_suggestions'][] = 'page__sixthform';
        }
        if($panel_page['name'] == 'page-sixth_form_college') {
            $vars['theme_hook_suggestions'][] = 'page__sixthform';
        }
    }
?>

テーマとキャッシュ。

キャッシングに関しては、Drupalは通常のページキャッシュとしてテンプレートキャッシングを処理します。動作しないと思われる場合は、次のようにすることができます。

<?php
function my_module_function() {
  $my_data = &drupal_static(__FUNCTION__);
  if (!isset($my_data)) {
    if ($cache = cache_get('my_module_data')) {
      $my_data = $cache->data;
    }
    else {
      // Do your expensive calculations here, and populate $my_data
      // with the correct stuff..
      cache_set('my_module_data', $my_data, 'cache');
    }
  }
  return $my_data;
}
?>
11
niksmac