如何正确设置面板主题?


8

我正在使用Page ManagerPanels,为自定义节点面板提供按类型的选择规则(例如,文章的一个面板变体,博客内容类型的一个面板变体)。到目前为止,该工具运行平稳,样式也很整洁。但是,如何获得更多的元素渲染能力?

呈现特定元素的方式有多种:添加字段,使用令牌,使用自定义视图仅呈现特定字段,使用具有视图模式的呈现节点实体。使用带有占位符等的自定义面板内容

最好的方法是什么?能够添加可以在* .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';
  }
}

我不确定这将被缓存得多么好,它将消耗多少资源。任何建议将不胜感激。

Answers:


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 2014年

确保已启用面板,并且您正在编辑正确的主题文件夹。我不知道今天还有什么。
niksmac 2014年

使用devel模块,可以在preprocess_panels_pane函数中kpr $ vars吗?我无法获得任何输出。
AlxVallejo 2014年

-2

将自定义内容添加到面板并以其主题为主题的最佳和最简单的方法是,创建自定义内容窗格,使用filter模式作为php过滤器添加代码,并将自定义php / html内容封装到自定义div标签中。

现在以这个自定义内容窗格为主题,您要做的就是将这个div标签的自定义CSS规则添加到local.css中。

如果您有任何特定要求,请在此处说明。


3
我不是数据库中的代码真正狂热者,更糟糕的是:不属于它的字段中的php代码。该解决方案不是真正的面向未来的方法,也不是适当的可扩展性和可修改性(可能是在导出面板时,但是调整所有东西将是一团糟。)
Andre Baumeier
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.