Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.

#1 28. März 2021 14:48

Dancer62
Server-Pate
Ort: 26345 Bockhorn, Niedersachsen
Registriert: 08. November 2013
Beiträge: 414

FormBuilder-Daten nach LISE übernehmen ?

Hallo,

folgende Aufgabenstellung: meine Kundin möchte ein Formular, über das die Nutzer eine Terminanfrage für eine oder mehrere Dienstleistungen stellen können. Über das Formular sollen alle notwendigen Daten eingegeben und abgeschickt werden. Anschließend sollen die gespeicherten Daten der Kundin so dargestellt werden, dass sie die eingegebenen Daten sehen, einen endgültigen Termin vergeben und per Telefon bzw. eMail dem Nutzer mitteilen kann.

Ich möchte nach Möglichkeit keine eigene Seite im Frontend, auf die mittels Passwort etc. zugegriffen werden kann, dafür nutzen müssen, da ich Hackerangriffen möglichst wenig Angriffsfläche bieten möchte.

Meine Idee war (und ist zur Zeit noch wink ), das Formular mit FormBuilder zu erstellen. Dann sollten die Daten "irgendwie" (per UDT ??) nach LISE gelangen, da ich dort eine DB-Struktur aufbauen und Daten (hier: der endgültige Termin) im Backend nachträglich eintragen kann. Allerdings kann ich die eingegebenen Daten meines Wissens nach nur in Listenform darstellen, was bei der Vielzahl der möglichen Daten recht umständlich und unübersichtlich werden kann.

Eine Alternative wäre für mich der FormBrowser, der offensichtlich die Möglichkeit bietet, dem Admin (der Kundin) sowohl eine Listen-, wie auch eine Daten-Ansicht zu bieten. Allerdings verstehe ich nicht ganz, wie diese Ansicht funktionieren soll: wie und wo kann die Kundin die Daten ansehen bzw. ändern (hier: endgültigen Termin eintragen) und dem Nutzer ggfs. per eMail mitteilen ? Wie schon oben erwähnt, würde ich eine Lösung im Backend bevorzugen, es sei denn, dass jemand eine andere, bessere (oder überzeugendere) Idee hat...

Ich bin für Vorschläge jederzeit offen und bedanke mich schon mal im Voraus für Eure Mühe.

P.S.: ich nutze CMS/ms 2.2.15 mit den aktuellen Versionen der benötigten Module.


Man ist so alt, wie man sich fühlt...

Offline

#2 01. April 2021 18:01

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.379

Re: FormBuilder-Daten nach LISE übernehmen ?

Eine Alternative wäre für mich der FormBrowser ... Allerdings verstehe ich nicht ganz, wie diese Ansicht funktionieren soll

Willkommen im Club ;-)

Hab grad mal die Doku gelesen:

Install it, and poke around the menus. Play with it. Try creating browsers ...

Musste ich dann auch erstmal tun, um überhaupt irgendwas zu verstehen.

Also du legst zuerst ein Formular an und fügst dort ein Feld vom Typ "*Ergebnisse für das FormBrowser-Modul speichern" ein.
Dabei kannst Du angeben nach welchen Formularfeldern sortiert werden kann.
(Also das FormBrowser Feld am besten zum Schluss anlegen)

Dann legst Du einen FormBrowser an und wählst dort das zugehörige Formular aus, dessen Daten gespeichert werden sollen.

Einsehen kannst Du die Daten dann im Backend unter Inhalte->FormBrowser.
Da ist erstmal eine Liste aller FormBrowser zu sehen.
Da klickst Du auf das Schlüssel-Icon des jeweiligen FormBrowsers.
Da steht dann zuerst eine Liste aller abgesendeten Formulare, sortiert nach Datum (oder eben den jeweiligen im Formular angegebenen Sortierfeldern).
Das Template dieser Liste kann man bearbeiten.

Und in dieser Liste kannst Du dann jeden Datensatz einzeln einsehen und bearbeiten.
Auch dieses Daten-Template lässt sich bearbeiten.

Allerdings kann ich die eingegebenen Daten meines Wissens nach nur in Listenform darstellen

Es läuft bei beiden Ansätzen auf Listen hinaus.
Wie sonst soll man denn eine Übersicht aller Terminanfragen herstellen?

FormBuilder+FormBrowser erscheint mir die einfachste Lösung, weil die Module ja so konzipiert sind, zusammenzuarbeiten. FormBuilder + UDT + LISE ginge vermutlich auch, aber das müsste man erst programmieren.

Ich würd erstmal den FormBrowser-Ansatz verfolgen.


Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12.2 unter PHP 7:
cmsms-1.12.2-php7.2-diff.tar.gz (nur die geänderten Dateien)
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)

Offline

#3 02. April 2021 09:50

Dancer62
Server-Pate
Ort: 26345 Bockhorn, Niedersachsen
Registriert: 08. November 2013
Beiträge: 414

Re: FormBuilder-Daten nach LISE übernehmen ?

Danke NaN, Du hast mir damit schon sehr viel weitergeholfen.

Allerdings erschließt sich mir der Unterschied zwischen "Listen-Template (Administrator)" und "Datenansichts-Template (Administrator)" noch nicht so ganz. Welche Ansicht sehe ich denn nun im Backend ? Und wo (und wie) sehe ich die andere Ansicht ?

