দ্রুপালকে নতুন এজ্যাক্সযুক্ত সামগ্রীতে দ্রুপাল আচরণ সংযুক্ত করতে বাধ্য করুন [কেবলমাত্র দ্রুপাল.আত্তাচবিহেভিয়ার্স () সঠিকভাবে কাজ করছে না]


10

আমি এই বিষয়টি সম্পর্কে drupal.org এ প্রচুর পোস্ট করছিলাম, তবে দুর্ভাগ্যক্রমে ভুল প্রসঙ্গে।

আমি মনে করি এটি সমস্যা নয়, তাই আমি এটি একটি ভিন্ন পদ্ধতির সাথে চেষ্টা করে দেখি এবং এটিই সমাধান হতে পারে। পুরো পিএইচপি পৃষ্ঠা লোড করা এবং এজ্যাক্স সহ একটি নির্দিষ্ট ডিভ উত্তোলন সঠিকভাবে কাজ করে না। সুতরাং আমি ভেবেছি, আমি ড্রুপালকে কেবল সামগ্রীটি লোড করতে এবং এটিজকে ডিভের সাথে ইনজেক্ট করতে পারি। আমি হুক_প্রিপ্রসেস_পেজ এবং হুক_প্রিপ্রসেস_নোড দিয়ে একটি জিজ্ঞাসা করেছি যা অনুরোধ করা ইউআরএলটিতে একটি "অজ্যাক্স = 1" সন্ধান করছে এবং তারপরে কেবল পুরো পৃষ্ঠাটি ছাড়াই সামগ্রীটি সরবরাহ করবে। এবং এখন নির্দিষ্ট tpl.php ফাইলগুলির সাহায্যে, তত্ত্বের ভিত্তিতে, আমি ড্রুপালের আউটপুট কেবলমাত্র $ সামগ্রীতে সীমাবদ্ধ করতে পারি। এবং এখানে সমস্যা। Tpl.php ফাইলগুলি মূল উপায়ে ছেড়ে দিলেও নোড-অজ্যাক্স.টিপিএলপিএফপি থেকে "$ বিষয়বস্তু" সরিয়ে ফেলা হলেও আমার পদ্ধতি কাজ করছে working "সঠিক উপায়ে কাজ করা" দিয়ে, আমার অর্থ এই যে দ্রুপাল পুরো পৃষ্ঠাটি পুনরায় লোড করে না, তবে অবশ্যই বিষয়বস্তু নয়। তবে আমি নিজের কাছে এটি ব্যাখ্যা করতে পারি না, কারণ হিসাবে $ সামগ্রীর পরিবর্তনশীল হ'ল তাই আমি ভেবেছিলাম যে কেবল উত্পন্ন সামগ্রীটির এইচটিএমএল। সুতরাং আমার প্রশ্নটি হল, আমি কীভাবে ড্রুপালের আউটপুট কেবলমাত্র সামগ্রীতে সীমাবদ্ধ করতে পারি বা এই কাজটি করার জন্য আমি কী ভুল পদক্ষেপ নিচ্ছি? আমি যে মডিউলটি এবং জেএস ফাইলটি ব্যবহার করছি তা এখানে: my_ajax.module:

<?php

function my_ajax_init()
{
    drupal_add_js(drupal_get_path('module', 'my_ajax') . '/my_ajax.js');
}

function my_ajax_preprocess_page(&$vars, $hook)
{

    if (isset($_GET['ajax']) && $_GET['ajax'] == 1)
    {
        $vars['template_file'] = 'page-ajax';
    }
}

function my_ajax_preprocess_node(&$vars, $hook)
{

    if (isset($_GET['ajax']) && $_GET['ajax'] == 1)
    {
        $vars['template_file'] = 'node-ajax';
    }
}

my_ajax.js:

Drupal.behaviors.my_ajax = function (context) {
    $('#content-group-inner .node a').live('click', function (e) {
        var url = $(this).attr('href');
        //$('#content-region-inner').slideUp('slow');
        $('#content-region-inner').empty().html('<img src="ajax-loader.gif" style="margin-left:50%;"/>');
        xhr = $.ajax({
            data: 'ajax=1',
            type: 'GET',
            url: url,
            success: function (data) {
                $('#content-region-inner').html(data);
                Drupal.attachBehaviors(context);
            }
        });
        return false;
    });
};

অনুগ্রহ করে এটির দ্বারা আমাকে সাহায্য করুন. প্রতিটি পরামর্শ প্রশংসা করা হয়।


2
মাত্র একটি ছোট্ট মন্তব্য ডি 7 অ্যাজাক্স লিঙ্ক এবং স্ট্যান্ডার্ডের মধ্যে পার্থক্য করার জন্য / nojs এবং / ajax ব্যবহার করে। এটি পরে আপনার কিছু মাথা ব্যথা বাঁচাতে পারে।
জেরেমি ফরাসী

উত্তর:


11

আমি এইটা পাইছি. এটি সঠিকভাবে কাজ করছে:

Drupal.behaviors.my_ajax = function (context) {
    $('#content-group-inner a').live('click', function (e) {

        $('#content-group-inner a').addClass('my_ajax-processed');
        var url = $(this).attr('href');
        $('#content-region-inner').empty().html('<img src="ajax-loader.gif" style="margin-left:50%;"/>');        
        $('#content-region-inner').load(url,'ajax=1',function() {
                        Drupal.attachBehaviors('#content-region-inner');
                        });
        return false;
        });
   };

তোমার সকল সাহায্যের জন্য ধন্যবাদ.


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

আপনার সংযুক্তিতে আপনার "প্রসঙ্গ" ব্যবহার করা উচিত।
জোশ কোয়েনিগ

শুধু লক্ষণীয়। লাইভ () এখন
অবহিত করা

ব্যবহার না করা context(জোশ কোয়েনিগ যেমন উল্লেখ করেছেন) একটি বড় নম্বর। আপনার ইভেন্ট হ্যান্ডলারটি পৃষ্ঠার সমস্ত উপাদানগুলির সাথে পুনরায় সংযুক্ত হবে। ব্যবহারের সাথে context, এই কোডটি পরিবর্তন করা দরকার, কারণ প্রথম ইভেন্টের বাইন্ডিংয়ের contextঅন্তর্ভুক্ত রয়েছে documentএবং যখন উপাদানটি প্রতিস্থাপন করা হবে তখন উপাদানটি কার্যকর হবে $('#content-group-inner a',context)না।
অ্যালেক্স স্ক্রাইপন্যিক

10

আমি মনে করি আপনার সমস্যাগুলি হ'ল আপনার সাফল্য ফাংশনটির সুযোগের পরিবর্তনশীল প্রসঙ্গ থাকবে না সুতরাং সংযুক্তি আচরণগুলি অপরিজ্ঞাতকৃতভাবে কাজ করবে।

আমি অনুমান করতে পারি যে আপনি করতে পারেন

Drupal.attachBehaviors($('#content-region-inner'));

আমি ভেবেছিলাম যে সাফল্য ফাংশনটি বন্ধ হয়ে যাবে এবং ভেরিয়েবলটি context(যা নতুন মার্কআপের চেয়ে পুরানো প্রসঙ্গটি) সুযোগে রাখবে: এটা কি ভুল?
অ্যান্ডি

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