如何以编程方式加载面板变量?

时间:2014-02-17 13:49:56

标签: drupal-7 modal-dialog panel variants drupal-ctools

我在ct模态窗口中加载一个面板(node_view)。到目前为止,这是完美的。但现在我需要加载面板的特定变体。

我正在玩处理程序的东西......但是还没有得到。

我该怎么做?

这是我用于加载面板程序的代码:

function get_panel_view(&$node) {
    // Load my task plugin
    $task = page_manager_get_task('node_view');

    // Load the node into a context.
    ctools_include('context');
    ctools_include('context-task-handler');

    $contexts = ctools_context_handler_get_task_contexts($task, '', array($node));

    $output = ctools_context_handler_render($task, '', $contexts, array($node->nid));
    if ($output !== FALSE) {
       return $output;
       //return drupal_render($output['content']);
    }
    // Otherwise, fall back.
    return drupal_render(node_view(node_load($node->nid)));
}

1 个答案:

答案 0 :(得分:2)

函数ctools_context_handler_render_handler()可以解决问题,例如:

  1. 首先,您需要获取给定面板的所有处理程序对象,例如

      $handlers = page_manager_load_sorted_handlers($task, '', TRUE);
    
  2. 指定要显示的处理程序(变体),例如

    $handler = $handlers['node_view_panel_context_3'];
    
  3. 现在我们得到了所有需要的参数来解雇函数:

    $output = ctools_context_handler_render_handler($task,'',$handler, $contexts, array($node->nid));
    
  4. 现在,$output包含我面板的变体(3)。