Seite 1 von 1

CMS_PIFAFORM generateViewCode()

Verfasst: Di 31. Mai 2022, 14:31
von chris8408
Hallo,

ich arbeite in einem Modul mit der dynamische Erzeugung von CMS_TYPEs mittels der cTypeGenerator-Klasse und der Funktion getGeneratedCmsTag.

Bei den Standard-Typen wie CMS_HTML, CMS_TEXT usw. funktioniert es tadelslos. Ich stoße jedoch beim PIFA-Plugin bzw. beim Type CMS_PIFAFORM an grenzen. Der Code wird nicht korrekt erzeugt sondern gibt wiederum einen PHP-Teil zurück, der ein anscheinend einen echo-Befehl ändert etwas ausführt und dann wieder PHP Echo aufruft. Das funktioniert dann nur, wenn der Code mit eval ausgeführt würde. Mit der Verwendung innerhalb von Variablen ist dann Schluss.

Ich habe mich dann bis zur Datei plugins/form_assistant/classes/class.content.type.pifa_form.php durchgearbeitet und dort die generateViewCode()-Funktion gefunden.

Code: Alles auswählen

        $code = '";?' . '><' . '?php $form = new %s(\'%s\', %s, %s); echo $form->buildCode(); ?' . '><' . '?php echo "';
        $code = sprintf($code, get_class($this), $this->_rawSettings, $this->_id, '[]');
        return $code;
Diese erzeugt oben beschriebene Ausgabe/Verhaltensweise.

Andere CMS_Typen verwenden einen etwas anderen Code. Ich habe obige Zeilen in folgendes abgeändert:

Code: Alles auswählen

        $classObject = get_class($this);
        $form = new $classObject($this->_rawSettings, $this->_id, []);
        return $form->buildCode(); 
Dies scheint bisher zu funktionieren. In der Funktionsbeschreibung steht, dass der Code gecached wird. Meine Frage in die Runde, gibt es mit der abgeänderten Variante Probleme beim Caching, da ich hier noch nicht ganz durchgestiegen bin? Oder kann ich entsprechende Funktionsänderung so belassen? Gibt es Gründe, warum der PHP-Befehlssatz so verwendet wurde, wie er verwendet wurde?

Christian

Re: CMS_PIFAFORM generateViewCode()

Verfasst: Mi 1. Jun 2022, 09:46
von emergence
ja, das wirkt sich aus... verändert man die PIFA Form im nachhinein, müsste man den artikel neu erzeugen...
da dort ja eine version vor der änderung bereits generiert wurde...

Re: CMS_PIFAFORM generateViewCode()

Verfasst: Mi 1. Jun 2022, 14:16
von emergence
einen versuch wert wäre es anstelle von

Code: Alles auswählen

$code = '";?' . '><' . '?php $form = new %s(\'%s\', %s, %s); echo $form->buildCode(); ?' . '><' . '?php echo "';
folgendes zu testen (bei den quotes bin ich mir nicht sicher...)

Code: Alles auswählen

$code = '".eval(\' $form = new %s(\\'%s\\', %s, %s); return $form->buildCode(); \')."';
oder so

Code: Alles auswählen

$code = '".eval(\' $form = new %s(\\\'%s\\\', %s, %s); return $form->buildCode(); \')."';

Re: CMS_PIFAFORM generateViewCode()

Verfasst: Do 2. Jun 2022, 07:24
von chris8408
Guten Morgen,

danke fürs Feedback. Ich schaue mir das mal an und prüfe mal die Auswirkungen wenn der Cache aktiviert ist bzw. nicht.

Ich leite in meinem Fall die erzeugten CMS_Types dynamisch in Smarty-Templates weiter. Ich sehe aktuell noch keinen nennenswerten Unterschied, wenn ich die Funktionen mit bzw ohne eval() ausführe. Erzeugt das eval doch dynamisch die Form. Ich habe bestimmt aber heute morgen noch Tomaten auf den Augen ;)

Ich melde mich. Danke schonmal,

Christian