私は ページマネージャー と パネル を使用して、タイプごとの選択ルールをカスタムノードパネルに提供しています(たとえば、記事用に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';
}
}
これがどれだけ適切にキャッシュされ、どれだけのリソースが消費されるかはわかりません。アドバイスはありがたいです。
公式ドキュメントが言うように、あなたは何かをすることができます
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;
}
?>