it-swarm.com.de

Force Drupal zum Anhängen Drupal Verhalten an neuen Ajax-Inhalten [nur Drupal.attachBehaviors () funktioniert nicht richtig]

Ich habe viele Beiträge auf drupal.org zu diesem Thema verfasst, aber leider im falschen Kontext.

Ich denke, das ist nicht das Problem, also versuche ich es mit einem anderen Ansatz, und vielleicht könnte dies die Lösung sein. Das Laden der gesamten PHP Seite und das Extrahieren eines bestimmten Divs mit Ajax funktionierte nicht richtig. Also dachte ich, ich könnte drupal nur das laden lassen Inhalt und fügen Sie es mit Ajax in das div ein. Ich habe eine Abfrage mit hook_preprocess_page und hook_preprocess_node durchgeführt, die nach einem "ajax = 1" in der angeforderten URL sucht und dann nur den Inhalt ohne die gesamte Seite ausgibt. Und jetzt mit Hilfe von Bestimmte tpl.php-Dateien, theoretisch könnte ich die Ausgabe von drupal auf nur $ content beschränken. Und hier ist das Problem. Mein Ansatz funktioniert auch, wenn ich die tpl.php-Dateien belasse ursprünglicher Weg, aber Entfernen des "$ content" aus node-ajax.tpl.php. Mit "richtig arbeiten" meine ich, dass drupal nicht die gesamte Seite neu lädt, sondern aus Natürlich nicht der Inhalt. Aber ich kann mir das nicht erklären, denn in der Variablen $ content, so dachte ich, ist nur der HTML-Code des generierten Inhalts. Meine Frage ist also, wie ich die Ausgabe von Drupal auf einfach beschränken kann den Inhalt, oder mache ich die falschen Schritte, um dies zum Laufen zu bringen. Hier ist das Modul und die JS-Datei, die ich verwende: 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;
    });
};

Bitte helfen Sie mir dabei. Jeder Vorschlag wird geschätzt.

10
dennis605

Ich habe es. Das funktioniert richtig:

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

Danke für all deine Hilfe.

11
dennis605

Ich denke, Ihre Probleme sind, dass Ihre Erfolgsfunktion nicht den variablen Kontext im Gültigkeitsbereich hat, sodass das Anhängen von Verhaltensweisen undefiniert funktioniert.

Ich würde vermuten, dass Sie tun könnten

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