Ansonsten werde ich mir erstmal eins der beiden Templates zur Brust nehmen, es nach meinen Vorstellungen ändern und sehen, was passiert (falls etwas passiert  big_smile ).

Edit: Habe gleich beim Ausprobieren etwas festgestellt: wie kann ich Radiobuttons bzw. Checkboxen darauf prüfen, ob sie einen Wert haben ? Mit der Abfrage

{if $entry->fields[$smarty.section.fldlist.index] != ""}
    <td>{$entry->fields[$smarty.section.fldlist.index]|escape}</td>
{else}
    <td>"kein"</td>
{/if}

zeigt er mir zwar die ausgewählten Felder an, aber alle Felder ohne Wert enthalten "Angabe fehlerhaft". Es macht allerdings auch keinen Sinn, für alle diese Felder einen Default-Wert festzulegen, da einige ja überhaupt erst bewußt ausgewählt werden sollen (eine Default-Option "keine" wäre für mich allerhöchstens eine absolute Notlösung).

Beitrag geändert von Dancer62 (02. April 2021 16:34)


Man ist so alt, wie man sich fühlt...

Offline

#4 02. April 2021 14:23

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.379

Re: FormBuilder-Daten nach LISE übernehmen ?

Die Listen-Ansicht ist die Liste der Terminanfragen.
Die Daten-Ansicht sind die Daten dieser Terminanfrage.

FormBrowser zeigt FormBrowser-Liste -> klick auf Schlüssel-Icon -> Liste aller Terminanfragen -> klick auf die Lupe -> Datenansicht | klick auf das Edit-Icon -> bearbeiten der Daten.

FormBrowser:
FormBrowser

Listen-Template:
Listen-Template

Datenansichts-Template:
(frag mich nicht was "Antworten" da in den Breadcrumbs zu suchen hat; vermutlich falsche Übersetzung/Platzierung von "return", denn das ist das, was passiert, wenn man da drauf klickt - man geht einfach wieder zurück zur Listen-Ansicht)
Datenansichts-Template

Daten bearbeiten:
Daten bearbeiten


Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12.2 unter PHP 7:
cmsms-1.12.2-php7.2-diff.tar.gz (nur die geänderten Dateien)
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)

Offline

#5 02. April 2021 19:58

Dancer62
Server-Pate
Ort: 26345 Bockhorn, Niedersachsen
Registriert: 08. November 2013
Beiträge: 414

Re: FormBuilder-Daten nach LISE übernehmen ?

Noch eine Frage:

ich habe - wie oben bereits erwähnt - mehrere Radiobuttons bzw. Checkboxen zu Gruppen zusammengefasst. Diese Gruppen haben eine Überschrift (= Feldname). Ich wollte jetzt per CSS diese Überschriften fett formatieren. Gebe ich jedoch ein

[== CSS ==]
.options label.checkbox {
         font-weight: bold;
}

oder

[== CSS ==]
.options label.label {
         font-weight: bold;
}

so tut sich nichts. Gebe ich hingegen

[== CSS ==]
.options label {
         font-weight: bold;
}

ein, so wird alles (Überschrift und alle Optionen) fett formatiert.

Übersehe ich hier ein Detail oder geht das tatsächlich nicht so, wie ich mir das vorstelle ?


Man ist so alt, wie man sich fühlt...

Offline

#6 03. April 2021 00:39

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.379

Re: FormBuilder-Daten nach LISE übernehmen ?

Ohne Quelltext kann ich nichts dazu sagen.
Ich vermute einfach mal, dass die Gruppen in Fieldsets zusammengefasst sind.
Die Überschrift dieser Fieldsets heißt nicht "label".
"Label" ist die Beschriftung jedes einzelnen Feldes.
Die Überschrift der Gruppierung heißt "legend".
Also rein theoretisch müsstest Du dann so auf diese Überschrift zugreifen (gilt jetzt mal pauschal für alle legends in einem fieldset eines formulars):

form fieldset legend {
   font-weight: bold;
}

Schau doch einfach mal im Browser wie das Formular aufgebaut ist.
Rechte Maustaste auf die Überschrift -> Element untersuchen.


Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12.2 unter PHP 7:
cmsms-1.12.2-php7.2-diff.tar.gz (nur die geänderten Dateien)
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)

Offline

#7 03. April 2021 12:08

Dancer62
Server-Pate
Ort: 26345 Bockhorn, Niedersachsen
Registriert: 08. November 2013
Beiträge: 414

Re: FormBuilder-Daten nach LISE übernehmen ?

Tja, ich habe mal in den Quelltext reingeschaut und Folgendes gefunden (Ausschnitt):

[== HTML ==]
<div class=" options">
    <label>Schneiden</label>
    <div>
        <input type="radio" name="cntnt01fbrp__69" value="1" id="schneiden_0">
        [Leerraum]
        <label for="schneiden_0">Maschinenschnitt</label>
    </div>
...
</div>

"Schneiden" ist die Bezeichnung der Radiobutton-Gruppe, "Maschinenschnitt" die Bezeichnung der ersten Option.
D.h., dass sowohl die Überschrift, als auch die Beschriftung der Optionen als "Label" bezeichnet werden (was ja auch durch meine Beobachtung

so wird alles (Überschrift und alle Optionen) fett formatiert.

gestützt wird). Als "legend" wird übrigens die Überschrift der einzelnen Formularabschnitte (= fieldset) bezeichnet (siehe auch Beschreibung der Felder im FormBuilder).

