[gelöst] Programmatisch laden einer Panel Variante
am 25.02.2014 - 21:32 Uhr in
Hallo,
ich habe das Modul Panels am laufen und überschreibe damit die Standard Seite node/%node. Ich möchte nun via eigenen Modul eine bestimmte Varinate diesen Panels laden.
Mit folgender Funktion kann ich zwar das Panel laden, aber eben nicht eine bestimmte Variante davon.
function get_panel_view(&$node) {
ctools_include('context');
ctools_include('context-task-handler');
$task = page_manager_get_task('node_view');
$contexts = ctools_context_handler_get_task_contexts($task, '', array($node));
$output = ctools_context_handler_render($task, '', $contexts, array($node->nid));
if ($output !== FALSE) {
return $output;
}
// Otherwise, fall back.
return drupal_render(node_view(node_load($node->nid)));
}
Ich denke, ich müsste hier eine Funktion aufrufen, der ich einen Handler übergeben kann. Aber welche Funktion kann das? Mit Selection Rules komme hier auch nicht weiter, da ich diese Variante in einem Modal-Fenster zurückgeben möchte. Somit der Pfad oder auch der Node-Typ bei den Varianten immer gleich sind. Zumindest weiß ich nicht welche Rule ich dazu erstellen müsste.
Hat vielleicht jemanden einen Tipp dazu...?
Danke vorab.
Andy
- Anmelden oder Registrieren um Kommentare zu schreiben
gelöst
am 25.02.2014 - 23:52 Uhr
Ich habe es rausgefunden , die Funktion, die eine bestimmte Panel Variante Rendern kann heißt "ctools_context_handler_render_handler".
Man muss zuvor die vorhanden Varianten (Handler) laden. Anschließend kann man das gewünschte Handler-Objekt der o.g. Funktion übergeben - und gut ist!
Hier meine Funktion, die bei mir die 3. Variante des Panels rendert:
function get_panel_view(&$node) {
ctools_include('context');
ctools_include('context-task-handler');
$task = page_manager_get_task('node_view');
$contexts = ctools_context_handler_get_task_contexts($task, '', array($node));
$handlers = page_manager_load_sorted_handlers($task, '', TRUE);
$handler = $handlers['node_view_panel_context_3'];
$output = ctools_context_handler_render_handler($task,'',$handler,$contexts,array($node->nid));
if ($output !== FALSE) {
return $output;
}
return drupal_render(node_view(node_load($node->nid)));
}
Eine dumme Frage: Warum wird
am 26.02.2014 - 00:10 Uhr
Eine dumme Frage: Warum wird bei return node_load benutzt, wenn doch der Node bereits übergeben wird?
Keine dumme Frage... Copy
am 17.06.2014 - 11:11 Uhr
Keine dumme Frage... Copy Paste Fehler ! Ist hier überflüssig!