Saya memiliki plugin ctools alias. tipe konten alias. panel panel. Bagaimana cara membuatnya secara terprogram?
Saya memiliki plugin ctools alias. tipe konten alias. panel panel. Bagaimana cara membuatnya secara terprogram?
Jawaban:
ctools_content_render()
adalah solusinya.
ctools_include('content');
sebelumnya ctools_content_render()
, karena dalam kasus lain Anda akan mendapatkan kesalahan fatal.
Ada contoh yang bagus dan sederhana tentang cara melakukan ini di ctools_ajax_sample
modul (dalam suite CTools).
Seperti yang telah ditunjukkan, kuncinya adalah menggunakan fungsi ctools_content_render()
.
Contoh menunjukkan bagaimana mengisi argumen fungsi, meskipun Anda jelas harus menyesuaikannya sesuai dengan kebutuhan Anda.
Utas ini di Grup Drupal memberi lebih banyak wawasan tentang cara memuat konteks yang benar.
Mengajukan 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;
}
Jika Anda memuat file yang diperlukan, yang benar-benar perlu Anda lakukan, adalah memanggil fungsi render ( hook_content_type_render
) yang akan mengembalikan objek kelas standar, seperti hook_block_view
halnya halnya.
Yang Anda butuhkan dari sana adalah fungsi tema, kecuali jika Anda hanya ingin me-render output mentah secara langsung.
Dalam kode itu bisa terlihat seperti ini:
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;
}
Saya dapat menarik halaman panel dalam panopoly menggunakan kode berikut:
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()
Anda dapat merusak proses pemuatan plugin ctools. CTools menggunakan require_once
metode, jadi jika file dimasukkan sebelumnya oleh skrip pihak ketiga tidak akan mungkin untuk memasukkannya dengan ctools (dan parse $plugin
array). Jadi sebagai resullt panel Anda tidak akan bekerja di tempat lain.