[ELSE] bei Formular?

Hier bekommst Du deutschsprachigen Support. Keine Fehlermeldungen oder Erweiterungswünsche bitte!
User avatar
Uwe367
Posts: 1206
Joined: Sat 15. Sep 2007, 07:19
Location: Koblenz

[ELSE] bei Formular?

Post by Uwe367 »

Im CP Formular wird bei der Definition eines Formularfeldes folgendes erstellt.
Beispiel: Name

Code: Select all

{ERROR:Name}{LABEL:Name}{Name}
Nun kann ich beispielsweise, für den Fall daß ein Feld falsch ausgefüllt wurde das folgender maßen aufbauen.

Code: Select all

[IF_ERROR:Name]<span class="invalid">{ERROR:Name}</span>[/IF_ERROR]
Gibt es sowas auch um ein Feld zu markieren wenn es Richitg ausgefüllt wurde?
Gibt es etwas in dieser Art?

Code: Select all

[IF_ERROR:Name]<span class="invalid">{ERROR:Name}</span>[/IF_ERROR] (bei Fehler)

[ELSE_IF_ERROR:Name]<span class="valid">{ELSE_ERROR:Name}</span>[/ELSE_IF_ERROR] (wenn richtig)
Vielleicht hat jemand nen Tip. :wink:
User avatar
Uwe367
Posts: 1206
Joined: Sat 15. Sep 2007, 07:19
Location: Koblenz

Re: [ELSE] bei Formular?

Post by Uwe367 »

Erledigt....
Gerade das hier gefunden: viewtopic.php?p=101200#p101200
User avatar
santscho
Posts: 1442
Joined: Mon 2. Apr 2007, 08:56
Location: Schweiz

Re: [ELSE] bei Formular?

Post by santscho »

Also in meinem Bootstrap-Formular geht die Error-Funktion nicht:

Code: Select all

<div class="form-group">
<label for="name">{LABEL:name}</label>
{name}
[IF_ERROR:name]<small class="form-text text-muted">Name required!</small>[/IF_ERROR]
</div>
Schon Konfuzius sagte: "Sei kein YAML-Lappen". YAML-phpwcms-Integration auf http://www.yaml.phpwcms.org
User avatar
Uwe367
Posts: 1206
Joined: Sat 15. Sep 2007, 07:19
Location: Koblenz

Re: [ELSE] bei Formular?

Post by Uwe367 »

Ich bin da auch noch am tüfteln wie ich das am besten zusammen baue. So wirklich klappt das bei mir auch noch nicht....
User avatar
santscho
Posts: 1442
Joined: Mon 2. Apr 2007, 08:56
Location: Schweiz

Re: [ELSE] bei Formular?

Post by santscho »

Liegt es vielleicht an Bootstrap?
Schon Konfuzius sagte: "Sei kein YAML-Lappen". YAML-phpwcms-Integration auf http://www.yaml.phpwcms.org
User avatar
Uwe367
Posts: 1206
Joined: Sat 15. Sep 2007, 07:19
Location: Koblenz

Re: [ELSE] bei Formular?

Post by Uwe367 »

Ich denke es kommt drauf an was man umsetzen möchte.
Wenn ich im Netz nach Bootstrap Form Valiadation suche bekomme ich zig Ergebnisse, angefangen von getbootstrap.com bis Stackoverflow und viele andere Seiten, die Lösungen auf die verschiedensten Arten zeigen. Von daher kann man nicht pauschal sagen ob der Fehler von Bootstrap oder phpwcms ausgeht.
Hier mal die Lösungen von getbootstrap.com
Hier hilft Nach wie Vor nur ausprobieren und den Quellcode mit dem vergleichen was du einbauen möchtest.

Habe gerade mal auf meinem Localhost geschaut denn da bin selbst gerade damit beschäftigt das umzusetzen.

So sieht es bei mir in der Testphase derzeit aus:

Code: Select all

