J'ai un plugin ctools aka. type de contenu aka. volet du panneau. Comment le restitue-t-on par programme?
J'ai un plugin ctools aka. type de contenu aka. volet du panneau. Comment le restitue-t-on par programme?
Réponses:
ctools_content_render()
est la solution.
ctools_include('content');
avant ctools_content_render()
, car dans d'autres cas, vous obtiendrez une erreur fatale.
Il y a un excellent et simple exemple sur la façon de le faire dans le ctools_ajax_sample
module (dans la suite CTools).
Comme cela a été souligné, la clé est d'utiliser la fonction ctools_content_render()
.
L'exemple montre comment remplir les arguments de la fonction, bien que vous deviez évidemment la personnaliser en fonction de vos besoins.
Ce fil dans les groupes Drupal donne plus d'informations sur la façon de charger le bon contexte.
Fichier 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 vous chargez le fichier requis, tout ce que vous devez vraiment faire est d'appeler la fonction de rendu ( hook_content_type_render
) qui retournera un objet de classe standard, tout comme le hook_block_view
fait.
Tout ce dont vous avez besoin à partir de là est une fonction de thème, à moins que vous ne vouliez simplement rendre la sortie brute directement.
Dans le code, cela pourrait ressembler à ceci:
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;
}
J'ai pu tirer une page panélisée dans le panopole en utilisant le code suivant:
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()
vous, vous risquez de casser le processus de chargement des plugins ctools. CTools utilise la require_once
méthode, donc si le fichier a été inclus précédemment par un script tiers, il ne sera pas possible de l'inclure par ctools (et parse $plugin
array). Donc, en tant que resullt, votre volet ne fonctionnera pas dans d'autres endroits.