সিএলুলস কন্টেন্ট টাইপ প্লাগইন এজেএক্স কল করে?


10

আমি একটি সিটিউলস প্যানেল সামগ্রী সামগ্রী তৈরি করছি (অর্থাত্ বিষয়বস্তু যুক্ত করার সময় আপনি প্যানেলে thingোকান এমন জিনিস, কোনও ধরণের নোড নয়) এবং আমি #ajaxকিছু ডিফল্ট মান সেট করতে একটি ফর্ম আইটেমের বৈশিষ্ট্যটি ব্যবহার করার চেষ্টা করছি । নীচে কোড দেখুন।

এটি সামগ্রীর ধরণের my_module_content_type_edit_form($form, &$form_state)কলের ভিতরেই রয়েছে ।

  $form['link_type'] = array(
    '#type' => 'radios',
    '#title' => t('Link Type'),
    '#ajax' => array(
      'callback' => 'my_module_set_target'
    ),
    '#default_value' => empty($conf['link_type']) ? '_blank' : $conf['link_type'],
    '#options' => array('none'=>t('No Link'), 'internal'=>t('Internal Link'), 'external'=>t('External Link'), 'document'=>t('Document Link')),
  );

আমার কলব্যাকটি নিম্নলিখিত।

function my_module_set_target($form, $form_state) {
  watchdog("Test", "Testing callback", array(), WATCHDOG_ALERT);
  $form['link_target']['#default_value'] = '_parent';

  return $form['link_target']['#default_value'];
}

আমি যে রিটার্নের প্রস্তাব দিচ্ছি তা আসলে কাজ করবে কিনা তা নির্বিশেষে, watchdog()এমনকি কাজ করে না।

আমি জানি সিটুলস এজেএক্সের সাথে কিছু অদ্ভুত স্টাফ করে, তবে এটি এত অদ্ভুত হতে পারে না। আমি যা করতে চাই তা কীভাবে করব সে সম্পর্কে আপনার কোনও ধারণা আছে?

ধন্যবাদ!

বিকল্পভাবে: পূর্ববর্তী ফর্ম বিকল্পের মানের ভিত্তিতে আমি কীভাবে একটি ডিফল্ট মান সেট করব?

আমি কীভাবে এটি করব তা বুঝতে পেরেছি, তবে এটি কিছুটা হ্যাকি - আপনি প্রতিটি নির্ভরতার কাঁটাচামচের জন্য নতুন ফর্ম ক্ষেত্র তৈরি করেন। এরপরে আপনি hook_content_type_edit_form_submit()উপাদানগুলির সাথে একত্রিত করতে পারেন , যেকোন একটি উপাদানটির জন্য চয়ন করা মানের সাথে সামঞ্জস্য করে যা প্রাথমিকভাবে সবকিছু ফোরক করে।

আমি প্রশ্নটি উন্মুক্ত রেখে চলেছি কারণ আমি (এবং, প্রকৃতপক্ষে, প্রতিটি প্রোগ্রামার যার সাথে আমি কাজ করছি) এই প্যানেল সামগ্রী প্রকারের সম্পাদনা ফর্মগুলির মধ্যে সত্যই AJAX ব্যবহার করার ভাল উপায় চাইছি।

আপডেট: মনে হচ্ছে আপনি # সংযুক্ত সঙ্গে স্টাফ করতে পারবেন না, হয়ও।

$form['link'][$i] = array(
  '#type' => 'fieldset',
  '#title' => t('Link #@num', array('@num' => $i)),
  '#collapsible' => TRUE,
  '#collapsed' => TRUE,
  '#attached' => array(
    'js' => array(
      'alert("Yay.");', 'inline'
    ),
  )
);

"সমস্ত কিছুর জন্য প্যানেলস" ধরণের ড্রুপাল বিকাশকারী হিসাবে, আমি ধারণা করি ভবিষ্যতেও আমি এর জন্য ব্যবহার করতে পারি, তাই আমি একটি অনুগ্রহ যুক্ত করেছি, কী ঘটে তা দেখা যাক।
লেথারিয়ন

বাহ, সেই অনুগ্রহটি এসেছিল এবং কোনও মন্তব্য ছাড়াই চলে গেছে (ধন্যবাদ বিটিডাব্লু, লেথারিয়ন)। আমি কি অসম্ভব জিজ্ঞাসা করছি বা কিছু?
এন্ড্রু

লক্ষ করা উচিত যে আমি জাভাস্ক্রিপ্ট ব্যবহার করে ctools_add_js();বা drupal_add_js();শেষে সফলভাবে যুক্ত করতে সক্ষম হয়েছি hook_content_type_edit_form();। আপনি যদি কেবল সাধারণ ইউআই-সম্পর্কিত স্টাফ করছেন তবে মনে হচ্ছে এটি সেরা কল হতে পারে (কমপক্ষে কেউ এই প্রশ্নের সঠিকভাবে উত্তর না দেওয়া পর্যন্ত)।
এন্টার্রুউ