<div class="form-group">
<p>{Name}[IF_ERROR:Name]<span class="fehler">{ERROR:Name}</span>[/IF_ERROR]
[ELSE_ERROR:Name]Alles ok[/ELSE_ERROR]</p>
</div>
Ok, die Klasse ".fehler" existiert derzeit nicht, aber trotzdem bekomme ich die Fehlermeldung angezeigt wenn das Feld als Pflichtfeld deklariert ist und nicht ausgefüllt wird.

Momentan überlege ich noch wie ich es schaffe daß

Code: Select all

[ELSE_ERROR:Name]Alles ok[/ELSE_ERROR]
erst ausgegeben wird wenn das Feld richtig ausgefüllt wurde. Derzeit wird das schon ausgegeben wenn ich das Formular im Browser öffne.
Wobei ich vermute daß das daran liegt daß ich keine Eingabemindestlänge deklariert habe. Irgendwo gabs das doch mal zum nachlesen wie ich das hin bekomme so daß .z.B mindestens 3 Zeichen eingegeben werden müssen....
User avatar
santscho
Posts: 1442
Joined: Mon 2. Apr 2007, 08:56
Location: Schweiz

Re: [ELSE] bei Formular?

Post by santscho »

Wenn ich das Formular abschicke, wird lediglich das erste nicht-ausgefüllte Pflichtfeld blau umrandet und ein Pop-Up "Fill this field" erscheint. Das Problem ist, es wird nur dieses angezeigt. Wenn man wieder "Abschicken" klickt, wird das nächste Pflichtfeld, das nicht ausgefüllt ist, angezeigt. Ich möchte aber, dass enach dem Submit gleich ersichtlich ist, welche Felder nicht ausgefüllt wurden.

Probiers mal aus: https://hramusp.ru/подать-требу.html (Bitte Formular nicht abschicken!)

Schick das Formular ab, ohne auszufüllen. Es sind die obersten zwei Felder, die Pflichtfelder sind. Beim abschicken möchte ich eine Fehleranzeige für beide Felder.
Last edited by santscho on Sun 31. May 2020, 23:56, edited 1 time in total.
Schon Konfuzius sagte: "Sei kein YAML-Lappen". YAML-phpwcms-Integration auf http://www.yaml.phpwcms.org
User avatar
santscho
Posts: 1442
Joined: Mon 2. Apr 2007, 08:56
Location: Schweiz

Re: [ELSE] bei Formular?

Post by santscho »

Uwe367 wrote: Sun 31. May 2020, 16:44 Irgendwo gabs das doch mal zum nachlesen wie ich das hin bekomme so daß .z.B mindestens 3 Zeichen eingegeben werden müssen....
Du musst das Feld "text (spezial)" verwenden. Dann REGEX im Feld "wert/value".

Oder zum Beispiel: type="INT"
Dann sind nur Zahlen erlaubt. Übrigens hier nachzulesen: https://wiki.phpwcms.org/doku.php/engli ... d-checking
Schon Konfuzius sagte: "Sei kein YAML-Lappen". YAML-phpwcms-Integration auf http://www.yaml.phpwcms.org
User avatar
Uwe367
Posts: 1206
Joined: Sat 15. Sep 2007, 07:19
Location: Koblenz

Re: [ELSE] bei Formular?

Post by Uwe367 »

santscho wrote: Sun 31. May 2020, 19:58 Wenn ich das Formular abschicke, wird lediglich das erste nicht-ausgefüllte Pflichtfeld blau umrandet und ein Pop-Up "Fill this field" erscheint. Das Problem ist, es wird nur dieses angezeigt. Wenn man wieder "Abschicken" klickt, wird das nächste Pflichtfeld, das nicht ausgefüllt ist, angezeigt. Ich möchte aber, dass enach dem Submit gleich ersichtlich ist, welche Felder nicht ausgefüllt wurden.
Jetzt weiß ich was du meinst. Das ist die browsereigene Validierung, die greift wenn nichts anderes verwendet wird. Jeder Browser interpretiert das auf seine eigene Weise.
Um das zu umegehen mußt du die browsereigene Validierung "abschalten" was bei Bootstrap, auch hier nachzulesen, so geht:

Code: Select all

<form class="needs-validation" novalidate>
novalidate sorgt dafür daß die browsereigene Valdierung abgeschaltet wird.

Allerdings ist diese Variante mit phpwcms nicht so ohne weiteres umsetzbar da man die Klassen, die Bootstrap von Haus aus nutzt nicht ohne Frontend Renderscript einbauen kann. Oliver wird daran auch nichts ändern da dies zu Problemen mit älteren Installationen führen kann. Lies dir bitte dazu mal diesen Thread durch:
viewtopic.php?f=16&t=25882
Da findest du auch das Script zum ersetzen der Klassen.

Und auch das Issue bei Github welches ich desewegen erstellte:
https://github.com/slackero/phpwcms/issues/281

Daher auch meine Anmerkung vorhin wie du das umsetzen möchtest denn im Netz werden viele Möglichkeiten angeboten die vielleicht anders lösbar sind.


Danke auch für den Hnweis mit REGEX. Hatte ich irgendwie vollkommen vergessen. Ich werd alt... :lol: :lol:
User avatar
santscho
Posts: 1442
Joined: Mon 2. Apr 2007, 08:56
Location: Schweiz

Re: [ELSE] bei Formular?

Post by santscho »

Eigentlich brauche ich auch keine Bootstrap-Validierung (mit rot umrandeten Feldern und dem Javascript).

Alles was ich erreichen möchte ist das Einblenden von zusätzlichem Text, wenn ein Pflichtfeld nicht ausgefüllt ist. Hat früher doch funktioniert, wenn ich mich recht erinnern kann.

Code: Select all

[IF_ERROR:name]<small class="form-text text-muted">Name required!</small>[/IF_ERROR]
Das funktioniert auch nicht:

Code: Select all

[IF_ERROR]<p class="formerror">{ERROR:name}</p>[/IF_ERROR]
Schon Konfuzius sagte: "Sei kein YAML-Lappen". YAML-phpwcms-Integration auf http://www.yaml.phpwcms.org
User avatar
santscho
Posts: 1442
Joined: Mon 2. Apr 2007, 08:56
Location: Schweiz

Re: [ELSE] bei Formular?

Post by santscho »

So scheint es zu funktionieren (Oliver wird darüber nicht glücklich sein, wenn er das liest) :D

Habe in der cnt23.article.inc.php auf Zeile 2425 einfach noch das "novalidate" eingefügt:

Code: Select all

$CNT_TMP .= '<form novalidate id="phpwcmsForm'.$crow["acontent_id"].'"'.$cnt_form['class'].' action="'.rel_url();
Im CP unter "error class" noch eingetragen:

Code: Select all

border-danger
Jetzt werden Error-Meldungen ausgegeben. und dank der error class bekommen die fehlerhaften Felder einen roten Rahmen.
Schon Konfuzius sagte: "Sei kein YAML-Lappen". YAML-phpwcms-Integration auf http://www.yaml.phpwcms.org
User avatar
Uwe367
Posts: 1206
Joined: Sat 15. Sep 2007, 07:19
Location: Koblenz

Re: [ELSE] bei Formular?

Post by Uwe367 »

Klar, so kannst du das auch machen.
Wie ich ja schon schrieb kommt es eben darauf an was du umsetzen möchtest. Viele Wege führen nach Rom :wink:
Ich würde jedoch nicht den Core ändern da die Änderung beim nächtsten Update verloren gehen kann und dann geht eventuell die Sucherei nach dem Fehler los weil es dann evtl. schon eine ganze Weile her ist daß du das geändert hast und dich nicht mehr erinnerst.
Dann lieber ein Frontend Render Script. Ohne den Quellcode nach deiner Coreänderung zu kennen, vermute ich daß das Frontend Render Script das gleiche wie deine Coreänderung bewirkt.

