Page 9 of 10

Re: Advancedform_XH

Posted: Tue Jul 01, 2014 12:22 pm
by isometric
cmb wrote:Nein nicht wirklich, da die Eingabefelder selbst dort nicht manipuliert werden können. Im Prinzip sollte es nicht schwer sein, Advancedform_XH anzupassen, um placeholder auszugeben. Allerdings müssten die entsprechenden Text irgendwo definiert werden, und diese Info dürfte bei Advancedform_XH nicht leicht ergänzbar sein. Ich habe schon vor, Advancedform_XH auch diesbezüglich zu überarbeiten, aber das wird noch dauern, da anderes auf meiner Prioritätsliste höher steht.

Ein Workaround wäre allerdings per Vorlagendatei und JavaScript möglich. Wenn Dir das fürs erste genügen würde, schau ich mir das gerne mal genauer an.
Ich habe als Workaround die Funktion "Advancedform_displayField" kopiert und dort folgende Änderungen vorgenommen:

Code: Select all

function Advancedform_displayField_Placeholder($form_id, $field, $placeholder)
{ 	$placeholder = $placeholder;
.
.
.
und ganz am Ende:

Code: Select all

$o .= tag(
                'input type="' . $type . '" placeholder="' . $placeholder . '" id="' . $id . '" name="' . $name
                . '"' . $value . $accept . $size . $maxlen
            );
wenn ich jetzt über eine Vorlagendatei, in der ich die Funktion "Advancedform_displayField_Placeholder" mit einem Wert aufrufe, dann wird das entsprechende Feld wie gewünscht belegt. Wenn du in meinem Code keinen Fehler siehst, würde mir das als Workaround vollkommen ausreichen.

Code: Select all

<?php echo Advancedform_displayField_Placeholder('Contact', 'Name', 'BlaTest')?>
cmb wrote:Allerdings ist der Text auch nicht wirklich zum Lesen gedacht, sondern zum Kopieren in die Zwischenablage, so dass man ihn dann auf einer Seite einfügen kann. Da werde ich mir für Advancedform_XH 2 aber eine Verbesserung einfallen lassen.
Aber wenn ich den Text kopieren will, muss ich ihn doch erst mal lesen ;)

Edit:
cmb wrote: Ersetzte function Advancedform_toolForm() in plugins/advancedform/admin.php durch folgende:
Das klappt noch nicht so ganz, bei "Button wird zwar ein "title" eingefügt, aber zwischen den Anführungszeichen steht nichts.

Code: Select all

<button title="{$ptx['tool_' . $name]}">$icon</button>
wenn als Test ich den Code zwischen den"{" "}" durch einen String ersetze, dann wird dieser angezeigt.

Re: Advancedform_XH

Posted: Tue Jul 01, 2014 1:29 pm
by cmb
isometric wrote:Ich habe als Workaround die Funktion "Advancedform_displayField" kopiert und dort folgende Änderungen vorgenommen:
Das ist eine clevere Idee! :)
isometric wrote:Wenn du in meinem Code keinen Fehler siehst, würde mir das als Workaround vollkommen ausreichen.
Soweit ich es überblicken kann (die function Advancedform_displayField() is grausig programmiert! :oops:), müsste das passen, wenn Du die Platzhalter nur für normale Inputs brauchst (Textareas werden weiter oben behandelt, und müssten ggf. angepasst werden).

Eine Kleinigkeit: wenn der $placeholder besondere HTML Zeichen enthält (wie <, > oder &), dann gäbe es Probleme. Entweder Du maskierst diese Zeichen bereits beim Aufruf der Funktion (also als <, > bzw. &), oder Du verwendest folgendes:

Code: Select all

$o .= tag(
                'input type="' . $type . '" placeholder="' . Advancedform_hsc($placeholder) . '" id="' . $id . '" name="' . $name
                . '"' . $value . $accept . $size . $maxlen
            ); 
isometric wrote:Aber wenn ich den Text kopieren will, muss ich ihn doch erst mal lesen
Na ja, nicht wirklich. Man muss eigentlich nur sehen, dass da etwas steht, und Anfang und Ende erkennen. Irgendwie ist aber die Wahl von "xx-small" bzw."small" nicht das beste, was diverse Templates angeht. Hat das Template nämlich schon eine kleine Schrift, dann wird alles winzig. Bei anderen Plugins habe ich diese Pluginaufrufe in Input-Felder geschrieben, was den Vorteil hat, dass man die Breite des Input-Felds klein halten kann, und als Nebeneffekt, dass der kopierte Inhalt im Quellcodeeditor ohne weiteres direkt eingefügt werden kann (könnte, so wie es bei Advancedform_XH ist, problematisch sein). Ich schau mal, ob ich eine Änderung nicht doch noch in einem Patch-Release veröffentliche.
isometric wrote:Das klappt noch nicht so ganz, bei "Button wird zwar ein "title" eingefügt, aber zwischen den Anführungszeichen steht nichts.
Hast Du die gesamte Funktion ersetzt, und nicht nur das Ende? Zu Beginn sind nämlich diesbezüglich zwei wichtige Stellen:

