Tôi có một plugin ctools aka. loại nội dung aka. bảng điều khiển. Làm thế nào để làm cho nó lập trình nó?
Tôi có một plugin ctools aka. loại nội dung aka. bảng điều khiển. Làm thế nào để làm cho nó lập trình nó?
Câu trả lời:
ctools_content_render()
là giải pháp.
ctools_include('content');
trước ctools_content_render()
, bởi vì trong trường hợp khác, bạn sẽ nhận được lỗi nghiêm trọng.
Có một ví dụ tuyệt vời và đơn giản về cách thực hiện điều này trong ctools_ajax_sample
mô-đun (trong bộ CTools).
Như đã được chỉ ra, chìa khóa là sử dụng chức năng ctools_content_render()
.
Ví dụ cho thấy cách điền vào các đối số của hàm, mặc dù rõ ràng bạn phải tùy chỉnh nó theo nhu cầu của bạn.
Chủ đề này trong Nhóm Drupal cung cấp cái nhìn sâu sắc hơn về cách tải đúng ngữ cảnh.
Tập tin 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;
}
Nếu bạn tải tệp yêu cầu, tất cả những gì bạn thực sự cần làm là gọi hàm render ( hook_content_type_render
) sẽ trả về một đối tượng lớp tiêu chuẩn, giống như hook_block_view
vậy.
Tất cả những gì bạn cần từ đó là một chức năng chủ đề, trừ khi bạn chỉ muốn kết xuất trực tiếp đầu ra thô.
Trong mã nó có thể trông giống như thế này:
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;
}
Tôi đã có thể kéo một trang được điều khiển trong panopoly bằng cách sử dụng mã sau đây:
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()
bạn có thể phá vỡ quá trình tải plugin ctools. CTools sử dụng require_once
phương thức, vì vậy nếu tập tin được bao gồm trước đó bởi tập lệnh của bên thứ ba thì sẽ không thể bao gồm tập tin đó bằng ctools (và $plugin
mảng phân tích cú pháp ). Vì vậy, khi đặt lại, khung của bạn sẽ không hoạt động ở những nơi khác.