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

#1 21. April 2014 14:32

networker
hat von CMS/ms gehört
Registriert: 18. März 2014
Beiträge: 16

[GELÖST] FormBuilder Form und andere Form auf einer Seite -> crash!

Hallo,

ich weiß nicht mehr genau seit wann.
Wenn ein Formbuilder Form und ein anderes Form, zum Beispiel vom Newsletter oder Feedback auf einer Seite sind bekomme ich Fehler.
Mehrere Formbuilder Forms auf einer Seite sind ok.
Ist das bei Euch auch so? Oder mache ich etwas falsch?
Ich habe es auf einer frischen Installation getestet und betreffende Seiten crashen unverzüglich.

Vielen Dank!
Christian

Beitrag geändert von networker (21. April 2014 14:33)

Offline

#2 22. April 2014 07:21

antibart
Server-Pate
Registriert: 14. Dezember 2010
Beiträge: 880

Re: [GELÖST] FormBuilder Form und andere Form auf einer Seite -> crash!

Hallo,

nein - das Problem kenne ich nicht. Es wäre sinnvoll, wenn du die Fehlermeldungen hier posten würdest bzw. erläuterst, was du mit "crash" meinst.

Offline

#3 22. April 2014 13:08

networker
hat von CMS/ms gehört
Registriert: 18. März 2014
Beiträge: 16

Re: [GELÖST] FormBuilder Form und andere Form auf einer Seite -> crash!

Hi antibart, vielen Dank für die Hilfe!

zum besseren Verständnis habe ich hier ein Beispiel vorbereitet:
http://cmstest.digital-karl.de. Frische Installation, nur die Module installiert.
Die Forms solo funktionieren. NMS + Feeback auf einer Seite funktioniert auch.
FormBuilder Form mit NMS oder Feedback auf einer Seite bringen Fehler. Die HTML-Kopfangaben fehlen (DOCTYPE und HEAD) und unten sind die Fehlermeldungen.
Fatal error: Cannot use object of type stdClass as array in
.../tmp/templates_c/CGFeedback^6840b5651dab7e9b17dcd7fbf6eb5cf6f3ef625f.module_db_tpl.CGFeedback;commentform_Sample.php on line 159
Fatal error: Cannot use object of type stdClass as array in
.../lib/smarty/libs/sysplugins/smarty_internal_templatebase.php(151) : eval()'d code on line 159
Es ist egal, welche FormBuilder Form verwendet wird. 
An das Server-Log komme ich im Moment nicht heran.

Offline

#4 22. April 2014 13:39

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

Re: [GELÖST] FormBuilder Form und andere Form auf einer Seite -> crash!

Scheint so als würden da verschiedene Module im Template auf dieselbe Template-Variable zugreifen wollen, die jedoch je nach Modul ein anderer Variablen-Typ ist, als im jeweiligen Template erwartet wird.
Wie sehen denn die Formular-Templates der einzelnen Module aus?


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

#5 24. April 2014 11:04

networker
hat von CMS/ms gehört
Registriert: 18. März 2014
Beiträge: 16

Re: [GELÖST] FormBuilder Form und andere Form auf einer Seite -> crash!

Es sind die originalen Beispiel-Templates, die bei der Installation mitgeliefert werden. Welches man nimmt, spielt keine Rolle.
Übrigens: Wenn ich die Reihenfolge vertausche und den Fombuilder als zweites im Content habe, tritt kein Fehler auf.
Mein Horizont ist einfach zu schmal, um das debuggen zu können.  sad

Offline

#6 25. April 2014 04:53

antibart
Server-Pate
Registriert: 14. Dezember 2010
Beiträge: 880

Re: [GELÖST] FormBuilder Form und andere Form auf einer Seite -> crash!

Nur mal so ins Blaue...

Kann es sein, dass es an identischer action und/oder submit-Namen liegt?

Offline

#7 04. Mai 2014 15:04

networker
hat von CMS/ms gehört
Registriert: 18. März 2014
Beiträge: 16

Re: [GELÖST] FormBuilder Form und andere Form auf einer Seite -> crash!

Ich habe das Layout so geändert, dass es nicht mehr auftritt.

Offline

#8 05. Mai 2014 08:24

Cherry
arbeitet mit CMS/ms
Registriert: 15. Dezember 2010
Beiträge: 529

Re: [GELÖST] FormBuilder Form und andere Form auf einer Seite -> crash!

Worin bestand denn das Problem? Was verursachte den Crash? Würde mich interessieren worauf man achten muß, damit es nicht crasht.

Offline

#9 05. Mai 2014 14:15

networker
hat von CMS/ms gehört
Registriert: 18. März 2014
Beiträge: 16

Re: [GELÖST] FormBuilder Form und andere Form auf einer Seite -> crash!

In meinem Layout ist in der Fußzeile das Anmeldeformular für den Newsletter {NMS}.
Auf vielen Seiten ist das Formular für CGFeedback oben direkt unter dem Content. -Alles ok-

Kommt aber noch ein Formbuilder-Formular dazu werden Fehler ausgegeben (siehe oben: Type mismatch Klasse und Array). Ich konnte nicht genau debuggen. Irgendwo in der Template-Validierung tritt der Fehler auf.