Code: Select all

<?php
// -------------------------------------------------------------------------------------------
// obligate check for phpwcms constants
  if (!defined('PHPWCMS_ROOT')) {
    die("You Cannot Access This Script Directly, Have a Nice Day."); }
// -------------------------------------------------------------------------------------------

$content['all'] = str_replace('form id="phpwcmsForm1"', 'form novalidate id="phpwcmsForm1"', $content['all']);
Ergibt im Quellcode

Code: Select all

<form novalidate id="phpwcmsForm1".......>
Damit dürfte dann auch Oliver wieder besänftigt sein :wink: :mrgreen:

Wobei die id phpwcmsForm1 bei dir eine andere kann. Also vorher im Quellcode nachsehen was da gerendert wird sonst klappts natürlich nicht. Kannst du aber auch im BE im Feld Anker – Ziel sehen.
Ich habe das auf meinem Localhost getestet und das klappt bestens und es ist auf jeden Fall updatesicher.


Aber vielleicht kannst du mir nochmal auf die Sprünge helfen mit der Mindestlänge der Zeichen die in einem Formularfeld Pflicht sind.
Irgendwie bekomme ich es nicht mehr gebacken das richtig einzusetzen.
Ich will daß in einem Feld mindestens 3 Zeichen eingegeben werden müßen bevor es gesendet werden kann. Ich kriegs nicht mehr hin.....


Habe aber gerade noch das hier von dir gesehen.
santscho wrote: Sun 31. May 2020, 22:44

Code: Select all

[IF_ERROR:name]<small class="form-text text-muted">Name required!</small>[/IF_ERROR]


Die Fehlermeldung Name required! kannst du beim Formularfeld eingeben:

Image

Und im Template:

Code: Select all

[IF_ERROR:name]<small class="form-text text-muted">{ERROR:name}</small>[/IF_ERROR]
User avatar
Oliver Georgi
Site Admin
Posts: 9888
Joined: Fri 3. Oct 2003, 22:22
Contact:

Re: [ELSE] bei Formular?

Post by Oliver Georgi »

Ersetzer funktionieren am zuverlässigsten. Damit lässt sich fast alles nachträglich anpassen. Änderungen am Core sind unnötig.

Die vielen zusätzlichen Input-Attribute wie min/max werden nicht nativ unterstützt. Aber auch das wäre über Klassennamen und harten Ersetzer oder aber Regular Expression basierten Ersetzer zu lösen.
Oliver Georgi | phpwcms Developer | GitHub | LinkedIn | Систрон
User avatar
Uwe367
Posts: 1206
Joined: Sat 15. Sep 2007, 07:19
Location: Koblenz

Re: [ELSE] bei Formular?

Post by Uwe367 »

Oliver Georgi wrote: Mon 1. Jun 2020, 10:24 Die vielen zusätzlichen Input-Attribute wie min/max werden nicht nativ unterstützt.
Ich glaube aber mich zu erinnern daß das mal mit phpwcms umgesetzt wurde. Dazu mußte im Feld Wert etwas eingetragen werden, aber das ist so lange her daß ich nicht mehr weiß was es war oder ich irre gewaltig. Ich bin ziemlich sicher daß es mit einem regulären Ausdruck gelöst wurde. Ich mach mich mal auf die Suche....
User avatar
Oliver Georgi
Site Admin
Posts: 9888
Joined: Fri 3. Oct 2003, 22:22
Contact:

Re: [ELSE] bei Formular?

Post by Oliver Georgi »

Es geht über Text (spezial) und REGEX:
Bildschirmfoto 2020-06-01 um 11.31.33.png
Und für "nur Zahlen" und genau 3 lang: [0-9]{3,3}
Und für "nur Zahlen" und mindestens 3 lang: [0-9]{3,}
Oliver Georgi | phpwcms Developer | GitHub | LinkedIn | Систрон
Post Reply