У мене є плагін ctools ака. контент-тип ака. панель панелей. Як це рендерує програмно?
У мене є плагін ctools ака. контент-тип ака. панель панелей. Як це рендерує програмно?
Відповіді:
ctools_content_render()
є рішенням.
ctools_include('content');
раніше ctools_content_render()
, адже в іншому випадку ви отримаєте фатальну помилку.
Є чудовий і простий приклад того, як це зробити в ctools_ajax_sample
модулі (в наборі CTools).
Як було зазначено, головним є використання функції ctools_content_render()
.
На прикладі показано, як заповнити аргументи функції, хоча, очевидно, ви повинні налаштувати її відповідно до своїх потреб.
Цей потік у групах Drupal дає більше розуміння того, як завантажити правильний контекст.
Файл ctools/ctools_ajax_sample/ctools_ajax_sample.module
function ctools_ajax_simple_form() {
ctools_include('content');
ctools_include('context');
$node = node_load(1);
$context = ctools_context_create('node', $node);
$context = array('context_node_1' => $context);
return ctools_content_render('node_comment_form', 'node_comment_form', ctools_ajax_simple_form_pane(), array(), array(), $context);
}
function ctools_ajax_simple_form_pane() {
$configuration = array(
'anon_links' => 0,
'context' => 'context_node_1',
'override_title' => 0,
'override_title_text' => '',
);
return $configuration;
}
Якщо ви завантажуєте потрібний файл, все, що вам потрібно зробити, це викликати функцію візуалізації ( hook_content_type_render
), яка поверне стандартний об'єкт класу, як hook_block_view
і.
Все, що вам потрібно, - це тематична функція, якщо тільки ви не хочете безпосередньо надати необроблений вихід.
У коді це може виглядати приблизно так:
function render_ctools_content($subtype, $conf, $panel_args, $context, $function, $file, $theme = TRUE) {
require_once $file;
$pane = new stdClass();
if (function_exists($function)) {
$pane = $function($subtype, $conf, $panel_args, $context); // hook_content_type_render
}
if ($theme) {
return theme('module_ctools_content', array('pane' => $pane));
}
return $pane->content;
}
Мені вдалося витягнути панелізовану сторінку в панополії, використовуючи наступний код:
module_load_include('inc', 'page_manager', 'plugins/tasks/node_view');
$node = node_load($nid);
$render = page_manager_node_view_page($node);
echo drupal_render($render);
module_load_include()
ви можете порушити процес завантаження плагінів ctools. CTools використовує require_once
метод, тому, якщо файл був включений раніше сценарієм Thirdparty, його неможливо буде включити ctools (і $plugin
масив розбору ). Таким чином, у результаті перезавантаження ваша панель не працюватиме в інших місцях.