আমার কাছে একটি মডিউল রয়েছে যা লিঙ্কটি ক্লিক করা হলে এজ্যাক্সের মাধ্যমে নোড আপডেট করে।
লিঙ্কটি একটি টগল, এটিতে প্রথম ক্লিকের মান 1 দিয়ে নোডটি আপডেট করা উচিত, তারপরে পরবর্তী ক্লিকের মান 0 দিয়ে ইত্যাদি something
নীচের কোডটি পৃষ্ঠা লোডের পরে প্রথম ক্লিকে কাজ করে, তবে পরবর্তী ক্লিকগুলিতে নয়। আমি বিশ্বাস করি যে প্রতিটি ক্লিকের পরে দ্রুপাল.আত্তাচবিহিয়রসকে কল / ট্রিগার করতে হবে, তবে কীভাবে এটি করা যায় তা আমি বুঝতে পারি না।
মডিউল
function mymodule_menu() { $items['mypath/%/%/ajax'] = array( 'title' => 'My title', 'page callback' => 'mymodule_ajax_callback', 'page arguments' => array(1,2), 'access arguments' => array('access content'), 'type' => MENU_CALLBACK, ); ... } function mymodule_ajax_callback($id, $status) { //Validation[...] //Node Update using $id as the nid and $status as the field value[...] // Define a new array to hold our AJAX commands. $ajax_commands = array(); // Create a new AJAX command that replaces the #div. $replacedivid = '#status'.$id; $replacestring = '<div id="status'.$id.'"><a data-url="'.base_path().'mypath/'.$id.'/'.$new_status.'/ajax" title="This item is marked as '.$status_text.'" id="statuslink'.$id.'" class="midui">'.$status_text.'</a></div>'; $ajax_commands[] = ajax_command_replace($replacedivid, $replacestring); return drupal_json_output($ajax_commands); }
জাভাস্ক্রিপ্ট
(function ($) { Drupal.behaviors.mymodule = { attach: function(context, settings) { var $uilink = $('.midui'); //find all links for (var i=0;i<$uilink.length;i++) { //Loop var $link = $('#' + $uilink[i].id); if (!$link.hasClass("middone")) { new Drupal.ajax('#' + $uilink[i].id, $link, { url: $link.attr('data-url'), effect: 'fade', settings: {}, progress: { type: 'throbber' }, event: 'click tap' }); $link.addClass("middone"); //add class when we're done } } } } })(jQuery);
আমি এ পর্যন্ত যা চেষ্টা করেছি:
(ক) একটি অ্যাড ajax_command_invoke(NULL, 'mymodule');
একটি সঙ্গে মিলিত $ ajax_commands অ্যারেতে $.fn.mymodule
ফাংশন
(খ) $('body').ajaxSuccess(Drupal.attachBehaviors);
আমার জাভাস্ক্রিপ্টে যুক্ত করুন। এজ্যাক্স কমপ্লিটও চেষ্টা করেছিল। এটি নথিতেও চেষ্টা করেছি।
(গ) এখানে বিস্তারিত হিসাবে একটি কাস্টম কমান্ড তৈরি করুন http://www.jaypan.com/tutorial/calling-function- after-ajax- event-drupal-7
দ্রষ্টব্য: আমি জানি যে এটি এইচটিএমএল সন্নিবেশ / সংশোধিত হওয়ার জন্য প্রতিটি ক্লিকের পরে অ্যাজটিবিয়ারগুলি ট্রিগার করার বিষয়। আমি যদি লিঙ্কটি ক্লিক করি এবং কনসোলে Drupal.attachBehaviors () টাইপ করি তবে লিঙ্কটি আমার জাভাস্ক্রিপ্ট দ্বারা আবার প্রক্রিয়া করা হবে, যেমনটি 'মিডোন' শ্রেণীর সংযোজন দ্বারা প্রমাণিত হয় এবং আবার ক্লিক করা যায়।
দ্রষ্টব্য: আগ্রহের পাশাপাশি, আমি যদি $ajax_commands
কলব্যাক ফাংশন শেষে খালি রেখে এটিকে (খালি অ্যারে) ফিরিয়ে দিই তবে লিঙ্কটি প্রথম এবং পরবর্তী ক্লিকগুলিতে ক্লিকযোগ্য থাকবে। এটির কার্যকারিতাটি আমি সন্ধান করছি (একটি টগল)। তবে, যেহেতু প্রতিটি ক্লিকের পরে এইচটিএমএলটিতে কোনও পরিবর্তন করা হয়নি, তাই ব্যবহারকারীর পক্ষে টগল চালু বা বন্ধ আছে তা জানার কোনও উপায় নেই।
যে কোনও পয়েন্টার প্রশংসিত হবে।
================================================== =====
একটি আংশিক উত্তর:
দ্রুপাল আজাক্স.জেএস সাফল্য ফাংশন কেবল ফর্মগুলির জন্য আচরণগুলিকে পুনরায় সংযুক্ত করে (আমার মনে হয়?)
if (this.form) {
var settings = this.settings || Drupal.settings;
Drupal.attachBehaviors(this.form, settings);
}
সুতরাং আমি আমার সমস্ত এজাক্স অবজেক্টের সাফল্য ফাংশন হ্যাক করার সিদ্ধান্ত নিয়েছি।
জাভাস্ক্রিপ্ট এখন হয়ে যায়
(function ($) {
Drupal.behaviors.mymodule = {
attach: function(context, settings) {
var $uilink = $('.midui'); //find all links
for (var i=0;i<$uilink.length;i++) { //Loop
var $link = $('#' + $uilink[i].id);
if (!$link.hasClass("middone")) {
myAjax = new Drupal.ajax('#' + $uilink[i].id, $link, {
url: $link.attr('data-url'),
effect: 'fade',
settings: {},
progress: {
type: 'throbber'
},
event: 'click tap'
});
myAjax.options.success = function (response, status) {
//Trigger Attach Behaviors
setTimeout(function(){Drupal.attachBehaviors($(myAjax.selector))}, 0);
// Sanity check for browser support (object expected).
// When using iFrame uploads, responses must be returned as a string.
if (typeof response == 'string') {
response = $.parseJSON(response);
}
return myAjax.success(response, status);
}
$link.addClass("middone"); //add class when we're done
}
}
}
}
})(jQuery);
সাফল্য ফাংশন হ'ল অ্যাজাক্স.জেএস থেকে ডিফল্টর অনুলিপি আচরণের জন্য একটি যুক্ত লাইন সহ একটি অনুলিপি পেস্ট। কিছু কারণে, Drupal.attachBehaviors
একটি টাইমার মধ্যে থাকতে হবে। আমি এড়াতে পারি না এমন কারণে এটি কেবল নিজের হাতে রাখতে পারি না।
আমি এই প্রশ্নটি কয়েকজনের জন্য উন্মুক্ত রেখে দেব যদি কেউ হয় আরও মার্জিত সমাধান খুঁজে পেতে পারে এবং / অথবা টাইমার বিজোড়তার ব্যাখ্যা দিতে পারে।
অনেক ধন্যবাদ