Làm thế nào để hiển thị một loại nội dung ctools theo chương trình?


12

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ó?


+1, câu hỏi rất thú vị. Mặc dù tôi đang tự hỏi, một plugin ctools có thể được hiển thị bên ngoài trang quản lý trang không? Vì đó sẽ là khoảng trống của một bối cảnh, việc kết xuất kiểu nội dung điện tử có còn ý nghĩa không?
Letharion

Sử dụng bối cảnh là không bắt buộc. Ngoài ra, buộc một bối cảnh bằng tay luôn luôn là một lựa chọn. Giống như ở đây - gist.github.com/3076130
roGi

Câu trả lời:


4

ctools_content_render() là giải pháp.


2
Bạn có thể cung cấp một ví dụ về cách thức này sẽ làm việc? Tôi đang đọc tài liệu và thử mọi thứ nhưng không đi đến đâu
Paul Sheldrake

Tùy thuộc vào nơi bạn gọi ctools_content_Vnder (), bạn cũng có thể cần đưa mã ctools vào phạm vi, nếu không bạn sẽ gặp phải các lỗi nghiêm trọng. Điều này có thể đạt được với "module_load_include (" inc "," ctools "," gồm / nội dung ");"
alexkb

Đừng quên bao gồm 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.
Andrey Rudenko

3

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_samplemô-đ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;
}

2

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_viewvậ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;
}

1
Cảm ơn vì đã trả lời. Gọi func render trực tiếp, tất nhiên, là sự lựa chọn rõ ràng. Nhưng giải pháp này cảm thấy giống như một hack. Tôi đang tìm kiếm thứ gì đó dọc theo dòng "ctools_Vnder_ctype ('ctype_name')" :)
roGi

@roGi Hàm đó không tồn tại, những gì tôi đã trình bày ở trên là ý chính của nó trông như thế nào, nhưng có lẽ sẽ không khả thi để làm một cái gì đó đơn giản như bạn đề xuất, vì các loại nội dung ctools không phải là đơn giản.
googletorp

0

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);

Bằng cách bao gồm tập tin plugin với module_load_include()bạn có thể phá vỡ quá trình tải plugin ctools. CTools sử dụng require_oncephươ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à $pluginmả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.
Andrey Rudenko
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.