Code: Select all

    global $_XH_csrfProtection, $plugin_tx;

    $ptx = $plugin_tx['advancedform'];
Fehlt eine davon, dann bleibt das title Attribut leer (und im Debug-Modus wird eine entsprechende Meldung angezeigt).

Re: Advancedform_XH

Posted: Wed Jul 02, 2014 6:21 am
by isometric
cmb wrote:Hast Du die gesamte Funktion ersetzt, und nicht nur das Ende? Zu Beginn sind nämlich diesbezüglich zwei wichtige Stellen:

Code: Select all

    global $_XH_csrfProtection, $plugin_tx;

    $ptx = $plugin_tx['advancedform']; 
Fehlt eine davon, dann bleibt das title Attribut leer (und im Debug-Modus wird eine entsprechende Meldung angezeigt).
Ich hatte zuerst die gesamte Funktion rein kopiert. Und da steckte dann der Fehler im Detail: in den Originaldateien ist der Zeilenumbruch ein "LF" und durch das kopieren ist da irgendwie ein "CR LF" reingerutscht :shock: , was zu einem Fehler im Code geführt hat. Danach habe ich dann zeilenweise kopiert, aber halt nicht alles.

Dank deiner Hilfe läuft jetzt aber alles. :)

Re: Advancedform_XH

Posted: Wed Jul 02, 2014 9:02 am
by isometric
cmb wrote:
isometric wrote:Ich habe als Workaround die Funktion "Advancedform_displayField" kopiert und dort folgende Änderungen vorgenommen:
Das ist eine clevere Idee! :)
Leider war die Idee doch nicht ganz so gut:

Code: Select all

$o .= tag(
                'input type="' . $type . '" placeholder="' . Advancedform_hsc($placeholder) . '" id="' . $id . '" name="' . $name
                . '"' . $value . $accept . $size . $maxlen
            ); 
sobald ich einen Wert für Placeholder in das Input-Feld übergebe, kommt bei der abschließenden Prüfung vor dem Versenden des Formulares die Fehlermeldung, dass in dieses Feld kein Wert eingetragen wurde. Na ja, dann warte ich halt, bis die Funktion so richtig implementiert ist ......

Re: Advancedform_XH

Posted: Wed Jul 02, 2014 10:21 am
by cmb
isometric wrote:Ich hatte zuerst die gesamte Funktion rein kopiert. Und da steckte dann der Fehler im Detail: in den Originaldateien ist der Zeilenumbruch ein "LF" und durch das kopieren ist da irgendwie ein "CR LF" reingerutscht , was zu einem Fehler im Code geführt hat.
Hm, das Mischen von LF und CRLF ist zwar nicht optimal, aber normalerweise kein wirkliches Problem. Es kann allerdings sein, dass Dein Editor (ist, glaube ich, Notepad++) da meckert. Allerdings sollte der Editor eine Möglichkeit bieten, die Zeilenumbüche in das gewünschte Format zu wandeln.
isometric wrote:sobald ich einen Wert für Placeholder in das Input-Feld übergebe, kommt bei der abschließenden Prüfung vor dem Versenden des Formulares die Fehlermeldung, dass in dieses Feld kein Wert eingetragen wurde.
Das ist normal. Der Placeholder ist nicht als Vorgabewert gedacht, sondern dazu um einen Hinweis zu geben, was in das entsprechende Feld eingegben werden soll. Bei einem Feld "Name", könnte da z.B. stehen: "Geben Sie Ihren vollen Namen ein."

Kann es sein, dass Du eigentlich gar keinen Placeholder willst, sondern eine Vorbelegung des Feldwertes? Das wird bereits von Advancedform_XH unterstützt, und kann im Eigenschaftsdialog des jeweiligen Feldes im Formulareditor eingetragen werden.

Re: Advancedform_XH

Posted: Wed Jul 02, 2014 10:51 am
by isometric
cmb wrote:
isometric wrote:sobald ich einen Wert für Placeholder in das Input-Feld übergebe, kommt bei der abschließenden Prüfung vor dem Versenden des Formulares die Fehlermeldung, dass in dieses Feld kein Wert eingetragen wurde.
Das ist normal. Der Placeholder ist nicht als Vorgabewert gedacht, sondern dazu um einen Hinweis zu geben, was in das entsprechende Feld eingegben werden soll. Bei einem Feld "Name", könnte da z.B. stehen: "Geben Sie Ihren vollen Namen ein."

