প্রোগ্রামিয়ালি একটি টোটুল সামগ্রী সামগ্রী কীভাবে রেন্ডার করবেন?


12

আমার কাছে টোটুল প্লাগইন ওরফে আছে। কন্টেন্ট-টাইপ ওরফে। প্যানেল ফলক। একজন প্রোগ্রামারিকভাবে এটি কীভাবে রেন্ডার করে?


+1, খুব আকর্ষণীয় প্রশ্ন। যদিও আমি ভাবছি, কোনও পৃষ্ঠা ম্যানেজার পৃষ্ঠার বাইরে কোনও টটল প্লাগইন রেন্ডার করা যায়? যেহেতু এটি একটি প্রসঙ্গ অকার্যকর হবে, তাই কি এবং সামগ্রীর প্রকারের রেন্ডারিং এখনও বোঝা যায়?
লেথারিয়ন

প্রসঙ্গটি ব্যবহার বাধ্যতামূলক নয়। এছাড়াও, একটি প্রসঙ্গ নিজে নিজে জোর করা সর্বদা একটি বিকল্প। এখানে যেমন - gist.github.com/3076130
roGi

উত্তর:


4

ctools_content_render() সমাধান হয়।


2
এটি কীভাবে কাজ করবে তার একটি উদাহরণ সরবরাহ করতে পারেন? আমি দস্তাবেজগুলি পড়ছি এবং জিনিসগুলি চেষ্টা করছি কিন্তু কোথাও পাচ্ছি না
পল শেলড্রাক

আপনি যেখানে কোল্টস_কন্টেন্ট_রেন্ডার () কল করেছেন তার উপর নির্ভর করে আপনার সিটিউল কোডকেও সুযোগের মধ্যে আনতে হবে, অন্যথায় আপনি মারাত্মক ত্রুটি পাবেন। এটি "মডিউল_লোড_ইনক্লুড (" ইনক "," সিটিউলস "," অন্তর্ভুক্ত / সামগ্রী ") দিয়ে অর্জন করা যেতে পারে;"
আলেক্সকবি

ctools_include('content');আগে অন্তর্ভুক্ত করতে ভুলবেন না ctools_content_render()কারণ অন্য ক্ষেত্রে আপনি মারাত্মক ত্রুটি পাবেন।
আন্দ্রে রুদেনকো

3

ctools_ajax_sampleমডিউলে এটি কীভাবে করা যায় তার একটি দুর্দান্ত এবং সাধারণ উদাহরণ রয়েছে (সিটিউলস স্যুটে)।

যেমন এটি উল্লেখ করা হয়েছে, কীটি হ'ল ফাংশনটি ব্যবহার করা ctools_content_render()

উদাহরণটি দেখায় যে কীভাবে ফাংশনটির আর্গুমেন্টগুলি স্থাপন করা যায়, যদিও আপনাকে অবশ্যই এটি আপনার প্রয়োজন অনুসারে কাস্টমাইজ করতে হবে।

ড্রুপাল গ্রুপগুলিতে এই থ্রেডটি সঠিক প্রসঙ্গটি কীভাবে লোড করা যায় সে সম্পর্কে আরও অন্তর্দৃষ্টি দেয়।

ফাইল 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 এই ফাংশনটি বিদ্যমান নেই, যা আমি উপরে দেখিয়েছি তা দেখতে কেমন হবে তার মূল বক্তব্য, তবে আপনার পরামর্শ অনুসারে কিছু সহজ করা সম্ভবত সম্ভব হবে না, যেহেতু কোটল সামগ্রীর ধরণের বিষয়গুলি এটি নয় সহজ।
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()সিটিউল প্লাগইন লোডিং প্রক্রিয়াটি ভেঙে যেতে পারে। সিটিউলগুলি require_onceপদ্ধতি ব্যবহার করে , সুতরাং যদি ফাইলটি আগে তৃতীয় পক্ষের স্ক্রিপ্ট দ্বারা অন্তর্ভুক্ত করা হত তবে এটি এটি সিটিওল (এবং পার্স $pluginঅ্যারে) দ্বারা অন্তর্ভুক্ত করা সম্ভব হবে না । সুতরাং রিসল্ট হিসাবে আপনার ফলকটি অন্য জায়গায় কাজ করবে না।
আন্দ্রে রুডেনকো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.