Also: Mehrere Formbuilder-Forms auf einer Seite sind ok.
CGFeedback- und NMS- Forms auf einer Seite sind ok.
Zuerst ein Formbuilder-Form und dann CGFeedback und/oder NMS bringen Fehler.
Kurios: Kommt das Formbuilder-Formular nach CGFeedback und/oder NMS, tritt kein Fehler auf.

(Alle betroffenen Projekte laufen beim gleichen Provider. )
Hier kann man sich das ansehen. cmstest.digital-karl.de

Offline

#10 06. Mai 2014 09:20

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

Re: [GELÖST] FormBuilder Form und andere Form auf einer Seite -> crash!

Es ist wie ich mir dachte: Die beiden Module kommen sich mit ihren Variablen in die Quere.

Das Formular beim FormBuilder besteht ja aus mehreren selbst definierten Input-Feldern. Diese Felder sind im Formular-Template über die Template-Variable {$fields} verfügbar. {$fields} ist ein Array. Jeder Eintrag in diesem Array (also jedes Input-Feld des Formulars) ist vom Typ her ein Objekt. Demzufolge greift man im FormBuilder Formular-Template (in der foreach-Schleife) mit {$entry-> ... } auf die einzelnen Eigenschaften der Input-Felder zu.

Beim CGFeedBack-Formular sind die Felder schon vorgegeben. Man kann aber zusätzlich benutzerdefinierte Felder anlegen. Diese benutzerdefinierten Felder sind im CGFeedBack Formular-Template ebenfalls über die Template-Variable {$fields} verfügbar. {$fields} ist auch hier ein Array. Allerdings ist jeder Eintrag in diesem Array kein Objekt sondern wiederum ein Array. Demzufolge greift man im CGFeedBack Formular-Template (in der foreach-Schleife) mit {$field.name} etc. auf die Eigenschaften der Felder zu.

Wenn man jetzt zuerst den FormBuilder aufruft, dann übergibt er seine Felder an Smarty. Demzufolge existiert im Formular-Template eine Variable {$fields} welche Objekte enthält.

Wenn man anschließend CGFeedBack aufruft, aber keine benutzerdefinierten Felder definiert hat, passiert folgendes: CGFeedBack übergibt seine benutzerdefinierten Felder nicht an Smarty (anstelle z.B. ein leeres Array zu verwenden). D.h. die Variable {$fields} des FormBuilders wird nicht überschrieben/gelöscht. Und das wiederum bedeutet, dass sie im CGFeedBack Formular-Template immer noch in der Form existiert, wie sie ursprünglich für den FormBuilder gedacht war.

Im CGFeedBack Formular-Template wird jedoch lediglich geprüft, ob die Variable {$fields} existiert. Wenn ja, dann sollen die vermeintlich benutzerdefinierten Felder des CGFeedBack Moduls angezeigt werden. Dabei greift man allerdings auf die FormBuilder-Felder (Objekte) zu und behandelt diese wie ein Array.

Lösung: Im CGFeedBack Formular-Template in der foreach-Schleife für die benutzerdefinierten Felder bei jedem Feld prüfen, ob es ein Array ist:

{* custom fields *}
  {if isset($fields)}
    {foreach from=$fields key='fieldid' item='field'}


      {if !is_array($field)}{continue}{/if}


      {$_id="{$actionid}field_{$fieldid}"}
    <div class="row">
      <div class="col-md-4 text-right">
        <label for="{$_id}">{$field.name}:</label>
      </div>
      <div class="col-md-8">
        {if $field.type == 0 or $field.type == 1 }
          <input type="text" name="{$actionid}field_{$fieldid}" value="{$field.value|default:''}" size="{$field.attrib.length}" maxlength="{$field.attrib.maxlength}"/>
        {elseif $field.type == 2}
          {cge_textarea wysiwyg=$field.attrib.usewysiwyg|default:0 rows=3 id="{$_id}" name="{$actionid}field_{$fieldid}" value=$field.value|default:''}
        {elseif $field.type == 3}
          <select name="{$actionid}field_{$fieldid}">
            {html_options options=$field.attrib.options selected="{$field.value}"}
          </select>
        {elseif $field.type == 4}
          <select multiple="multiple" size="4" name="{$actionid}field_{$fieldid}[]">
            {html_options options=$field.attrib.options selected="{$field.value}"}
          </select>
	{elseif isset($field.input)}
          {$field.input}
        {/if}
      </div>
    </div>
    {/foreach}
  {/if}

ODER: Wenn im CGFeedBack Modul generell keine benutzerdefinierten Felder verwendet werden, den Teil einfach löschen.

NMS hab ich jetzt nicht getestet, aber die Lösung dürfte die gleiche sein.


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

#11 12. Mai 2014 08:04

networker
hat von CMS/ms gehört
Registriert: 18. März 2014
Beiträge: 16

Re: [GELÖST] FormBuilder Form und andere Form auf einer Seite -> crash!

Vielen Dank für diese ausführliche Lösung. Es funktioniert auch mit anderen Modulen so.

Offline