Kann es sein, dass Du eigentlich gar keinen Placeholder willst, sondern eine Vorbelegung des Feldwertes? Das wird bereits von Advancedform_XH unterstützt, und kann im Eigenschaftsdialog des jeweiligen Feldes im Formulareditor eingetragen werden.
Ich meine schon den Hinweistext, der leicht angegraut im Eingabefeld steht, wenn das leere Formular angezeigt wird:
[ external image ]

Dann gebe ich etwas ein "Name" und "xxx@xxx.de"
[ external image ]

und wenn ich das Formular abschicke, dann kommt die Fehlermeldung:
[ external image ]

Das ist der Code, der im Formular drin steht:

Code: Select all

<input placeholder="Vor- und Nachname" id="advfrm-Contact-N" name="advfrm-N" value="" size="N" type="text">
Der Fehler ist reproduzierbar, auch wenn ich z.B. im E-Mail-Feld einen Placeholder übergebe, wird dieses Feld von der Fehlerprüfung als nicht ausgefüllt erkannt.

Edit: Ergänzung:
wenn ich in die TPL-Datei den Code aus dem Handbuch eingebe
Eine Vorlagen-Datei ist prinzipiell eine PHP-Datei mit einer Erweiterung der Syntax:

<?field FELD_NAME?>

gibt das Feld mit dem Namen FELD_NAME aus. Verwenden Sie keine weiteren Zeichen wie Leerzeichen außer einem einzigen Leerzeichen zwischen field und FELD_NAME. Diese Notation ist eigentlich eine Abkürzung für

<?php echo Advancedform_displayField('FORMULAR_NAME', 'FELD_NAME')?>

Code: Select all

<div class="field"><?php echo Advancedform_displayField('Contact_short', 'Name')?></div>
kommt übrigens derselbe Fehler heraus:

Code: Select all

<input type="text" size="N" value="test" name="advfrm-N" id="advfrm-Contact_short-N">
Die Kurzform in der TPL-Datei:

Code: Select all

<div class="field"><?field Name?></div>
erzeugt dagegen folgenden HTML-Code im Formular:

Code: Select all

<input type="text" value="" name="advfrm-Name" id="advfrm-Contact_short-Name">

Re: Advancedform_XH

Posted: Wed Jul 02, 2014 12:15 pm
by cmb
Ja, in der Tat ist die Dokumentation fehlerhaft! Es muss nämlich nicht der Name des Feldes, sondern ein Array mit entsprechenden Werten übergeben werden. Diesen Bug werde ich zeitnah beheben.

Wie das Problem nun gelöst werden kann? Derzeit schwebt mir vor, die besondere Syntax zu erweitern:

Code: Select all

<?field FELD_NAME (PLATZHALTER)?>
Ich schau mir das nachher mal näher an, und melde mich dann wieder.

PS: Ich habe das mal so umgesetzt. Die Lösung erfordert allerdings mindestens PHP 5.3 (ein Workaround für ältere PHP-Versionen wäre wohl sehr häßlich). Download der mofizierten advfrm.php.

Re: Advancedform_XH

Posted: Thu Jul 03, 2014 2:10 pm
by isometric
Bei mir klappt es nicht .....

Ich habe alles neu heruntergeladen und neu installiert:
PHP Version: 5.3.27
Installierte CMSimple Version: CMSimple_XH 1.6.2 Released: 2014-05-22
  • neues CMSimple_XH 1.62
  • neues Plugin Advancedform_XH
Anschließend habe ich im Standard-Template eine neue CSS und TPL-Datei für das Formular "Contact" erzeugt. Sobald ich in die TPL-Datei etwas eingebe, wird das Formular nicht mehr richtig erzeugt.

Code: Select all

div class="field"><?field Phone Test?></div>
ergibt nur noch:

Code: Select all

	<div><div class="advfrm-mailform">
<form name="Contact" action="/_cmsclean/?Kontakt" method="post" enctype="multipart/form-data" accept-charset="UTF-8">
<input type="hidden" name="advfrm" value="Contact">
<div class="required">Bitte füllen Sie alle erforderlichen Felder&nbsp;<span style="color:red">*</span> aus!</div>
<div class="buttons"><input type="submit" class="submit" value="Mail versenden">&nbsp;<input type="reset" class="submit" value="Formular zurücksetzen"></div>
</form>
</div>
</div>
definiere ich als Test aber die Variable "$placeholder" direkt in der Funktion:

Code: Select all

