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


8

ページマネージャーパネルを使用して、タイプごとの選択ルールをカスタムノードパネルに提供しています(たとえば、記事の場合は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';
  }
}

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

回答:


11

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

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;
}
?>

これらのフックはどれも私のパネルページでは機能しませんでした
AlxVallejo '29

Panelが有効になっていて、正しいテーマフォルダを編集していることを確認してください。他に何をしているのか分からない。
niksmac

develモジュールを使用して、preprocess_panels_pane関数で$ varsをkprできますか?出力がありません。
AlxVallejo 2014年

-2

カスタムコンテンツをパネルに追加してテーマに合わせて最適で最も簡単な方法は、カスタムコンテンツペインを作成し、フィルターモードをphpフィルターとして使用してコードを追加し、カスタムphp / htmlコンテンツをカスタムdivタグにカプセル化することです。

このカスタムコンテンツペインのテーマを設定するには、このdivタグのカスタムcssルールをlocal.cssに追加するだけです

特定の要件がある場合は、ここに明記してください。


3
私はデータベースのコードの真のファンではなく、さらに悪いことに、それが属していないフィールドのphpコードです。その解決策は実際には将来の証明でも、適切にキャッシュ可能で修正可能でもありません(パネルのエクスポート中かもしれませんが、すべてのものを調整するのはひどい混乱です)。
Andre Baumeier 2013年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.