it-swarm-id.com

Paksa Drupal untuk melampirkan Drupal perilaku ke konten ajax baru [hanya Drupal.attachBehaviors () tidak bekerja dengan cara yang benar]

Saya melakukan banyak posting di drupal.org tentang topik ini, tetapi sayangnya dalam konteks yang salah.

Saya pikir itu bukan masalahnya, jadi saya mencobanya dengan pendekatan yang berbeda, dan mungkin ini bisa menjadi solusinya. Memuat seluruh PHP Halaman dan mengekstrak div tertentu dengan ajax tidak berfungsi dengan benar. Jadi saya pikir, saya bisa membiarkan drupal memuat hanya konten dan menyuntikkannya dengan ajax ke div. Saya membuat permintaan dengan hook_preprocess_page dan hook_preprocess_node yang mencari "ajax = 1" di URL yang diminta dan kemudian hanya memberikan konten tanpa seluruh halaman. Dan sekarang dengan bantuan file tpl.php tertentu, secara teori, saya dapat membatasi output dari drupal hanya $ content. Dan inilah masalahnya. Pendekatan saya bekerja bahkan ketika saya meninggalkan file tpl.php cara asli, tetapi menghapus "$ content" dari node-ajax.tpl.php. Dengan "bekerja dengan cara yang benar", maksud saya drupal tidak memuat ulang seluruh halaman, tetapi matikan tentu saja bukan isinya. Tapi saya tidak bisa menjelaskan itu kepada diri saya sendiri, karena dalam variabel $ content, jadi saya pikir, hanya html dari konten yang dihasilkan. Jadi pertanyaan saya adalah, bagaimana saya bisa membatasi output drupal, hanya untuk konten, atau yang saya lakukan langkah yang salah untuk membuatnya bekerja. Ini adalah file module dan js yang saya gunakan: 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;
    });
};

Tolong bantu saya dengan ini. Setiap saran sangat dihargai.

10
dennis605

Saya mengerti. Ini bekerja dengan cara yang benar:

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

Terima kasih atas semua bantuannya.

11
dennis605

Saya pikir masalah Anda adalah bahwa fungsi kesuksesan Anda tidak akan memiliki konteks variabel dalam ruang lingkup sehingga perilaku lampiran akan bekerja dengan tidak terdefinisi.

Saya kira Anda bisa melakukannya

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