Mam wtyczkę Ctools aka. typ zawartości aka. panel panelu. Jak renderować to programowo?
Mam wtyczkę Ctools aka. typ zawartości aka. panel panelu. Jak renderować to programowo?
Odpowiedzi:
ctools_content_render()
jest rozwiązaniem.
ctools_include('content');
wcześniej ctools_content_render()
, ponieważ w innym przypadku wystąpi błąd krytyczny.
Jest świetny i prosty przykład, jak to zrobić w ctools_ajax_sample
module (w pakiecie CTools).
Jak już wspomniano, kluczem jest użycie funkcji ctools_content_render()
.
Przykład pokazuje, jak wypełnić argumenty funkcji, chociaż oczywiście musisz ją dostosować do swoich potrzeb.
Wątek w Grupach Drupal daje więcej informacji na temat ładowania właściwego kontekstu.
Plik 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;
}
Jeśli załadujesz wymagany plik, wszystko, co naprawdę musisz zrobić, to wywołać funkcję renderowania ( hook_content_type_render
), która zwróci obiekt klasy standardowej, podobnie jak hook_block_view
robi to.
Wszystko, czego potrzebujesz, to funkcja motywu, chyba że chcesz tylko renderować nieprzetworzone dane wyjściowe bezpośrednio.
W kodzie może wyglądać mniej więcej tak:
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;
}
Udało mi się wyciągnąć panelowaną stronę w panopolu przy użyciu następującego kodu:
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()
Dołączając plik wtyczki, możesz przerwać proces ładowania wtyczek ctools. CTools używa require_once
metody, więc jeśli plik został wcześniej dołączony przez skrypt innej firmy , nie będzie można go dołączyć za pomocą narzędzi ctools (i parsować $plugin
tablicę). W związku z tym okienko nie będzie działać w innych miejscach.