ok, ich schon wieder...
Wollte nur zum Abschluss noch einmal hier den kompletten weg posten,
wie ich es nun geschafft habe, eine galerie per ajax neu zu laden.
War nicht ganz einfach... Vielleicht hilfts ja jemandem.
Ziel war:
eine content-galerie soll per ajax neu geladen werden
entweder per reload button (zufalls-auswahl)
oder auch per vor-und-zurück -button
benötigt: die Erweiterung ajax.php (a.schrempp)
Die Erweiterung musste ich so ändern (siehe oben in diesem Thread):
PHP-Code:
protected function output($varValue)
{
$varValue = $this->replaceTags($varValue);
if (version_compare(VERSION, '2.9', '>'))
{
$varValue = json_encode(array
(
'token' => REQUEST_TOKEN,
// orig: 'content' => $varValue,
'content' => str_replace("TL_FILES_URL","",$varValue),
));
}
elseif (is_array($varValue) || is_object($varValue))
{
// orig: $varValue = json_encode($varValue);
$varValue = json_encode(str_replace("TL_FILES_URL","",$varValue));
}
echo $varValue;
exit;
}
1.
einen neuen inhalts-container anlegen
im inhalts-container als artikel eine galerie anlegen aus einem verzeichnis
generiert mit z.B. 50 Bildern
Dann ungefähr folgendes in der Galerie einstellen:
Anzeige: nur 9 bilder
3 Bilder pro Reihe
Grösse 100 x 100
die galerie nach zuflall sortieren
dem Artikel als CSS ID unten z.b. "ajax-gal" geben.
dann zurück und einen neuen inhalts-container anlegen
dort einen neuen Artikel anlegen.
hier etwas ins Textfeld schreiben, z.B. "galerie neu laden"
diesem Artikel eine CSS id geben, z.B. "reeload"
nun das Template der galerie öffnen.
(Ich habe hier ein eigenes Galerie Template, das ohne Tabellen funktioniert)
Wichtig ist: das template für die galerie muss im template-ordner liegen
und NICHT in einem unterverzeichnis, sonst findet es das ajax-script nachher nicht und es gibt
z.B. eine 500er Fehlermeldung.
Hier kommt ins Gallery-Template ganz unten nach dem Galerie - Code:
Code:
<script>
function getCte() {
new Request.JSON({
url: 'ajax.php',
method: 'get',
data : 'action=cte&g=1&id=84', // hier muss die ID des Artikels mit der Galerie eingetragen werden
onSuccess: function(responseText) {
$('ajaxgal').set('html', responseText.content); // da der ajax request mehrere elemente als JSON-Array (z.B. auch noch das Contao-Token) zurückgibt, muss man hier das element "content" angeben
}
}).send();
}
// dann wird, wenn die Seite geladen ist, dem #reeload-element, das wir als artikel angelegt haben, die funktion des ajax-reloads zugewiesen
window.addEvent('domready',function() {
$('reeload').addEvent('click', function(e) {
e.preventDefault();
getCte();
});
});
</script>
Das wars!
Mein Beipiel ist hier live zu sehen:
www.datenraum.de (oben rechts, reload-button)
Vielleicht habt Ihr ja einen besseren Weg auf Lager, ohne dass man die ajax.php anpassen muss.
Mir ist leider ansonsten keiner eingefallen :-)
beste Grüsse :: Joc
Lesezeichen