0

我确实在 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)));
}
4

1 回答 1

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));
    

现在,$output包含我的面板的变体 (3)。

于 2014-02-26T07:57:46.967 回答