कैसे एक ctools सामग्री प्रकार प्रोग्रामिक रूप से प्रस्तुत करना है?


12

मैं एक ctools प्लगइन उर्फ ​​है। सामग्री-प्रकार उर्फ। पैनल फलक। कोई इसे प्रोग्रामेटिक रूप से कैसे प्रस्तुत करता है?


+1, बहुत दिलचस्प सवाल। मैं सोच रहा हूँ कि, क्या ctools प्लगइन को पेज मैनेजर पेज के बाहर प्रस्तुत किया जा सकता है? चूंकि यह एक संदर्भ से शून्य होगा, क्या ई सामग्री प्रकार प्रदान करना अभी भी समझ में आता है?
१२:०२ पर सुस्ती

संदर्भों का उपयोग करना अनिवार्य नहीं है। इसके अलावा, एक संदर्भ को मैन्युअल रूप से मजबूर करना हमेशा एक विकल्प होता है। यहाँ की तरह - gist.github.com/3076130
roGi

जवाबों:


4

ctools_content_render() समाधान है।


2
क्या आप इस बात का उदाहरण दे सकते हैं कि यह कैसे काम करेगा? मैं डॉक्स पढ़ रहा हूं और चीजों को आजमा रहा हूं लेकिन कहीं भी नहीं मिल रहा है
पॉल शेल्ड्रेके

जहाँ आप ctools_content_render () कहते हैं, उसके आधार पर, आपको ctools कोड को दायरे में लाने की आवश्यकता हो सकती है, अन्यथा आपको घातक त्रुटियां मिलेंगी। यह "मॉड्यूल_लोड_किसील" ("inc", "ctools", "शामिल / सामग्री") के साथ प्राप्त किया जा सकता है;
एलेक्सबाक

ctools_include('content');पहले शामिल करना न भूलें ctools_content_render(), क्योंकि अन्य मामले में आपको घातक त्रुटि मिलेगी।
एंड्रे रुडेंको

3

ctools_ajax_sampleमॉड्यूल (CTools सूट में) में ऐसा करने के लिए एक महान और सरल उदाहरण है ।

जैसा कि यह बताया गया है, कुंजी फ़ंक्शन का उपयोग करना है ctools_content_render()

उदाहरण दिखाता है कि फ़ंक्शन के तर्कों को कैसे आबाद किया जाए, हालांकि आपको स्पष्ट रूप से अपनी आवश्यकताओं के अनुसार इसे अनुकूलित करना होगा।

Drupal Group में यह धागा सही संदर्भ को लोड करने के बारे में अधिक जानकारी देता है।

फ़ाइल 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

यदि आप आवश्यक फ़ाइल लोड करते हैं, तो आपको वास्तव में करने की ज़रूरत है, रेंडर फ़ंक्शन ( 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;
}

1
आपके जवाब के लिए धन्यवाद। रेंडर फंक को सीधे कॉल करना, ज़ाहिर है, स्पष्ट विकल्प है। लेकिन यह समाधान हैक की तरह अधिक महसूस होता है। मैं "ctools_render_ctype ('ctype_name')" की पंक्तियों के साथ कुछ ढूंढ रहा हूं: ":)
roGi

@roGi यह फ़ंक्शन मौजूद नहीं है, जो मैंने ऊपर दिखाया है वह यह बताता है कि यह कैसा दिखेगा, लेकिन यह संभव नहीं होगा कि आप जितना संभव हो उतना सरल बनाने के लिए सुझाव दें, क्योंकि ctools सामग्री प्रकार नहीं हैं सरल।
googletorp

0

मैं निम्नलिखित कोड का उपयोग करके एक पैनल पृष्ठ को एकाधिकार में खींचने में सक्षम था:

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 के रूप में अपने फलक अन्य स्थानों में काम नहीं करेगा।
एंड्रे रुडेंको
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.