Eigenes Modul - aufruf einer Funktion via click

Hallo erst mal,

ich habe ein eigenes Modul angelegt und das klappt bei Abfragen auch soweit alles.
Aber: ich habe innerhalb dieses Moduls in der Klasse welche ich zum überladen nutze eine Funktion mit Datenbankzugriff. ( dort gehört dies ja auch hin soweit ich das sehe ).

Jetzt möchte ich gerne im Template ( in der .tpl Datei welche ich nutze um einen bestehenden [{block name=“name”}] zu überschreiben) via click eines Users speziell diese eine Funktion aufrufen.

Mein Ansatz das smarty für den Funktionsaufruf erst aufzurufen wenn der click erfolgt ist glaube falsch, da smarty ja beim Seitenaufruf komplett gerendert wird. Daher für spätere Benutzereingaben nicht mehr zur verfügung steht. Richtig?

Alternative sind dann wohl Ajax? Aber wie kann ich diese Funktion mit Parameter einfach aus Ajax aufrufen?
Bin via suche leider nicht schlauer geworden, bin über Hilfe dankbar.

Danke
Gruß Ahah :slight_smile:

Moin,
du kannst dir eigentlich jede beliebige Stelle in OXID als Beispiel nehmen, wo etwas erst nach dem Klick passiert, z.B. das Kontakt-Formular oder die Newsletter Anmeldung:

  1. du hast ein Formular mit einem Button zum anklicken
  2. die Funktion macht die Datenbanabfrage und speichert die Daten in einer Variable
  3. das Template prüft ob diese Variable gesetzt ist, und wenn ja wird es angezeigt

[QUOTE=AHah;180311]
Mein Ansatz das smarty für den Funktionsaufruf erst aufzurufen wenn der click erfolgt ist glaube falsch, da smarty ja beim Seitenaufruf komplett gerendert wird. Daher für spätere Benutzereingaben nicht mehr zur verfügung steht. Richtig? Alternative sind dann wohl Ajax? Aber wie kann ich diese Funktion mit Parameter einfach aus Ajax aufrufen?[/QUOTE]
Ich glaub dir fehlt da noch das AHah-Erlebnis (SCNR) wie Webanwendungen funktionieren:

  • Client sendet eine Anfrage (GET/POST Request)
  • Server bastelt den Content zusammen (PHP/'Smarty) und schickt ihn zurück
  • Client verarbeitet die Antwort (html/Seite neu aufbauen oder Ajax/Javascript ausführen)

Dann hat der Server (also PHP/Smarty) erstmal Pause, bis zum nächsten Request. Wenn du also mit Klick auf einen Button eine Funktion auf dem Server ausführen willst, musst du einen Request an den Server senden, der ihn dazu bringt diese Funktion auszuführen und eine entsprechende Antwort zurückzusenden. Ob das ein normaler Request mit Link oder Formular oder ein Ajax-Request ist spielt dabei keine Rolle. In Oxid kann man eine Funktion in einem Controller aufrufen mit dem Parameter fnc=funktionsname im Request.

Hallo,
also erst mal vielen Dank für Eure Mühe. Und ja, das AHah-Erlebnis steht noch aus :smiley:
Aber ich versuche es mal.
Also Modulstruktur soweit ok denke ich.

In meiner eigenen .tpl Datei welche via Modul in den Block überschrieben wird:

<form>   
Ja: <input type="button" value="Ja" onClick="funktionsname(1, 2)" />
<br />
Nein: <input type="button" value="Nein" onClick="funktionsname(2, 2)" />
</form>


<script>
function funktionsname(variable1, variable2)
{

   $.ajax({
   		url: "index.php?cl=unserkuerzel_unsermodul_oxarticle",
		type: "post",
		data: { variable1 : variable1, variable2 : variable2 },
		success: function(data) 
		{
          alert('JA ');
		},
		error: function()
		{
          alert('NEIN');
		}
   });

}
</script>

Wenn ich aber in meiner models php Datei mehrer Funktionen habe in diesem Modul. Wie kann ich aus dem Ajax heraus eine spezielle Funktion aufrufen?
Über eine andere URL klappt das anscheinend nicht, obwohl alert('JA '); ausgegeben wird.

Ich möchte 2 Werte an diese Funktion übergeben, ein return aus meiner php Funktion ist nicht unbedingt notwendig.

DANKE und Gruß

data: { fnc: func, variable1 : variable1, variable2 : variable2 },