Ich habe viele Beiträge auf drupal.org zu diesem Thema verfasst, aber leider im falschen Kontext.
- Ajaxed-Inhalte fügen nicht die erforderlichen JS- und CSS-Dateien hinzu (Forum)
- Ajaxed-Inhalte fügen nicht das erforderliche JS und CSS hinzu (Problem)
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 Div mit Ajax funktionierte nicht richtig. Also dachte ich, ich könnte Drupal nur den Inhalt laden lassen und ihn mit Ajax in das Div injizieren. 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 könnte ich mit Hilfe bestimmter tpl.php-Dateien theoretisch die Ausgabe von drupal auf nur $ content beschränken. Und hier ist das Problem. Mein Ansatz funktioniert auch dann, wenn ich die tpl.php-Dateien auf die ursprüngliche Weise belasse, aber den "$ content" aus node-ajax.tpl.php entferne. Mit "richtig arbeiten" meine ich, dass Drupal nicht die ganze Seite neu lädt, aber natürlich nicht den inhalt. Aber ich kann mir das nicht erklären, weil in der Variablen $ content, also dachte ich, nur das HTML des generierten Inhalts ist. Meine Frage ist also, wie ich die Ausgabe von Drupal auf den Inhalt beschränken kann oder ob ich die falschen Schritte mache, 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.
quelle
Antworten:
Ich habe es. Das funktioniert richtig:
Danke für all deine Hilfe.
quelle
context
(wie Josh Koenig betonte) ist ein großes Nein-Nein. Ihr Event-Handler wird erneut an alle Elemente auf der Seite angehängt. Mit Verwendungcontext
müßte dieser Code geändert werden, da dascontext
enthältdocument
auf der ersten Ereignisbindung und das Element selbst , wenn der Inhalt ersetzt wird, so einfach$('#content-group-inner a',context)
ist , nicht zur Arbeit gehen.Ich denke, Ihre Probleme sind, dass Ihre Erfolgsfunktion nicht den variablen Kontext im Gültigkeitsbereich hat, sodass das Verhalten von Anhängen undefiniert funktioniert.
Ich würde vermuten, dass Sie tun könnten
quelle
context
(die eher der alte Kontext als das neue Markup ist) im Geltungsbereich hält: Ist das falsch?