Beitrag geändert von Dancer62 (03. April 2021 12:12)


Man ist so alt, wie man sich fühlt...

Offline

#8 03. April 2021 12:22

Dancer62
Server-Pate
Ort: 26345 Bockhorn, Niedersachsen
Registriert: 08. November 2013
Beiträge: 414

Re: FormBuilder-Daten nach LISE übernehmen ?

Was mir noch gerade eben ein- und aufgefallen ist: meine Kundin soll ja die Termine für die Nutzer festlegen bzw. bestätigen. Sofern nur eine Telefon-Nr. angegeben ist, kann das nur per Telefon erfolgen, aber bei vorhandener eMail-Adresse wäre es natürlich wünschenswert, wenn sie den Termin festlegen und dann gleich per Button / beim Abspeichern an die hinterlegte eMail-Adresse verschicken könnte.

Allerdings fehlt mir im Moment die Idee, wie ich diese Aktion bewerkstelligen kann. Gibt es irgendein 'event', welches ich abfragen kann oder was in diesem Moment greift ? Es müsste ja eine Art Trigger sein, den ich dann auswerten kann.


Man ist so alt, wie man sich fühlt...

Offline

#9 03. April 2021 13:07

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.379

Re: FormBuilder-Daten nach LISE übernehmen ?

Okay, dann ist das mit der Gruppierung anders gelöst als ich dachte. Dein 3. Ansatz bei dem alles fett formatiert wird, war schon richtig. Es fehlt nur eine kleine Sache, die dem Browser sagt, dass er nur Labels formatieren soll, die direkte Kindelemente des Divs mit der Klasse "options" sind:

.options > label {
         font-weight: bold;
}

Hab grad Dein Edit gelesen:

Edit: Habe gleich beim Ausprobieren etwas festgestellt: wie kann ich Radiobuttons bzw. Checkboxen darauf prüfen, ob sie einen Wert haben ?

Keine Ahnung was ich falsch mache, aber wenn ich im FormBuilder eine Gruppe Radiobuttons hinzufüge, wird davon leider garnichts gespeichert. Egal was ich auswähle. Zumindest wird mir im FormBrowser nichts angezeigt.

EDIT: OK, ich weiß was ich falsch gemacht habe. Die Radiobuttons müssen im FormBuilder explizit einen Wert bekommen. Ich dachte, er nimmt bei leeren Werten im Frontend einfach die Reihenfolge der Felder 1 ... n. Im Frontend steht das dann zwar auch so drin, aber er speichert nach dem Absenden nicht die Werte, die vom Browser über das Formular übertragen werden, sondern die Werte, die ich im Backend im FormBuilder für diese Felder angegeben habe. Und wenn da nichts steht ... roll
Jedenfalls steht bei mir im FormBrowser "(nicht angegeben)" für Radiobuttons, bei denen nichts ausgewählt wurde.

Ich kann nur vermuten, dass in Deinem Fall, wenn nichts ausgewählt ist, das Feld garnicht erst gespeichert wird. Wie bei Checkboxen. Wenn die nicht aktiviert ist, wird nicht etwa ein leeres Feld übertragen sondern das Feld existiert einfach nicht. D.h. man müsste prüfen, ob ein Feld überhaupt existiert oder leer ist:

{if isset( $entry->fields[$smarty.section.fldlist.index]) || $entry->fields[$smarty.section.fldlist.index] != ""}
    <td>{$entry->fields[$smarty.section.fldlist.index]|escape}</td>
{else}
    <td>"kein"</td>
{/if}

Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12.2 unter PHP 7:
cmsms-1.12.2-php7.2-diff.tar.gz (nur die geänderten Dateien)
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)

Offline

#10 03. April 2021 13:28

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.379

Re: FormBuilder-Daten nach LISE übernehmen ?

Allerdings fehlt mir im Moment die Idee, wie ich diese Aktion bewerkstelligen kann. Gibt es irgendein 'event', welches ich abfragen kann oder was in diesem Moment greift ? Es müsste ja eine Art Trigger sein, den ich dann auswerten kann.

Schau mal unter "Erweiterungen -> Ereignisverwaltung".
Wähle dort "FormBrowser" aus.
Dann siehst Du eine Handvoll Events, bei denen Du mit einem UDT einhaken kannst.

OnFormBrowserRecordEdit wird nach dem Absenden des Edit-Formulars ausgeführt bevor die Daten in der DB gespeichert werden (kann man z.B. nochmal validieren oder so).

OnFormBrowserRecordEditPostSave wird ausgeführt nachdem die Daten in der DB gespeichert wurden.


Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12.2 unter PHP 7:
cmsms-1.12.2-php7.2-diff.tar.gz (nur die geänderten Dateien)
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)

Offline

#11 03. April 2021 16:06

Dancer62
Server-Pate
Ort: 26345 Bockhorn, Niedersachsen
Registriert: 08. November 2013
Beiträge: 414

Re: FormBuilder-Daten nach LISE übernehmen ?

NaN schrieb:

Es fehlt nur eine kleine Sache, die dem Browser sagt, dass er nur Labels formatieren soll, die direkte Kindelemente des Divs mit der Klasse "options" sind