উত্তর:


8

সংক্ষিপ্ত উত্তর: আপনার #ajax ['পথ'] ব্যবহার করা উচিত।

দীর্ঘ উত্তর:

অজ্যাক্স কলব্যাক করা কোনও উপকারে আসে না কারণ টিটোলগুলি এটির রূপগুলি ভিন্নভাবে তৈরি করে। সিস্টেম / অজ্যাক্স দ্বারা করা কলব্যাক সম্পূর্ণ ফর্ম সংজ্ঞাটি খুঁজে পাচ্ছে না এজন্য এজ্যাক্স অনুরোধটি প্রক্রিয়া করার জন্য কোনও উপাদান খুঁজে পাবে না। #Ajax [পাথ] ব্যবহার করা কেবল একটি মেনু আইটেম ট্রিগার করে।

#Ajax [কলব্যাক] ব্যবহার করার সময় আপনি ফর্মটি ডাম্প করে নিজের জন্য যাচাই করতে পারেন

function ajax_form_callback() {
  list($form, $form_state) = ajax_get_form();
  drupal_process_form($form['#form_id'], $form, $form_state);

আমি ব্যবহারকারী স্বতঃসম্পূর্ণ উইজেট এবং আপনার ক্ষেত্র যা উভয়ই কাজ করে যোগ করে সরলোকনটেক্সট_কন্টেন্ট_টাইপ_এডিট_ফর্মটি সংশোধন করেছি :)

function simplecontext_content_type_edit_form($form, &$form_state) {
  $conf = $form_state['conf'];

  $form['owner_name'] = array(
    '#type' => 'textfield',
    '#title' => t('Username'),
    '#default_value' => 'admin',
    '#autocomplete_path' => 'user/autocomplete',
    '#size' => '6',
    '#maxlength' => '60',
    '#description' => '$description',
  );

  $form['link_type'] = array(
    '#type' => 'radios',
    '#title' => t('Link Type'),
    '#ajax' => array(
      'path' => 'my_module_set_target'
    ),
    '#default_value' => empty($conf['link_type']) ? '_blank' : $conf['link_type'],
    '#options' => array('none' => t('No Link'), 'internal' => t('Internal Link'), 'external' => t('External Link'), 'document' => t('Document Link')),
  );
...

আপনি এখন # জ্যাক্স পাথ ব্যবহার করার সাথে সাথে আমার পছন্দ মতো একটি মেনু আইটেম যুক্ত করতে হবে

<?php

function my_module_menu() {
  $items = array(
    'my_module_set_target' => array(
      'title' => 'AJAX Example',
      'page callback' => 'my_module_set_target',
      'access callback' => TRUE,
      'expanded' => TRUE,
    )
  );
  return $items;
}

function my_module_set_target() {
  drupal_json_output( array('data' => "ABC"));
}

# সংযুক্ত [জেএস] সম্পর্কে একটি নিটপিক: ইনলাইন জেএস কী => মান হওয়া উচিত:

'#attached' => array(
  'js' => array(
    'alert("Yay.");' => 'inline',
  ),
),

ফলস্বরূপ মানটি ফলাফলের জন্য নয় ফলাফল হিসাবে অনুসন্ধানের জন্য আমি ফায়ারব্যাগ ব্যবহার করেছি। সুতরাং আমি আশা করি এটি আপনার সমস্যার সমাধান করতে সহায়তা করে।


কি দারুন. অবশেষে এই প্রশ্নের উত্তর পেতে আমি এতটাই স্টোকড। কিছুক্ষন চেষ্টা করে দেখুন। # সংযুক্ত বিটের নোটের জন্যও ধন্যবাদ, আসলে এটি আমার প্রথম ছিল (তবে এটি পরিবর্তন হয়েছে কারণ আমি বুঝতে পেরেছিলাম যে এটি সঠিক হতে পারে না)।
এেন্ড্রু

তাহলে, কোন সাফল্য? অনুগ্রহ শেষ হওয়ার আগেই জেনে রাখা আকর্ষণীয় হবে :)
লেথারিওন

আমি আশা করি আমি আমার
অনুগ্রহটি

এটির সাথে বিলম্বের জন্য দুঃখিত, এটির কাজ করার জন্য কিছুটা সময় থাকার পরে - যখন আমি $ ফর্ম অ্যারেটি ফিরিয়ে দেওয়ার চেষ্টা করি তখন এটি আমাকে বলে যে আমার বৈধতাটির কার্যকারিতা সংজ্ঞায়িত হয়নি। এটি হ'ল, এবং যখন আমি এটি আমার মডিউলে পুনরায় ঘোষণা করার চেষ্টা করি (সামগ্রীর ধরণের প্লাগইন ফাইলের বিপরীতে), এটি আমাকে বলে যে আমি এটি পুনরায় বিবরণ করছি। আমি অনুমান করছি যে আমার যা করা দরকার তা নয় তবে আমি কীভাবে ড্রুপাল_জসন_আউটপুট গঠন করব তা বুঝতে পারছি না যাতে এটি এমন কিছু আউটপুট দেয় যা আমার ফর্মটি অর্থপূর্ণ প্রতিক্রিয়া হিসাবে ব্যাখ্যা করবে। কোন সাহায্য? একটি ভাল উদাহরণ কলব্যাক অনেক সাহায্য করবে। ধন্যবাদ!
এড্রুউ

