Tengo un complemento de ctools aka. tipo de contenido aka. panel de panel. ¿Cómo se renderiza mediante programación?
Tengo un complemento de ctools aka. tipo de contenido aka. panel de panel. ¿Cómo se renderiza mediante programación?
Respuestas:
ctools_content_render() Es la solución.
ctools_include('content');antes ctools_content_render(), porque en otro caso obtendrá un error fatal.
Hay un excelente y simple ejemplo de cómo hacer esto en el ctools_ajax_samplemódulo (en la suite CTools).
Como se ha señalado, la clave es usar la función ctools_content_render().
El ejemplo muestra cómo llenar los argumentos de la función, aunque obviamente debe personalizarla según sus necesidades.
Este hilo en Drupal Groups da más información sobre cómo cargar el contexto correcto.
Archivo 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;
}
Si carga el archivo requerido, todo lo que realmente necesita hacer es llamar a la función de representación ( hook_content_type_render) que devolverá un objeto de clase estándar, al igual que lo hook_block_viewhace.
Todo lo que necesita a partir de ahí es una función de tema, a menos que solo desee renderizar la salida sin formato directamente.
En código, podría verse más o menos así:
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;
}
Pude extraer una página panelizada en panopolia usando el siguiente 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(), puede interrumpir el proceso de carga de complementos de ctools. CTools usa el require_oncemétodo, por lo que si el archivo fue incluido previamente por un script de terceros, no será posible incluirlo por ctools (y parse $pluginarray). Como resultado, su panel no funcionará en otros lugares.