Geil - das war genau das, was gefehlt hat.

DANKE NaN !!!

Edit: Ich habe das mit den Radiobuttons jetzt so gelöst, dass ich eine zusätzliche Option "keine" hinzugefügt habe, die per Voreinstellung gesetzt ist. Damit haben die Radiobuttons auf jeden Fall den Wert "keine". Nicht schön, aber bis mir etwas Besseres einfällt... wink

Allerdings habe ich jetzt das gleiche Problem bei nicht ausgewählten Datumsfeldern... sad

Beitrag geändert von Dancer62 (03. April 2021 16:13)


Man ist so alt, wie man sich fühlt...

Offline

#12 03. April 2021 16:33

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.379

Re: FormBuilder-Daten nach LISE übernehmen ?

Allerdings habe ich jetzt das gleiche Problem bei nicht ausgewählten Datumsfeldern...

Ich verstehe das Problem nach wie vor nicht.
Wo steht "Angaben fehlerhaft" wenn da nichts drin steht?


Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12.2 unter PHP 7:
cmsms-1.12.2-php7.2-diff.tar.gz (nur die geänderten Dateien)
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)

Offline

#13 03. April 2021 16:50

Dancer62
Server-Pate
Ort: 26345 Bockhorn, Niedersachsen
Registriert: 08. November 2013
Beiträge: 414

Re: FormBuilder-Daten nach LISE übernehmen ?

Ich weiß nicht, warum bei mir im ersten FormBrowser "(Angaben fehlerhaft)" stand. Im neu entworfenen FormBrowser steht bei Feldern ohne Wert "(nicht angegeben)". Aber weder mit der Abfrage auf "isset()", noch auf "empty()", noch auf "!= ' '" kann ich diese Ausgabe abfangen und ändern. Ich hätte gerne in der Datenbank/Listenansicht statt "(nicht angegeben)" den Wert "kein" drin stehen.

Aber dazu müsste ich wissen, worauf die Felder abgefragt werden.

Edit: Ich habe jetzt mal den UDT angefangen und frage mich gerade, wie ich die Felder vom FormBrowser anspreche ? Mit "$field_id[x]" (wie in der Modulhilfe vom FormBrowser beschrieben) oder mit dem Feld-Alias oder ...?  yikes

Beitrag geändert von Dancer62 (03. April 2021 20:37)


Man ist so alt, wie man sich fühlt...

Offline

#14 04. April 2021 00:03

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.379

Re: FormBuilder-Daten nach LISE übernehmen ?

Wenn kein Wert angegeben wurde, ist "(nicht angegeben)" der Wert roll
Deshalb haben weder Deine noch meine Abfrage Erfolg, weil das Ding immer irgend einen Wert hat.
Du könntest entweder über module_custom einfach die Sprachdatei entsprechend abändern. Dazu die Datei "assets/module_custom/FormBuilder/lang/de_DE.php" mit folgendem Inhalt erstellen:

<?php
$lang['unspecified'] = 'kein';

Dann gilt das aber immer für alle Formulare. Und auch nur für die, die nach der Änderung neu gespeichert werden.
Oder Du änderst Deine Abfrage im Template einfach so, dass Du an dieser Stelle explizit nach "(nicht angegeben)" anstelle nach einem leeren Wert suchst:

{if $entry->fields[$smarty.section.fldlist.index] != "(nicht angegeben)"}
    <td>{$entry->fields[$smarty.section.fldlist.index]|escape}</td>
{else}
    <td>"kein"</td>
{/if}

Mit dem UDT hab ich mich noch nicht weiter befasst. Das ist ein vollkommen anderes Ding und ist nirgends dokumentiert. Ich zitiere mal an dieser Stelle die Doku: "FormBrowser documentation is horrible. Someone should sponsor us to do a better job." Ich habe beinahe das Gefühl, wir leisten diesbezüglich hier gerade ein wenig Pionierarbeit.

Ich behelfe mir dann immer so, dass ich mir erstmal einen UDT erstelle, der alle verfügbaren Parameter ausgibt:

echo "<pre>" . print_r( $params , true ) . "</pre>";
exit;

Den weise ich dann dem Ereignis zu und dann löse ich es einfach mal aus. (D.h. Daten im FormBrowser ändern)
Beim FormBrowser kommt dann das hier bei raus (bei beiden genannten Events):

Array
(
    [browser_name] => Test FormBuilder + FormBrowser + LISE
    [browser_alias] => formb2lise
    [browser_id] => 1
    [record_id] => 9
    [side] => admin
    [_modulename] => FormBrowser
    [_eventname] => OnFormBrowserRecordEditPostSave
)

Für Dich interessant ist eigentlich nur die browser_id und die record_id.
Damit kann man dann den geänderten Datensatz vom FormBrowser abfragen.

So z.B.:

$fbr = cms_utils::get_module('FormBrowser');
$aebrowser = new fbrBrowser($fbr, $params, true);
$fb = cms_utils::get_module('FormBuilder');
$record = $fb->GetResponse( $aebrowser->GetFormId() , $params['record_id'] );

echo "<pre>" . print_r( $record->fieldsbyalias , true ) . "</pre>";

exit;

Das gibt Dir ein Array ($record) mit "feldname" => "feldwert" aus.
Da müsste man dann nach der E-Mail suchen und ggfs. eine Mail senden, dass der Eintrag jetzt bestätigt/geändert wurde.

