ฉันมีปลั๊กอิน ctools หรือที่รู้จัก ประเภทเนื้อหา aka บานหน้าต่างแผง หนึ่งจะแสดงผลโดยทางโปรแกรมอย่างไร
ฉันมีปลั๊กอิน ctools หรือที่รู้จัก ประเภทเนื้อหา aka บานหน้าต่างแผง หนึ่งจะแสดงผลโดยทางโปรแกรมอย่างไร
คำตอบ:
ctools_content_render()
เป็นทางออก
ctools_include('content');
ก่อนctools_content_render()
เพราะในกรณีอื่นคุณจะได้รับข้อผิดพลาดร้ายแรง
มีตัวอย่างที่ดีและเรียบง่ายเกี่ยวกับวิธีการทำเช่นนี้ในctools_ajax_sample
โมดูล (ในชุดเครื่องมือ CTools)
ctools_content_render()
ในขณะที่มันได้รับการชี้ออกที่สำคัญคือการใช้ฟังก์ชั่น
ตัวอย่างแสดงวิธีเติมอาร์กิวเมนต์ของฟังก์ชันแม้ว่าคุณจะต้องกำหนดค่าตามความต้องการของคุณ
หัวข้อนี้ในกลุ่ม Drupal ให้ข้อมูลเชิงลึกมากขึ้นเกี่ยวกับวิธีการโหลดบริบทที่เหมาะสม
ไฟล์ 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;
}
หากคุณโหลดไฟล์ที่ต้องการสิ่งที่คุณต้องทำจริงๆคือการเรียกฟังก์ชั่นการแสดงผล ( hook_content_type_render
) ซึ่งจะส่งคืนวัตถุคลาสมาตรฐานเช่นเดียวกับที่hook_block_view
ทำ
สิ่งที่คุณต้องการจากที่นั่นคือฟังก์ชั่นชุดรูปแบบเว้นแต่คุณเพียงต้องการแสดงผลข้อมูลดิบโดยตรง
ในรหัสมันอาจมีลักษณะเช่นนี้:
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;
}
ฉันสามารถดึงพาเนลเพจในพาเนลโดยใช้รหัสต่อไปนี้:
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()
อาจทำให้กระบวนการโหลดปลั๊กอินของ ctools เสียหายได้ CTools ใช้require_once
เมธอดดังนั้นหากไฟล์ถูกรวมไว้ก่อนหน้านี้โดยสคริปต์ของบุคคลที่สามจะไม่สามารถรวมไว้ใน ctools (และ$plugin
อาร์เรย์แยกวิเคราะห์) ได้ ดังนั้นในฐานะที่เป็น resullt บานหน้าต่างของคุณจะไม่ทำงานในที่อื่น