Eu tenho um plugin ctools aka. também conhecido como tipo de conteúdo. painel de painel. Como alguém a processa programaticamente?
Eu tenho um plugin ctools aka. também conhecido como tipo de conteúdo. painel de painel. Como alguém a processa programaticamente?
Respostas:
ctools_content_render()
é a solução.
ctools_include('content');
antes ctools_content_render()
, porque em outro caso você receberá um erro fatal.
Há um exemplo excelente e simples de como fazer isso no ctools_ajax_sample
módulo (no pacote CTools).
Como foi apontado, a chave é usar a função ctools_content_render()
.
O exemplo mostra como preencher os argumentos da função, embora você obviamente precise personalizá-lo de acordo com suas necessidades.
Esse tópico no Drupal Groups fornece mais informações sobre como carregar o contexto correto.
Arquivo 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;
}
Se você carregar o arquivo necessário, tudo o que você realmente precisa fazer é chamar a função render ( hook_content_type_render
), que retornará um objeto de classe padrão, assim como hook_block_view
faz.
Tudo o que você precisa é uma função de tema, a menos que você queira renderizar diretamente a saída bruta.
No código, poderia ser algo como isto:
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;
}
Consegui extrair uma página em painel em panopólio usando o seguinte código:
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()
você pode interromper o processo de carregamento de plug-ins do ctools. O CTools usa o require_once
método, portanto, se o arquivo foi incluído anteriormente pelo script de terceiros, não será possível incluí-lo pelo ctools (e pela $plugin
matriz de análise ). Portanto, como novo teste, seu painel não funcionará em outros lugares.