ABER: der FormBrowser verwendet für das Bearbeiten von Einträgen teilweise auch nur die Funktionen des FormBuilders. Dabei werden Felder, die einen UDT auslösen sollen auch ausgeführt! Die Daten die man dort übergeben bekommt, sind wesentlich besser als das, was der FormBrowser liefert. Da muss man nix mehr machen, man hat alles im $params Array. D.h. man muss hier vielleicht nichtmal mehr das Rad neu erfinden und einen UDT schreiben, der dem Besucher dann nochmal eine E-mail sendet, wenn die Anfrage vom Admin geändert wurde. Wenn Du dem Formular ein Feld "*Ergebnisse per E-Mail an eine vom Besucher angegebene E-Mail-Adresse versenden" gibst, dann sollte der Besucher einmal eine Mail als Bestätigung seiner Anfrage erhalten und sobald der Admin diese Anfrage ändert, sollte er wieder die gleiche E-Mail mit den geänderten Daten erhalten. Ich hab das nur kurz mit UDTs getestet, die werden auf jeden Fall sowohl beim Ausfüllen des Formulars im Frontend als auch beim Bearbeiten im Backend ausgelöst, bin mir aber nicht zu 100% sicher, ob das mit allen FormBuilder Feldern, insbesondere E-mail-Feldern, genauso klappt - probieren.


Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12.2 unter PHP 7:
cmsms-1.12.2-php7.2-diff.tar.gz (nur die geänderten Dateien)
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)

Offline

#15 04. April 2021 10:42

Dancer62
Server-Pate
Ort: 26345 Bockhorn, Niedersachsen
Registriert: 08. November 2013
Beiträge: 414

Re: FormBuilder-Daten nach LISE übernehmen ?

NaN schrieb:

Oder Du änderst Du Deine Abfrage im Template einfach so, dass Du an dieser Stelle explizit nach "(nicht angegeben)" anstelle nach einem leeren Wert suchst

"Warum einfach, wenn's auch umständlich geht (oder andersrum)..." big_smile

Danke NaN, das war mal wieder so ein Knoten in meinen Gehirnwindungen  roll . Damit klappt das jetzt prima.

Aber gleich die nächste Frage: wie kann ich den Typ eines Feldes ermitteln ? Mit "$entry->type[index]" oder "$entry->fields[index].type" klappt's nicht wirklich. Ich könnte zwar auch den Index abfragen, aber das wäre meines Erachtens (bei 3 Feldern) etwas umständlich.


Man ist so alt, wie man sich fühlt...

Offline

#16 04. April 2021 11:09

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.379

Re: FormBuilder-Daten nach LISE übernehmen ?

Aber gleich die nächste Frage

Wenn Du noch kurz erläutern könntest, wo genau Du das machen willst?
Template? Welches?
UDT? Welche Aktion?


Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12.2 unter PHP 7:
cmsms-1.12.2-php7.2-diff.tar.gz (nur die geänderten Dateien)
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)

Offline

#17 04. April 2021 12:15

Dancer62
Server-Pate
Ort: 26345 Bockhorn, Niedersachsen
Registriert: 08. November 2013
Beiträge: 414

Re: FormBuilder-Daten nach LISE übernehmen ?

Tschuldigung, ich bin immer noch im FormBrowser-Template und versuche gerade in der Listenansicht, Uhrzeiten auszublenden, wenn kein Datum angegeben wurde (man kann zwar das Datumsfeld default-mäßig auf "leer" setzen, aber das Zeitfeld leider nur auf "aktuelle Zeit" oder auf "01:00"). Somit versuche ich den Feldtyp Zeit (= "time" ?) abzufragen, um bei einem leeren Datum das Zeitfeld ebenfalls auf "leer" zu setzen.


Man ist so alt, wie man sich fühlt...

Offline

#18 04. April 2021 14:47

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.379

Re: FormBuilder-Daten nach LISE übernehmen ?

Mit folgender Zeile im Template kannst Du Dir den gesamten Inhalt der Variable {$list} anzeigen lassen:

<pre>{$list|print_r:true|escape:html}</pre>

Und da ist leider kein Feld-Typ mit dabei.
Außer in den XML-Daten.
Um die aber auszulesen, müsstest Du den XML Parser des FormBuilders bemühen.
D.h. mit der ID des Feldes via UDT beim FormBuilder ... roll

Einfacher ist es, wenn Du im FormBuilder dem Datumsfeld bzw. dem Zeitfeld ein Alias gibst. Damit kannst Du Felder eindeutig identifizieren. Und dann kannst Du im Template anstelle von {section} mit {foreach} arbeiten und für jedes Feld das Alias prüfen:

			{foreach from=$entry->fieldsbyalias item=value key=alias}
				<td>{if $alias != 'uhrzeit' || ($alias == 'uhrzeit' && $entry->fieldsbyalias['datum'] != '(nicht angegeben)')}{$value|escape}{/if}</td>
			{/foreach}

