it-swarm.asia

فرض Drupal لإرفاق Drupal للمحتوى الجديد المتدفق [فقط Drupal.attachBehaviors () لا يعمل بالطريقة الصحيحة]

كنت أقوم بالكثير من المنشورات على drupal.org حول هذا الموضوع ، ولكن للأسف في السياق الخاطئ.

أعتقد أن هذه ليست المشكلة ، لذا أجربها بنهج مختلف ، وربما يكون هذا هو الحل. تحميل الكل PHP الصفحة واستخراج div معين مع ajax لم يعمل بالطريقة الصحيحة. لذلك اعتقدت ، يمكنني السماح drupal تحميل فقط المحتوى وحقنه باستخدام ajax في div. لقد أجريت استعلامًا باستخدام hook_preprocess_page و hook_preprocess_node التي تبحث عن "ajax = 1" في عنوان URL المطلوب ثم تقدم المحتوى فقط بدون الصفحة بأكملها. والآن بمساعدة بعض ملفات tpl.php ، نظريًا ، يمكنني تحديد ناتج drupal لمحتوى $ فقط. وهنا تكمن المشكلة. نهجي يعمل حتى عندما أترك ملفات tpl.php بالطريقة الأصلية ، ولكن إزالة "المحتوى $" من node-ajax.tpl.php. مع "العمل بالطريقة الصحيحة" ، أعني أن drupal لا يعيد تحميل الصفحة بأكملها ، ولكن يتم إيقاف بالطبع ليس المحتوى ، ولكن لا يمكنني أن أشرح ذلك لنفسي ، لأن في متغير المحتوى $ ، لذلك اعتقدت ، هو فقط html للمحتوى الذي تم إنشاؤه. لذا سؤالي هو ، كيف يمكنني قصر إنتاج الدروبال على المحتوى ، أو أفعله الخطوات الخاطئة للحصول على هذا العمل. هذه هي الوحدة النمطية وملف js الذي أستخدمه: 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;
    });
};

من فضلك ساعدني في هذا الشئ. نقدر كل اقتراح.

10
dennis605

لقد حصلت عليه. هذا يعمل بالطريقة الصحيحة:

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;
        });
   };

شكرا لكم على كل ما تبذلونه من مساعدة.

11
dennis605

أعتقد أن مشكلتك هي أن وظيفة النجاح الخاصة بك لن يكون لها سياق متغير في النطاق ، لذا ستعمل سلوكيات الإرفاق على غير محددة.

أعتقد أنك يمكن أن تفعل

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