Как загрузить вариант панели программно?

Я загружаю панель (node_view) в модальное окно ct. Это прекрасно работает до сих пор. Но теперь мне нужно загрузить конкретный вариант панели.

Я играл с хэндлером... но пока не получил.

Как я могу это сделать?

Вот мой код для программной загрузки панели:

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 ответ

Решение

Функция 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) моей панели.

Другие вопросы по тегам