web-gelistirme-sc.com

Drupal = Drupal yeni ajaxed içeriğe davranış eklemeye zorla [yalnızca Drupal.attachBehaviors () doğru şekilde çalışmıyor]

Bu konu hakkında drupal.org'da çok fazla yazı yapıyordum, ama ne yazık ki yanlış bağlamda.

Bence sorun bu değil, bu yüzden farklı bir yaklaşımla deniyorum ve belki de bu çözüm olabilir. Bütün yükleme PHP Sayfa ve ajax ile belirli bir div ayıklamak doğru yol vermedi. Bu yüzden, ben drupal sadece içerik ve div içine ajax ile enjekte.Ben istenen URL bir "ajax = 1" arıyor hook_preprocess_page ve hook_preprocess_node ile bir sorgu yaptım ve sonra sadece tüm sayfa olmadan içeriği verir. bazı tpl.php dosyaları, teorik olarak, ben drupal sadece $ içerik çıktı sınırlayabilir. İşte sorun. tpl.php dosyaları terk bile benim yaklaşım çalışıyor ancak "doğru şekilde çalışmak" ile drupal tüm sayfayı yeniden yüklemez, ancak kapalı Tabii içerik değil.Ama kendime açıklayamıyorum, neden $ content değişkeni, bu yüzden düşündüm, sadece oluşturulan içeriğin html olduğunu.Yani sorum şu, nasıl drupal çıktısını sınırlayabilirim, sadece içerik mi yapıyorum bu işe yaraması için yanlış adımlar. İşte kullanıyorum modül ve js dosyası: 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;
    });
};

Lütfen bana bu konuda yardım et. Her öneri takdir edilmektedir.

10
dennis605

Anladım. Bu doğru şekilde çalışıyor:

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

Tüm yardımların için teşekkür ederim.

11
dennis605

Sorunlarınızın, başarı işlevinizin kapsamdaki değişken içeriğe sahip olmayacağı, bu nedenle ekleme davranışlarının tanımsız üzerinde çalışacağını düşünüyorum.

Yapabileceğini tahmin ediyorum

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