আমি আপনার প্রশ্নের ছোট্ট অংশটি মিস করেছি যা প্রত্যাবর্তনের মান সম্পর্কে: রিটার্ন $ ফর্ম ['লিংক_আরকেট'] ['# ডিফল্ট_মূল্য']; যা আপনার এইচটিএমএল / জাভাস্ক্রিপ্ট প্রসঙ্গে একটি ড্রুপাল ফর্মটি ফেরত দেওয়ার চেষ্টা করছে । ওটা কাজ করবে না. ইউএন প্যানেলগুলিতে আপনি যা চান তা কি একই রকম দেখেছেন? (আমি নিজেই এখন জাভাস্ক্রিপ্ট অক্ষম করেছি এবং তারপরে ইউআই ভিউগুলি কেবল নন জেস ওয়ার্কফ্লো দেখতে পেয়েছি) (এই মন্তব্যটি এক
মিলিয়ন

2

আমার একইরকম সমস্যা হয়েছে, যেখানে আমি একটি মিডিয়া উপাদান টাইপকে একটি সিটিউলস সামগ্রী সামগ্রী প্লাগইনে অন্তর্ভুক্ত করতে চেয়েছিলাম, এটি চিত্র নির্বাচন করার জন্য এজাক্সও ব্যবহার করে।

এটি 'কলব্যাক' সেটিংসের পরিবর্তে এটির নিজের এজাক্স 'পাথ' সেটিংটি ব্যবহার করে তবে কোনও চিত্র নির্বাচন করার সময় ফর্মটি পুরোপুরি মিডিয়া উপাদান ছাড়াই পুনর্নির্মাণ করা হয়।

আমি এটি এটিকে আবিষ্কার করেছিলাম যে ড্রুপাল_রেবিল্ড_ফর্মটি সি টিউলস ফর্মের মোড়ক ফাংশন খুঁজে পায় নি, না প্রকৃত সেটিংস ফর্ম ফাংশনটি খুঁজে পায়। সুতরাং আমি কোডগুলি এই লাইনগুলি সিটিওলস সেটিংস ফর্মটিতে যুক্ত করে এটি ঠিক করেছি:

function custom_module_my_content_plugin_content_type_edit_form($form, &$form_state) {

$background_image = isset($conf['background_image']) ? $conf['background_image'] : array();
  $form['background_image'] = array(
    '#title' => t('Background image'),
    '#default_value' => $background_image,
    '#type' => 'media',
    '#input' => TRUE,
    '#extended' => TRUE,
    '#tree' => TRUE,
    '#media_options' => array(),
  );

  // The two function calls below are necessary if we want to use a media
  // element type, because it causes ajax requests, which in turn call
  // drupal_form_rebuild(), and without the below includes, Drupal will
  // not be able to rebuild the form.

  // Include the CTools content type plugin file, because it provides
  // the ctools_content_configure_form_defaults() function, which is needed
  // when rebuilding the form, because of an ajax action, like selecting
  // a media element.
  ctools_form_include($form_state, 'content');

  // Include this plugin file as well, so that when the form is rebuilt, it
  // can successfully retrieve the settings form.
  ctools_form_include($form_state, 'my_content_plugin', 'custom_module', 'plugins/content_types/my_content_plugin');

}

সম্ভবত আমি অন্তর্ভুক্ত ফাইলগুলি লোড করা হচ্ছে না কেন স্পষ্টভাবে কিছু মিস করছি, তবে সেগুলি সহ আমার কাছে সমস্যাটি সমাধান করে।


0

আমার পক্ষে, আমাকে। Module ফাইলে একটি ফর্ম র‌্যাপার ফাংশন লিখতে হয়েছিল এবং ফলকটি ম্যানুয়ালি অন্তর্ভুক্ত করতে হয়েছিল (যেখানে মূল ফর্মের বিষয়বস্তু সংজ্ঞায়িত করা হয়েছে):

function mymodule_form($form, &$form_state) {
  // include mymodule/panes/mypane.inc
  ctools_include('mypane', 'mymodule', 'panes');
  return mymodule_form_content($form, $form_state);
}

এখন, এজাক্স কল চলাকালীন, দ্রুপাল আমার ফর্মটি পুনরুদ্ধার করতে সক্ষম হবেন যাতে আমি স্ট্যান্ডার্ড এজেএক্স ফর্ম এপিআই ব্যবহার করতে পারি।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.