Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.
Seiten: 1
#1 01. Dezember 2013 10:18
- Klenkes
- Server-Pate
- Ort: 89428 Syrgenstein
- Registriert: 17. Dezember 2010
- Beiträge: 1.437
[GELÖST] Wie kann im Backend ein Frontendmodul ausgeführt werden?
Ein kleines Buchungssystem für Kurse:
1. Die Kurse werden vom Kunden in einem ListIt2 Modul verwaltet
2. Die Kurse werden im Formbuilder mit dem Feld: -Module Interface Field eingebunden:
{ListIt2Kurse summarytemplate='formular'}
3. Verwaltung der Buchungen erfolgt mit Formbrowser(im Backend hat es einige Vorteile)
Bearbeiten im Frontend:
Das Bearbeiten eines Datensatzes im Frontend funktioniert soweit prima, aber leider werden beim Speichern immer wieder neue Mails an den Kunden versandt. Ich wüsste nicht wie man das abstellt.
Ein weiterer Nachteil im Frontend ist, dass man keine Hidden Felder bearbeiten kann.
Bearbeiten im Backend:
Nun wird aber, wenn man im Backend einen Datensatz bearbeiten will, das Formular aufgerufen, und damit auch der ListIt2Kurse Aufruf. Das geht natürlich nicht, sondern endet mit einem Error:
.....lib\smarty\sysplugins\smarty_internal_templatecompilerbase.php:
Syntax Error in template "68282d18c557c50423a5ce8478d130dc73d7b5bc" on line 1 "{ListIt2Kurse summarytemplate='formular'}" unknown tag "ListIt2Kurse"
Eine Darstellung des Formulars mit Kursen ist aber wichtig, weil der Kunde oft Eingaben korrigiert und mal schnell einen Rabatt verrechnen will. Dazu muss auch das ListIt Modul verarbeitet werden können.
Das Modul in einem UDT ausführen und das Ergebnis zurückgeben, funktioniert auch nicht. Ist ja auch Backend...
Kann man das irgendwie durchboxen, dass man Frontendmodule im Backend ausführen kann?
Das alles in CMSMS 1.11.9
FB 0.7.4
Formbrowser 0.4.2
Formbrowser steht zwar auf der Abschussliste, doch gibt es keinen Ersatz dafür.
Offline
#2 01. Dezember 2013 10:39
- Klenkes
- Server-Pate
- Ort: 89428 Syrgenstein
- Registriert: 17. Dezember 2010
- Beiträge: 1.437
Re: [GELÖST] Wie kann im Backend ein Frontendmodul ausgeführt werden?
Manchmal ist es schon komisch...
Erst wenn man versucht es zu erklären hat man die guten Ideen.
Ich erforsche mal die Variante der ModuleAction in einem UDT:
http://www.cmsmadesimple.de/forum/viewt … 657#p27657
Offline
#3 01. Dezember 2013 11:33
- Klenkes
- Server-Pate
- Ort: 89428 Syrgenstein
- Registriert: 17. Dezember 2010
- Beiträge: 1.437
Re: [GELÖST] Wie kann im Backend ein Frontendmodul ausgeführt werden?
Löse ich mein Problem halt selbst... ist ja Sonntag morgen
Die Lösung liegt im zuvor erwähnten Forumlink.
Ein UDT mit diesem Inhalt ruft ListIt2Kurse mit der Template 'formular' auf:
$kurse = &cms_utils::get_module('ListIt2Kurse');
$kurse->DoAction('default', isset($params['id']) ? $params['id'] : 'cntnt01', array('summarytemplate' => 'formular', action => 'summary'), isset($params['returnid']) ? $params['returnid'] : '-1');
Nun weiß ich leider immer noch zu wenig über Modulprogrammierung und mache es wie die Meisten:
lesen, 30% verstehen, adaptieren
Vestehe ich das richtig?
Eine ModuleAction muss immer minddestens diese Parameter enthalten:
DoAction($action, $id, $params, $returnid=-1)
Was passiert wenn ich nur $action brauche?
Keine $id, $returnid und evtl. keine $params?
Der Aufbau muss trotzdem so sein?
Offline
#4 02. Dezember 2013 10:56
- NaN
- Moderator
- Ort: Halle (Saale)
- Registriert: 09. November 2010
- Beiträge: 4.437
Re: [GELÖST] Wie kann im Backend ein Frontendmodul ausgeführt werden?
Der Aufruf muss immer mit folgenden Prametern erfolgen
DoAction ($name, $id, $params)
Lediglich $returnid ist optional.
Brauchst Du im Backend eh nicht.
Was passiert wenn ich nur $action brauche?
Du musst trotzdem eine ID und wenigstens ein leeres Array für die Parameter angeben.
Im Backend ist die ID für Module meistens "m1_". wobei "1" eine fortlaufende Nummer für jedes Modul ist. Da man aber im Backend eigentlich nie mehrere Instanzen eines Moduls hat, ist das eher trivial. Du kannst da im Prinzip angeben was Du willst (außer "nichts" - da muss ein konkreter Wert rein). Auf jeden Fall sind diese Parameter Pflicht.
Also das wäre das Minimum, was Du angeben müsstest:
$kurse = &cms_utils::get_module('ListIt2Kurse');
$kurse->DoAction('default', 'm1_', array());
Allerdings ... ich weiß gerade garnicht, ob sich Frontend-Aktionen von Modulen so einfach umbiegen lassen.
Es könnte durchaus sein, dass eine fehlende Returnid bzw, das Fehlen eines Inhaltsobjektes, das Ausführen einer Frontend-Aktion im Backend unmöglich macht. Und wenn Du eine Returnid angibst, könnte es sein, dass Du ins Frontend-Umgeleitet wirst.
Kann das gerade leider nicht selber testen.
Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)
Offline
Seiten: 1