CMS_PIFAFORM generateViewCode()

Fragen zur Installation von CONTENIDO 4.10? Probleme bei der Konfiguration? Hinweise oder Fragen zur Entwicklung des Systemes oder zur Sicherheit?
Antworten
chris8408
Beiträge: 87
Registriert: So 2. Apr 2006, 19:07
Wohnort: Korschenbroich
Kontaktdaten:

CMS_PIFAFORM generateViewCode()

Beitrag von chris8408 » Di 31. Mai 2022, 14:31

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
--------------------------------------------
Christian John aus Korschenbroich bei Düsseldorf (https://www.john-softwareentwicklung.de)
Selbständiger Web-Entwickler
“There are 10 types of people in the world… those that understand binary and those that don’t.”

emergence
Beiträge: 10641
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Re: CMS_PIFAFORM generateViewCode()

Beitrag von emergence » Mi 1. Jun 2022, 09:46

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...
*** make your own tools (wishlist :: thx)

emergence
Beiträge: 10641
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Re: CMS_PIFAFORM generateViewCode()

Beitrag von emergence » Mi 1. Jun 2022, 14:16

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(); \')."';
*** make your own tools (wishlist :: thx)

chris8408
Beiträge: 87
Registriert: So 2. Apr 2006, 19:07
Wohnort: Korschenbroich
Kontaktdaten:

Re: CMS_PIFAFORM generateViewCode()

Beitrag von chris8408 » Do 2. Jun 2022, 07:24

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
--------------------------------------------
Christian John aus Korschenbroich bei Düsseldorf (https://www.john-softwareentwicklung.de)
Selbständiger Web-Entwickler
“There are 10 types of people in the world… those that understand binary and those that don’t.”

Antworten