PS: Ich würde "(nicht angegeben)" via module_custom lieber mit einem leeren Wert überschreiben, sodass Felder, bei denen nichts angegeben wurde, auch einfach mit einem leeren Wert in der DB gespeichert werden. Dann kannst Du nämlich im Template viel intuitiver prüfen {if wert == ''} anstelle von {if wert == '(nicht angegeben)'}. Der Text hat in der DB meiner Meinung nach nichts zu suchen und wurde nur eingeführt, damit beim Excel Export in den Feldern etwas sinnvolles drinsteht. Um Mehrsprachigkeit zu erhalten kann man es auch so machen:
Sprachdatei:

<?php
$lang['unspecified'] = '';
$lang['unspecified_text'] = 'kein';

Template:

{$mod=cms_utils::get_module('FormBuilder')}
...
{if wert == ''}{$mod->Lang('unspecified_text')}{/if}

Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12.2 unter PHP 7:
cmsms-1.12.2-php7.2-diff.tar.gz (nur die geänderten Dateien)
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)

Offline

#19 05. April 2021 13:45

Dancer62
Server-Pate
Ort: 26345 Bockhorn, Niedersachsen
Registriert: 08. November 2013
Beiträge: 414

Re: FormBuilder-Daten nach LISE übernehmen ?

NaN schrieb:

Einfacher ist es, wenn Du im FormBuilder dem Datumsfeld bzw. dem Zeitfeld ein Alias gibst. Damit kannst Du Felder eindeutig identifizieren.

Genau - und da sehe ich jetzt eine kleine Schwierigkeit: ordentlicher Programmierer, der ich bin, habe ich gelernt, dass man Felder etc. eineindeutig benennt (hier also "uhrzeit_1", "uhrzeit_2" etc. bzw. "termin_1", "termin_2"). Demzufolge würde die Abfrage

{if $alias != 'uhrzeit' || ($alias == 'uhrzeit' && $entry->fieldsbyalias['datum'] != '(nicht angegeben)')}{$value|escape}{/if}

entweder nichts bewirken (weil der Alias nie übereinstimmt) oder ich müsste so oft abfragen, wie ich unterschiedliche Aliase habe:

