[gelöst] View-Block mit Pager per Ajax austauschen und Pager reaktivieren
am 20.01.2012 - 14:56 Uhr in
Hallo,
ich steh hier gerade wie ein Ochs vorm Berge und hab keine Idee wie ichs hinbekommen kann.
Situation ist folgende:
Ich hab mit Views Blöcke erstellt, die Inhalte als Tabelle auflisten ( Highscores). Dafür gibt es 4 Blöcke die die Daten für den aktuellen Tag, die aktuelle Woche, den aktuellen Monat und das aktuelle Jahr ausgeben sollen.
Die Views an sich sind kein Problem, ebensowenig die Tatsache an sich, dass sie blätterbar sind.
Nun werden die Blöcke aber auf einer Panelseite in einem Bereich anzeigt und mittels Ajax ausgetauscht. Auch das austauschen an sich ist kein Problem, javascript function & modul mit menu callbacks sind vorhanden und funktionieren, es wird fleissig ausgetauscht.
Was aber nun nicht mehr funktioniert ist das Blättern der View nachdem sie durch einen Ajaxaufruf ausgetauscht wird.
Ich hab im Moment so gar keine Idee was für einen Event ich wie und wo wieder einhängen muss nach einem AUstausch, damit das Paging wieder funktioniert. Der Content wird als JSON auf einer neuen Seite ausgegeben.
Hat das schon mal jemand gemacht und kann mir mit Hilfe, Infos, nützliche Tutorials oder ähnlichem aushelfen? Bin für jeden Tipp / Hinweis dankbar.
Gruß
- Anmelden oder Registrieren um Kommentare zu schreiben
*wunder*
am 11.04.2012 - 17:11 Uhr
Ich frage mihc nun ehct gerade, ob meine Anfrage:
a) unverständlich
b) zu einfach
c) zu schwierig
ist. Denn seit 3 Monaten stehe ich hier aufm Schlauch und bisher keine Antwort auf die Frage.
Ich komm da nach wie vor nicht weiter mit.
Dabei ist die Frage doch an sich ganz "einfach":
Wie kann ich einer View die Ajax nutzt und die durh einen anderen Ajax aufruf in die Seite geladen wurde bei bringen, ihr eigenen Ajax-Funktionalität wieder zu benutzen?
Beispiel:
Ein Block zeigt eine blätterbare Liste an. Dieser BLock wirt mittels Ajax in die Seite geladen. Dann ist aber der Blättern-Funktionalität futsch. WIe bekomme ich sie wieder an?
Nach wie vor bin ich für HInweise dankbar, da ich dieses Problem an mehreren Stellen habe.
Hi, ist wohl etwas
am 11.04.2012 - 18:46 Uhr
Hi,
ist wohl etwas schwierig.
Grundsätzlich:
Der Pager in Drupal wird durch Globale Variablen gesteuert.
Wenn Du per Ajax den neuen Content in den Block lädst, musst Du
auch die Globen Variablen des Pagers updaten.
Der Ajax aufruf scheint keinen paged query zu machen, daher wird der Pager vermutlich auch nicht updgedatet
Hier etwas über Pager:
http://www.angrydonuts.com/modernizing-the-drupal-pager-system
Gruss
https://awri.ch
Ich habe eine Schweizer Tastatur und daher kein scharfes ß ;-)
Ich versuch das Problem
am 12.04.2012 - 10:00 Uhr
Ich versuch das Problem nochmal anders/gtenauer zu beschreiben.
Es ist schon so dass der Content passend in Seiten aufgeteilt wird. Problem ist aber, das der Content als Seite angezeigt wird, nachdem einmal mit Ajax der Inhalt getauscht wurde.
Was ich aber nicht hinbekomme ist es, dem Pager-Link nach dem Neuladen beizubringen, dass er wieder als Ajax arbeitet und nur den Content-Block ersetzen soll in dem er selbst geladen wurde.
Irgendwas übersehe ich da, da ich nciht weiss was ich da wo wieder 'einhängen' muss, damit der Pagerlink wieder nur einen Ajax request auslöst, statt sich als Seite darzustellen
Ich bekomme dann auch nur den Inhalt des gewünschten Blocks, sprich mein Menü-Callback wird aufgerufen, der Inhalt wird nur nciht an der gewünschten Stelle aktualisiert.
Hallo Methos, soweit ich
am 12.04.2012 - 10:45 Uhr
Hallo Methos,
soweit ich weiss, macht der Pager
keine Ajax Requests.
Du musst entweder den Pager selbst basteln
Hier ein paar Tutorials zu Ajax und Paging.
http://viziontech.co.il/tutorial1
http://drupal.org/node/305747
Oder Du überschreibst die Links im Pager
im hook:preprocess_page bevor die Page ausgegeben wird.
Gruss
https://awri.ch
Ich habe eine Schweizer Tastatur und daher kein scharfes ß ;-)
Nur zur Sicherheit ...wir
am 12.04.2012 - 11:05 Uhr
Nur zur Sicherheit ...
wir sprechen aber beide vom Pager den das Views Modul zur Verfügung stellt? Denn genau der läd ( wenn Ajax aktiviert ist in den Views-Einstellungen ) doch Inhalt mittels Ajax nach ohne die Seite neu zu laden.
Die beidne Tutorials werd ich mir dennoch genauer ansehen. Vll bringt es mich ja auf die Sprünge.
Sorry, Du hast Recht der
am 12.04.2012 - 11:50 Uhr
Sorry,
Du hast Recht der Views Pager ist macht schon AJAX Calls.
d.H: Der Pager den Views erstellt funktioniert.
Was in Deinem Fall dann nicht funktioniert sind
die Menu Callbacks, welche den Content per Ajax laden sollen.
DU MUSST eine Deinem Menu Callback einen db_pager_query machen,
genauso wie deine View ihn macht.
Nur dann wird der Pager upgedatet.
Ich vermute dass Du den Content hier (MEnu Callback) mit einem einfachen db_query holst
und damit kann der Pager nix anfangen.
Gruss
Robert
https://awri.ch
Ich habe eine Schweizer Tastatur und daher kein scharfes ß ;-)
Ich hole den Content nicht
am 12.04.2012 - 12:06 Uhr
Ich hole den Content nicht mit einer db-query ab, sondern erzeuge den Inhalt mittels views_embed_view().
Der Inhalt wird auch korrekt erzeugt (also im Hinblick auf das Blättern).
Der Inhalt wird nur nicht in der Webseite selbst neu geladen, sondern quasi als eigene Seite ( Seite in dem Sinne, das nur noch der Inhalt, der von meinem Menü-Callback zurückgegeben wird, angezeigt wird)
Irgendwie muss ich dem 'Link' doch beibringen können, dass er das Geladene nur in die Seite einfügen soll.
Irgendwie geht das aber spätestens nach dem ersten Austauschen des Inhalts in die Hose, mit dem eben beschriebenen Effekt.
Hallo, hier embedd_view
am 12.04.2012 - 12:33 Uhr
Hallo,
hier embedd_view funktioniert nicht mit AJAX:
http://drupal.org/node/928882
Klingt plausibel, dass das der Page Header
schon geschreiben wurde, wenn Du dein embedd_view
machst.
Das bedeutet, dass das zur View gehöerende AJAX Script fehlt.
Ansonsten kannst Du noch versuchen, die View selber zu laden und zu rendern.
Gruss
https://awri.ch
Ich habe eine Schweizer Tastatur und daher kein scharfes ß ;-)
Lösung gefunden ... wie ich
am 09.05.2012 - 12:35 Uhr
Lösung gefunden ...
wie ich schon vermutet hatte, ist das einzige Problem, dass die Seite nicht weiss was sie tun soll, sprich es fehlt ein Behavior.
Läd man mittels AJAX eine View mit Pager nach, bekommt der Pager offensichtlich kein Behavior gesetzt. Nun bin ich hingegangen und habe in der AJAX-Funktion meines Moduls das Behavior des Pagers gesetzt.
Drupal.attachBehaviors('#hscontent ul.pager a.active');
Dazu dann noch das Verhalten als eigenes Behavior definiert:
$('#hscontent ul.pager a.active', document).click(function (evt) {
var updateProducts = function(data) {
$('#hscontent').html(data.pagedata).ready( function() {
Drupal.attachBehaviors('#hscontent ul.pager a.active');
});
}
$.ajax({
type: 'POST',
url: this.href,
success: updateProducts,
dataType: 'json',
data: 'js=1'
});
return false;
});
Damit weiss der Pager dann auch, was er tun soll und reaktiviert sich selbst bei jedem Aufruf des Pagers.
#hscontent ist dabei die CSS-ID des Bereichs in den die Views geladen werden.
So einfach kanns dann sein, wenn mans mal raushat ....