cool IT Team-Blog

Datenaktualisierung mit AJAX in einem CMS-System

Der Trick besteht im Wesentlichen darin, dass die Seite, von der der AJAX-Call abgesetzt wird, noch einmal aufgerufen wird. Damit ist garantiert, dass der gleiche CMS-Context wie vorher wieder hergestellt ist.

Ich möchte die Vorgehensweise am Beispiel von Contao zeigen, aber das Beispiel ist eigentlich unabhängig von Programmiersprache und CMS - kann also genauso in jedem anderen System wie Wordpress oder Kentico, Joomla oder Drupal angewendet werden.

Wir befinden und also in einem PHP-File, in dem es einen JavaScript-Abschnitt gibt, in dem die Variablen für den AJAX-Call bereits vorbereitet worden sind.

Als erstes müssen wir den URL um etwaige QueryString-Parameter bereinigen. Sollten diese für den AJAX-Call auch benötigt werden, muss der URL entsprechend anders zusammengesetzt werden. In unserem Beispiel verwerfen wir alle vorhandenen Query-Parameter:

var tempArray = window.location.href.split("?");
var baseURL = tempArray[0];

Der baseURL ist also der um die QueryParameter bereinigte URL.

Danach wird der AJAX-Call mittels JQuery und POST-Methode auf die Selbst-Referenz abgesetzt. Es wird ein neuer QueryParameter hinzugefügt (isAJAX), anhand dessen wir später erkennen können, dass wir einen AJAX-Call abarbeiten müssen.

$.ajax({
  type: "POST",
  url: baseURL + '?isAjax=1',
  data: {
    p1: $p1,
    p2: $p2,
    ID: <?php echo $entry['data']['ID']['raw']; ?>
  }
});

Nun folgt noch die Code-Passage, die den AJAX-Call abarbeitet:

<?php
if ($this->Input->get('isAjax') == '1')
{
  $p1 = $_POST['p1'];
  $p1 = $_POST['p2'];
  $ID = $_POST['ID'];

  $this->import('Database');
  $this->Database->prepare("UPDATE tabelle SET p1=?, p2=? WHERE ID=?")->execute($p1,$p2,$ID);
 
  exit; // IMPORTANT!

}
?>

An dieser Stelle sind 2 Punkte wichtig:
  • Es müssen alle Parameter übergeben werden, die sich aus dem Kontext der aufrufenden Seite ergeben. Im AJAX-Call soll eigentlich nur der Datenbank-Zugriff abgearbeitet werden. Es kann natürlich an dieser Stelle auch ein Lese-Vorgang und eine Datenaktualisierung auf der Seite erfolgen. Dann müssen entsprechend andere Parameter übergeben werden.
  • Nach Ausführung des Calls muss sofort ein EXIT erfolgen, damit der Seitenaufbau, etc. nicht erneut durchgeführt werden.
Ist doch cool, oder?

LG,
Sabine.


Verfasst: 23.06.2012 07:37:38 von Sabine Stiller
Tags: AJAX, CMS, Contao, dynamisch, JavaScript, jQuery, PHP

1


Kommentare
Für diesen Blogbeitrag liegen zurzeit keine Kommentare vor.
Einen Kommentar schreiben



 Security code