{if ($alias != 'uhrzeit_1' && $alias != 'uhrzeit_2' &&  $alias != 'uhrzeit_3') ||...

Gibt es irgendeine Funktion, mit der ich auf Vorhandensein eines Strings in einem anderen String prüfen kann (analog zu 'str_contain()' in PHP) ? Dann könnte ich (analog zu PHP) sinngemäß schreiben

{if ! str_contain($alias, 'uhrzeit') || ...

Man ist so alt, wie man sich fühlt...

Offline

#20 05. April 2021 14:38

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.379

Re: FormBuilder-Daten nach LISE übernehmen ?

Wieviel Termin/Uhrzeit Kombinationen gibt es denn pro Anfrage?
Auf das Vorhandensein eines Teilstrings zu prüfen (also z.B. ob etwas mit "uhrzeit_ ... " beginnt) ist nicht das Problem. Das Problem sehe ich dann vielmehr in der Zuordnung des jeweiligen Datums. Du willst ja z.B. "uhrzeit_1" nur dann anzeigen, wenn in "termin_1" etwas drin steht.
Normalerweise würde ich es so machen:

{if $alias|stripos:'uhrzeit' === false || $entry->fieldsbyalias['und hier muss jetzt der name des zugehörigen Datums rein'] != '(nicht angegeben)'}

Aber Du siehst ja das Problem, dass Du spätestens bei $entry->fieldsbyalias das genaue Alias des zugehörigen Datums angeben musst.

... *grübelgrübel* ...

Idee: Das Datum wird ja i.d.R. vor der Uhrzeit angezeigt. D.h. wir können eine Variable definieren (true/false) die angibt, ob die folgende Uhrzeit (egal welche) angezeigt werden soll. Per default setzen wir die Variable auf true. Ist das Feld ein Datum und leer, wird sie auf false gesetzt. Der Wert des Feldes wird nur dann angezeigt wenn es entweder keine Uhrzeit ist, oder wenn die Variable zum Anzeigen der Uhrzeit true ist. War es ein Uhrzeit-Feld, wird die Variable wieder auf true gesetzt. (für den nächsten Datensatz)

	{$show_time=true}
	{foreach from=$entry->fieldsbyalias item=value key=alias}
		{if $alias|stripos:'termin_' === 0 && $value == '(nicht angegeben)'}
			{$show_time=false}
		{/if}
		<td>{if $alias|stripos:'uhrzeit_' === false || $show_time === true}{$value|escape}{/if}</td>
		{if $alias|stripos:'uhrzeit_' === 0}
			{$show_time=true}
		{/if}
	{/foreach}

Beitrag geändert von NaN (05. April 2021 15:04)


Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12.2 unter PHP 7:
cmsms-1.12.2-php7.2-diff.tar.gz (nur die geänderten Dateien)
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)

Offline

#21 05. April 2021 15:06

Dancer62
Server-Pate
Ort: 26345 Bockhorn, Niedersachsen
Registriert: 08. November 2013
Beiträge: 414

Re: FormBuilder-Daten nach LISE übernehmen ?

NaN schrieb:

Wieviel Termin/Uhrzeit Kombinationen gibt es denn pro Anfrage?

Minimal keine und maximal 3, aber das sollte eigentlich kein Problem sein, denn wenn ich auf einen Teilstring abprüfen kann, ist es egal, ob ich das einmal, zweimal oder zehnmal machen muss.

NaN schrieb:

Idee: Das Datum wird ja i.d.R. vor der Uhrzeit angezeigt.

Richtig, ich hatte ursprünglich auch vorgehabt, bei der Uhrzeit das dazugehörige Datum mit 'index_prev'  (was ja bei 'section' verwendet wird) auf "(nicht angegeben)" zu prüfen und dann ggfs. die Uhrzeit auf "--" zu setzen. Bei einer 'foreach'-Schleife gibt es zwar die Eigenschaft 'iteration', aber ich weiß nicht, ob ich auf

{if $smarty.foreach.foreachname.iteration-1 == '(nicht angegeben)'...

abprüfen kann. Ansonsten ist Deine Lösung natürlich sehr praktisch.

Beitrag geändert von Dancer62 (05. April 2021 15:25)


Man ist so alt, wie man sich fühlt...

Offline

#22 05. April 2021 16:03

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.379

Re: FormBuilder-Daten nach LISE übernehmen ?

Bei Section hat man ja leider das Alias/den Typ des Feldes nicht verfügbar.

Bei einer 'foreach'-Schleife gibt es zwar die Eigenschaft 'iteration'

Ja, oder auch ".index". Das gibt aber leider nur die aktuelle Iteration/den aktuellen Index aus. Darüber kann man aber leider nicht ohne weiteres auf vorherige oder nächste Einträge zugreifen.
In einer Foreach-Schleife geht das meines Wissens nur über Hilfsvariablen.
Es sei denn, man nutzt den Index um direkt auf das andere Array namens "fields" zuzugreifen ...

{foreach from=$entry->fieldsbyalias item=value key=alias name=fieldsbyname}
<td>
    {if $alias|stripos:'uhrzeit_' === 0 && $entry->fields[$smarty.foreach.fieldsbyname.index-1] == '(nicht angegeben)'}
        --
    {else}
        {$value|escape}
    {/if}
</td>
{/foreach}

Da spart man sich die Hilfsvariable.


Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12.2 unter PHP 7:
cmsms-1.12.2-php7.2-diff.tar.gz (nur die geänderten Dateien)
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)

Offline

#23 05. April 2021 17:48

Dancer62
Server-Pate
Ort: 26345 Bockhorn, Niedersachsen
Registriert: 08. November 2013
Beiträge: 414

Re: FormBuilder-Daten nach LISE übernehmen ?

Ich versteh's einfach nicht. Ich habe jetzt folgenden Code implementiert, der auch soweit funktioniert :

{foreach from=$entry->fieldsbyalias item=value key=alias name=fldlist}    {* Schleife über alle Felder mittels Alias *}
   {if $smarty.foreach.fldlist.index != "3" && $value != "(nicht angegeben)"}    {* alle Felder <> 'Deine eMail-Adresse' UND Wert <> "(nicht angegeben)" *}
      <td>
         {if $alias|stripos:"uhrzeit" !== false && $entry->fields[$smarty.foreach.fldlist.index-1] == "(nicht angegeben)"}   {* String 'uhrzeit_' kommt im Alias vor UND Wert des zugehörigen Datums = "(nicht angegeben)" *}
            --
         {else}
            {$value|escape}
         {/if}
      </td>
   {elseif $smarty.foreach.fldlist.index != "3"}       {* alle Felder <> 'Deine eMail-Adresse' UND Wert = "(nicht angegeben)" *}
         <td>--<td> 
   {/if}
{/foreach}

Die Darstellung bis zum ersten Datum ist einwandfrei. Aber sobald das erste Datum "(nicht angegeben)" ist (bzw. als "--" dargestellt wird), folgt ein leerer Eintrag, auf den dann die Uhrzeit (!) folgt - und somit natürlich in der falschen Spalte. Ist dagegen ein gültiges Datum eingetragen, erscheint die dazugehörige Uhrzeit unmittelbar danach  in der korrekten Spalte.

Offensichtlich läuft in der if-Abfrage

         {if $alias|stripos:"uhrzeit" !== false && $entry->fields[$smarty.foreach.fldlist.index-1] == "(nicht angegeben)"}   {* String 'uhrzeit_' kommt im Alias vor UND Wert des zugehörigen Datums = "(nicht angegeben)" *}
            --
         {else}
            {$value|escape}
         {/if}

irgendetwas schief, aber ich komm nicht drauf... cry

Beitrag geändert von Dancer62 (05. April 2021 17:56)


Man ist so alt, wie man sich fühlt...

Offline

#24 06. April 2021 22:57

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.379

Re: FormBuilder-Daten nach LISE übernehmen ?

{if $smarty.foreach.fldlist.index != "3" ... }       {* alle Felder <> 'Deine eMail-Adresse'

Der Index beginnt bei 0.
Bei Dir steht also an 4. Stelle immer die E-Mail?
Nur um diese potentielle Fehlerquelle schonmal vorwegzunehmen.

Warum filterst Du die E-Mail nicht auch via Alias?
Ist meiner Meinung nach sicherer, falls sich die Reihenfolge der Felder mal ändert.

Ein Problem mit dem Index ist außerdem folgender: der ist nicht immer durchgängig von 0 ... n durchnummeriert.
Sobald Du im FormBuilder ein Feld hinzufügst, nachdem bereits Daten im FormBrowser gelandet sind, fehlt der Index für das neu hinzugefügte Feld. Da springt der dann z.B. plötzlich von 3 auf 5.
Dadurch hatte ich z.B. beim Feld mit dem Index 5 die Fehlermeldung, dass es keinen Index mit Nummer 4 gäbe und demzufolge war die Ausgabe dann auch ziemlich durcheinander.
Nur so als Info.
Sobald man diese Einträge dann einmal bearbeitet, ist aber alles wieder gut.

Dein Problem ist vermutlich folgendes: Das E-Mail Feld hat nicht den Index 3.
Ich habe jetzt folgendes Formular erstellt:

 Index | Feldname    | Alias     | Feldtyp
-------|-------------|-----------|---------------------
   0   | Name        | name      | Textfeld (einzeilig)
   1   | Options     | options   | Radioknopf-Gruppe
   2   | FormBrowser |           | *Ergebnisse für das FormBrowser-Modul speichern
   3   | email       | email     | *Ergebnisse per E-Mail an eine vom Besucher angegebene E-Mail-Adresse versenden
   4   | Datum_1     | datum_1   | Datumsauswahl
   5   | uhrzeit_1   | uhrzeit_1 | Zeitauswahl
   6   | Datum_2     | datum_2   | Datumsauswahl
   7   | uhrzeit_2   | uhrzeit_2 | Zeitauswahl

Das Email-Feld müsste jetzt den Index 3 haben.
Denn wir fangen bei 0 an zu zählen und es steht an 4. Stelle.
Im Template hat es aber den Index 2.
Weil das Feld "FormBrowser" (wie vermutlich alle "Felder" die lediglich eine Aktion für den FormBuilder darstellen) beim Anzeigen des Formulars logischerweise nicht existiert.

Ich hab das gerade mal probiert.
Bei diesem Formular und Deinem Code erhalte ich genau das gleiche Problem.

Ändere ich den Code so, dass für die E-Mail nach Index 2 gefiltert wird, klappt es.
Sich also nach dem Index zu richten, halte ich für keine gute Idee.

Bedenke außerdem noch folgendes: Wenn Du die E-Mail herausfiltern willst, musst Du das an zwei Stellen machen.
Das muss nämlich auch noch im Tabellenkopf geschehen.
Sonst stimmen Tabellenkopf und Daten nicht überein.


Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12.2 unter PHP 7:
cmsms-1.12.2-php7.2-diff.tar.gz (nur die geänderten Dateien)
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)

Offline

#25 06. April 2021 07:52

Dancer62
Server-Pate
Ort: 26345 Bockhorn, Niedersachsen
Registriert: 08. November 2013
Beiträge: 414

Re: FormBuilder-Daten nach LISE übernehmen ?

NaN schrieb:

Warum filterst Du die E-Mail nicht auch via Alias? Ist meiner Meinung nach sicherer, falls sich die Reihenfolge der Felder mal ändert.

Danke, gute Idee - da ich den Alias jetzt ja auch abfragen kann, habe ich das gleich gemacht.

NaN schrieb:

Bedenke außerdem noch folgendes: Wenn Du die E-Mail herausfiltern willst, musst Du das an zwei Stellen machen. Das muss nämlich auch noch im Tabellenkopf geschehen. Sonst stimmen Tabellenkopf und Daten nicht überein.

Das hatte ich bereits bedacht (das Problem ist, dass das Feld "eMail" mir den Wert 'Array' zurückgibt und nicht die eMail-Adresse - die bekomme ich seltsamerweise vom Feld "eMail-Bestätigung". Dadurch muss ich die Werte "über Kreuz" ausgeben, d.h. im Tabellenkopf filtere ich die "eMail-Bestätigung" heraus und bei den Daten die "eMail-Adresse".) und wie ich ja auch geschrieben habe

Dancer62 schrieb:

Die Darstellung bis zum ersten Datum ist einwandfrei.

funktioniert es. Auch der Tatsache,

NaN schrieb:

Weil das Feld "FormBrowser" (wie vermutlich alle "Felder" die lediglich eine Aktion für den FormBuilder darstellen) beim Anzeigen des Formulars logischerweise nicht existiert.

habe ich Rechnung getragen und mir vorher mittels

<pre>
   {section name=namelist start=0 loop=$fieldcount}
      Index: {$smarty.section.namelist.index} -> {$sortingnames[$smarty.section.namelist.index]}<br />
   {/section}
</pre>

die Indizes der Felder geben lassen (daher kenn ich ja auch den Index der eMail-Adresse). Ich sehe das Problem auch nicht bei den Indizes, sondern eher bei der von mir genannten if-Abfrage, denn

Dancer62 schrieb:

sobald das erste Datum "(nicht angegeben)" ist (bzw. als "--" dargestellt wird), folgt ein leerer Eintrag, auf den dann die Uhrzeit (!) folgt - und somit natürlich in der falschen Spalte. Ist dagegen ein gültiges Datum eingetragen, erscheint die dazugehörige Uhrzeit unmittelbar danach in der korrekten Spalte.

Für mich sieht es so aus, als ob "irgendwo" ein Leerzeichen als eigenständiger Wert produziert und in die Tabelle geschrieben wird (wo er nichts verloren hat), aber ich weiß nicht, wo... sad

Beitrag geändert von Dancer62 (06. April 2021 07:56)


Man ist so alt, wie man sich fühlt...

Offline