function Advancedform_displayField($form_id, $field, $placeholder = '')
{
    global $pth, $plugin_cf, $hjs;
  $placeholder ="Test";
wird das Formular wie erwartet erzeugt:

Code: Select all

<div><div class="advfrm-mailform">
<form name="Contact" action="/_cmsclean/?Kontakt" method="post" enctype="multipart/form-data" accept-charset="UTF-8">
<input type="hidden" name="advfrm" value="Contact">
<div class="required">Bitte füllen Sie alle erforderlichen Felder&nbsp;<span style="color:red">*</span> aus!</div>
<div id="advfrm-Contact">
    <div class="break">
    <div class="label"><label for="advfrm-Contact-Name">Name&nbsp;<span style="color:red">*</span></label></div>
    <div class="field"><input placeholder="Test" type="text" id="advfrm-Contact-Name" name="advfrm-Name" value=""></div>
  </div>
  <div class="break">
    <div class="label"><label for="advfrm-Contact-E_Mail">E-Mail&nbsp;<span style="color:red">*</span></label></div>
    <div class="field"><input placeholder="Test" type="text" id="advfrm-Contact-E_Mail" name="advfrm-E_Mail" value=""></div>
  </div>
  <div class="break">
    <div class="label"><label for="advfrm-Contact-Phone">Phone</label></div>
    <div class="field"><input placeholder="Test" type="text" id="advfrm-Contact-Phone" name="advfrm-Phone" value=""></div>
  </div>
  <div class="break">
    <div class="label"><label for="advfrm-Contact-Comment">Comment&nbsp;<span style="color:red">*</span></label></div>
    <div class="field"><textarea id="advfrm-Contact-Comment" name="advfrm-Comment" cols="40" rows="4"></textarea></div>
  </div>
  <div class="break">
    <div class="label"><label for="advfrm-Contact-File_Info"></label></div>
    <div class="field"><strong>You <em>can</em> attach a file, if you want.</strong></div>
  </div>
  <div class="break">
    <div class="label"><label for="advfrm-Contact-Attachment">Attachment</label></div>
    <div class="field"><input type="hidden" name="MAX_FILE_SIZE" value="100000"><input placeholder="Test" type="file" id="advfrm-Contact-Attachment" name="advfrm-Attachment" accept=".jpeg,.jpg,.png,.zip"></div>
  </div>
  <div class="break">
    <div class="label"><label for="advfrm-Contact-Password_Info"></label></div>
    <div class="field">If you send a password protected zip file, please specify the password here:</div>
  </div>
  <div class="break">
    <div class="label"><label for="advfrm-Contact-Password">Password</label></div>
    <div class="field"><input placeholder="Test" type="password" id="advfrm-Contact-Password" name="advfrm-Password" value=""></div>
  </div>
  <div class="break">
    <div class="label"><label for="advfrm-Contact-Date">Date</label></div>
    <div class="field"><input placeholder="Test" type="text" id="advfrm-Contact-Date" name="advfrm-Date" value=""></div>
  </div>
  <div class="break">
    <div class="label"><label for="advfrm-Contact-Cust_No_Info"></label></div>
    <div class="field"></div>
  </div>
  <div class="break">
    <div class="label"></div>
    <div class="field"><input placeholder="Test" type="hidden" id="advfrm-Contact-Hidden" name="advfrm-Hidden" value="This is a hidden field!"></div>
  </div>
  <div class="break"></div>
</div>
<div class="buttons"><input type="submit" class="submit" value="Mail versenden">&nbsp;<input type="reset" class="submit" value="Formular zurücksetzen"></div>
</form>
</div>

Re: Advancedform_XH

Posted: Thu Jul 03, 2014 2:24 pm
by cmb
isometric wrote:neues Plugin Advancedform_XH
Okay. Aber die Anpassung ist da nicht enthalten. Du muss http://3-magi.net/downloads/advfrm.zip herunter laden, entpacken und die Datei nach plugins/advancedform/ hochladen. Ich glaube aber fast, dass Du das gemacht hast.
isometric wrote:

Code: Select all

div class="field"><?field Phone Test?></div>
Ah, hier liegt wohl das Problem: der Platzhalter muss eingeklammert werden, also:

Code: Select all

div class="field"><?field Phone (Test)?></div>

Re: Advancedform_XH

Posted: Thu Jul 03, 2014 2:43 pm
by isometric
Die geänderte Datei hatte ich heruntergeladen, und nachdem ich den Text für den Placeholder in Klammern gesetzt habe klappt es :D

Vielen Dank für die Super-Lösung.

Ich bastle jetzt mal ein Kontaktformular mit Platzhaltern und ein paar CSS-Verschönerungen, wenn du möchtest kann ich dir die Dateien dann mal schicken, vielleicht kannst du es als Beispiel verwenden.