Datenbankabfrage via Ajax im Adminbereich

By on 25. Februar 2015

Asynchrone Abfragen sind in einigen fällen eine gute Möglichkeit viel Arbeit zu sparen.
Man kann ohne die Seite neu laden zu müssen mehrere Feldvalues mittels Asynchroner Abfrage füllen.

Im aktuellen Beispiel vergebe ich im Artikel – Varianten Bereich für jede Variante eine EAN, welche ich aus der Datenbank auslese.

Dazu habe ich ein Modul entwickelt, welches ein neues Feld an jede Variante anhängt und bei noch nicht vorhandener EAN einen Button zum Abrufen hinzufügt.

EAN Modul - Article Varianten

Wenn nun also der Button “Load” geklickt wird passiert folgendes:

  • das JS-Script führt eine Asynchrone Post abfrage via jQuery.post() durch
  • das PHP-Script führt die Datenbankabfrage aus und gibt die EAN an das JS-Script zurück
  • das JS-Script füllt das EAN Feld mit der Rückgabe

An sich kein Hexenwerk.

Es sind jedoch einige Dinge im Administrativen Bereich zu beachten.
Seit (ich glaube) Version 4.5 wird ein Hidden-Token bei der Übermittlung von HTTP-Requests übergeben.

Das hat zur Schlußfolgerung, dass wenn wir nun keinen Token übergeben, wir aus dem System ausgeloggt werden.

Die dazu benötigten Funktionen liefert OXID natürlich mit.

Hier nun der Code zu den benötigten Dateien (JS und TPL).

Template-File:
[{capture assign=eanParams}]
var eanSrc = "[{$oViewConf->getModuleUrl('ms_ean')}]controllers/admin/ms_ean_ajaxload.php";
var sid = "[{ $oViewConf->getSessionId() }]";
var tkn = "[{ $oViewConf->getSessionChallengeToken() }]";
[{/capture}]
[{oxscript add=$eanParams}]
[{oxscript include=$oViewConf->getModuleUrl('ms_ean','out/admin/src/js/jquery-1.11.2.min.js')}]
[{oxscript include=$oViewConf->getModuleUrl('ms_ean','out/admin/src/js/loadFreeEan.js')}]

JS-File
$(".loadEan").click(function(e){
e.preventDefault();
$(this).loadFreeEan( eanSrc , tkn , sid)
});
jQuery.fn.extend({
loadFreeEan: function ( src , tkn , sid){
var obj = $(this);
$.post(src,{ force_admin_sid : sid, stoken : tkn })
.done(function(data){
ean = jQuery.parseJSON(data);
if(!ean)
alert('Keine verfügbare EAN vorhanden.');
else
obj.parent().children(".ownean").val(ean);
});
},
});

Mit der Funktion $oViewConf->getSessionId() erhalten wir die aktuelle Session ID.
$oViewConf->getSessionChallengeToken() gibt den benötigten Token zurück.
Das ganze übergeben wir nun als Parameter in unseren jQuery.post() Request. Somit kann das System uns als angemeldeter Administrator Identifizieren und loggt uns nicht automatisch aus.

Bei Interesse gehe ich gerne weiter auf das Modul EAN ein.

Posted in: OXID, Tutorials
Tagged: , , , , ,
cRs

Entwicklung von PHP, MySQL, HTML & CSS seit 2002. Aktuelles Framework OXID. Entwickler eines Onlineshops.

Comments

Be the first to comment.

Leave a Reply

*



Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>