Ich habe ein ctools Plugin aka. Inhaltstyp aka. Panel-Bereich. Wie rendert man es programmatisch?
Ich habe ein ctools Plugin aka. Inhaltstyp aka. Panel-Bereich. Wie rendert man es programmatisch?
Antworten:
ctools_content_render()
ist die Lösung.
ctools_include('content');
vorher einzuschließen ctools_content_render()
, da sonst ein schwerwiegender Fehler auftritt.
Es gibt ein großartiges und einfaches Beispiel dafür im ctools_ajax_sample
Modul (in der CTools-Suite).
Wie bereits erwähnt, müssen Sie die Funktion verwenden ctools_content_render()
.
Das Beispiel zeigt, wie Sie die Argumente der Funktion füllen, obwohl Sie sie natürlich an Ihre Bedürfnisse anpassen müssen.
Dieser Thread in Drupal-Gruppen bietet weitere Informationen zum Laden des richtigen Kontexts.
Datei 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;
}
Wenn Sie die erforderliche Datei laden, müssen Sie nur die Renderfunktion ( hook_content_type_render
) aufrufen, die ein Standardklassenobjekt zurückgibt, ähnlich wie dies der hook_block_view
Fall ist.
Alles, was Sie von dort benötigen, ist eine Theme-Funktion, es sei denn, Sie möchten die Raw-Ausgabe direkt rendern.
Im Code könnte es ungefähr so aussehen:
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;
}
Mit dem folgenden Code konnte ich eine Panel-Seite in Panopoly abrufen:
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()
einbeziehen, können Sie den Ladevorgang der ctools-Plugins unterbrechen. CTools verwendet die require_once
Methode. Wenn die Datei zuvor von einem Drittanbieter-Skript eingeschlossen wurde, kann sie nicht von ctools (und dem Analysearray $plugin
) eingeschlossen werden. Als Ergebnis wird Ihr Fenster an anderen Stellen nicht funktionieren.