Variablen-Platzhalter erscheint im HTML-Code

Fragen zur Installation von CONTENIDO 4.10? Probleme bei der Konfiguration? Hinweise oder Fragen zur Entwicklung des Systemes oder zur Sicherheit?
Antworten
bodil
Beiträge: 340
Registriert: Fr 7. Okt 2011, 04:10
Kontaktdaten:

Variablen-Platzhalter erscheint im HTML-Code

Beitrag von bodil » Fr 3. Mai 2019, 08:06

Guten Morgen!
Ich habe ein kleines Modul gebaut, mit dem es in der Konfiguration eines Artikels möglich sein soll, einem Artikel zusätzliche css-Styles zur Verfügung zu stellen. Das sieht so aus:

Input:

Code: Alles auswählen

$var = "CMS_VAR[1]";
$val = "CMS_VALUE[1]";
?>
<h2>Zusätzliche CSS-Styles</h2><p>nur für diese Seite:</p>
<textarea style="width:100%;height:100px" name="<?php echo $var; ?>"><?php echo $val; ?></textarea>
<?php
Output:

Code: Alles auswählen

<?php
$styles = "CMS_VALUE[1]";
echo '<style>' .  $styles . '</style>';
?>
Wenn ich jetzt ein Template auswähle, das dieses Modul benutzt, wird mir die Textarea leer angezeigt. Das Template wird automatisch gespeichert.
Im HTML-Code steht dann

Code: Alles auswählen

<style>CMS_VALUE[1]</style>
Erst wenn ich die Konfiguration ein weiteres mal speicher, wird die Variable als leer angezeigt:

Code: Alles auswählen

<style></style>
Mach ich da was falsch? Oder ist das ein Bug?

Viele Grüße aus dem hohen Norden!
Bodil

Oldperl
Beiträge: 4250
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Re: Variablen-Platzhalter erscheint im HTML-Code

Beitrag von Oldperl » So 5. Mai 2019, 14:28

Servus,

tippe auf Bug der Ersetzungsfunktion. :roll:

Gruß aus Franken

Ortwin
ConLite 2.1, alternatives und stabiles Update von Contenido 4.8.x unter PHP 7.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

McHubi
Beiträge: 1209
Registriert: Do 18. Nov 2004, 23:06
Wohnort: Mettmann
Kontaktdaten:

Re: Variablen-Platzhalter erscheint im HTML-Code

Beitrag von McHubi » Mi 8. Mai 2019, 14:24

Nimm im Input mal

Code: Alles auswählen

echo '<textarea name="CMS_VAR[1]">CMS_VALUE[1]</textarea>';
seamless-design.de
"Geht nicht!" wohnt in der "Will nicht!"-Strasse.

Das Handbuch zur Version 4.10: CONTENIDO für Einsteiger (4.10)

Das Handbuch zur Version 4.9: CONTENIDO für Einsteiger (4.9)

bodil
Beiträge: 340
Registriert: Fr 7. Okt 2011, 04:10
Kontaktdaten:

Re: Variablen-Platzhalter erscheint im HTML-Code

Beitrag von bodil » Fr 20. Sep 2019, 09:43

Oldperl hat geschrieben:
So 5. Mai 2019, 14:28
tippe auf Bug der Ersetzungsfunktion. :roll:
Hast du einen Tipp, wo die aufgerufen wird?

Oldperl
Beiträge: 4250
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Re: Variablen-Platzhalter erscheint im HTML-Code

Beitrag von Oldperl » Fr 20. Sep 2019, 10:18

Servus,

wenn ich mich richtig erinnere wird das in 4.9 und 4.10 in den Klasse des Code-Generators (contenido/classes/code_generator) gemacht. Als Einstiegspunkt zum tracen in einer IDE bietet sich dabei das Frontend in contenido/includes/frontend an.
Was mir gerade noch beim Lesen einfiel, es könnte auch am Caching liegen, dass die Variable erst beim zweiten Speichern korrekt gesetzt wird.

Gruß aus Franken

Ortwin
ConLite 2.1, alternatives und stabiles Update von Contenido 4.8.x unter PHP 7.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

bodil
Beiträge: 340
Registriert: Fr 7. Okt 2011, 04:10
Kontaktdaten:

Re: Variablen-Platzhalter erscheint im HTML-Code

Beitrag von bodil » Fr 20. Sep 2019, 14:19

Da mach ich mich mal auf die Suche! Dankeschön!

McHubi
Beiträge: 1209
Registriert: Do 18. Nov 2004, 23:06
Wohnort: Mettmann
Kontaktdaten:

Re: Variablen-Platzhalter erscheint im HTML-Code

Beitrag von McHubi » Fr 20. Sep 2019, 20:04

Hallo Bodil
hast Du meinen Vorschlag mal ausprobiert? Das funktioniert nämlich normalerweise einwandfrei. Bevor Du Dich also wer weiß wo eingräbst in punkto Bugs und Ersetzungsfunktion... :wink:
seamless-design.de
"Geht nicht!" wohnt in der "Will nicht!"-Strasse.

Das Handbuch zur Version 4.10: CONTENIDO für Einsteiger (4.10)

Das Handbuch zur Version 4.9: CONTENIDO für Einsteiger (4.9)

bodil
Beiträge: 340
Registriert: Fr 7. Okt 2011, 04:10
Kontaktdaten:

Re: Variablen-Platzhalter erscheint im HTML-Code

Beitrag von bodil » Sa 21. Sep 2019, 19:43

Hi McHubi!
Nein, das habe ich noch nicht ausprobiert. Es trifft auch nicht wirklich mein Problem. Ich habe in vielen Projekten Variablen auf den Konfigurationsseiten benutzt. Dort habe ich immer die Möglichkeit berücksichtigt, dass die Variable nicht gesetzt ist und somit leer sein könnte. Auch wenn kein Template gewählt war und das (unkonfigurierte) Standardtemplate der Kategorie eingesetzt wurde, war die Variable leer und ich konnte damit umgehen.
Jetzt ist es so, dass die Variable nicht mehr leer ist, sondern z. B. CMS_VALUE[15] drinsteht. Ich müsste also in JEDEM Modul, das irgendwie die Eingabe eines Wertes im Konfigbereich erwartet, zusätzlich auswerten, ob da nicht vielleicht eine Zeichenkette (%CMS_VALUE/[\d+/]%) steht, die darauf hindeutet, dass hier eigentlich nichts steht. Da halte ich es für zielführender, das im System zu beheben und dann eine korrigierte Datei hochzuladen.
Davon, dass ich die Art der Eingabe ändere, ändert sich ja nichts an den Seiten, die kein Template gewählt haben und deshalb das (unkonfigurierte) Standardtemplate nutzen.
Grüße!
Bodil

bodil
Beiträge: 340
Registriert: Fr 7. Okt 2011, 04:10
Kontaktdaten:

Re: Variablen-Platzhalter erscheint im HTML-Code

Beitrag von bodil » Sa 21. Sep 2019, 20:52

Ich glaube, ich habs!
In der Datei contenido/classes/code_generator/class.code.generator.standard.php steht ab Zeile 161:

Code: Alles auswählen

                if (isset($containerConfigurations[$containerNr])) {
                    $containerCmsValues = $this->_processCmsValueTags($containerNr, $containerConfigurations[$containerNr]);
                } else {
                    $containerCmsValues = '';
                }
Das sollte so nicht sein. In der Methode _processCmsValueTags werden ungesetzte Variablen gelöscht. Daher muss sie auch dann aufgerufen werden, wenn $containerConfigurations[$containerNr] nicht gesetzt ist. M.E. nach wäre stattdessen richtig:

Code: Alles auswählen

                $containerCmsValues = $this->_processCmsValueTags($containerNr, $containerConfigurations[$containerNr]);
Und ja, ich würde sagen, das ist ein Bug.
Grüße aus dem hohen Norden!
Bodil
Zuletzt geändert von bodil am Fr 15. Nov 2019, 11:25, insgesamt 1-mal geändert.

McHubi
Beiträge: 1209
Registriert: Do 18. Nov 2004, 23:06
Wohnort: Mettmann
Kontaktdaten:

Re: Variablen-Platzhalter erscheint im HTML-Code

Beitrag von McHubi » Sa 21. Sep 2019, 22:50

Hallo Bodil,
Jetzt ist es so, dass die Variable nicht mehr leer ist, sondern z. B. CMS_VALUE[15] drinsteht.
Ah! Dein eigentliches Problem wurde - mir zumindest - erst Durch Dein ergänzendes Posting auf meine Nachfrage hin wirklich deutlich. Sei's drum... :wink:

Mit dem Problem, dass CMS_VALUE[n] statt "nichts" angezeigt wird, stehst Du jedenfalls nicht alleine da. Das kenne ich allerdings auch gar nicht anders, sprich, es existiert schon "ewig".
Ich glaube, ich habs!
Hört sich gut an! :D
Danke Dir!
seamless-design.de
"Geht nicht!" wohnt in der "Will nicht!"-Strasse.

Das Handbuch zur Version 4.10: CONTENIDO für Einsteiger (4.10)

Das Handbuch zur Version 4.9: CONTENIDO für Einsteiger (4.9)

Oldperl
Beiträge: 4250
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Re: Variablen-Platzhalter erscheint im HTML-Code

Beitrag von Oldperl » Mo 23. Sep 2019, 13:29

Servus,
bodil hat geschrieben:
Sa 21. Sep 2019, 20:52
... M.E. nach wäre stattdessen richtig:

Code: Alles auswählen

                $containerCmsValues = $this->_processCmsValueTags($containerNr, $containerConfigurations[$containerNr]);
Nein, das ist ein bisserl anders gehändelt, darum bitte diesen Vorschlag so nicht übernehmen.
bodil hat geschrieben:
Sa 21. Sep 2019, 20:52
Und ja, ich würde sagen, das ist ein Bug.
Dem kann ich mich aber anschließen. Auch ich würde sagen es ist ein Bug.
Zum fixen muss man sich aber besagtes Handling nochmals etwas genauer anschauen und gegebenenfalls die Klassenmethoden etwas anpassen bzw. umbauen.

Dabei ist mir in der gleichen Datei dann auch noch das hier

Code: Alles auswählen

// CON-1536 strip comments from module code
                // regex is not enough to correctly remove comments
                // use php_strip_whitespace instead of writing own parser
                // downside: php_strip_whitespace requires a file as parameter
                $tmpFile = dirname(cRegistry::getBackendPath()) . '/' . $cfg['path']['temp'] . uniqid('code_gen_') . '.php';
                if (cFileHandler::exists(dirname($tmpFile))
                    && cFileHandler::readable(dirname($tmpFile))
                    && cFileHandler::writeable(dirname($tmpFile))) {
                    if (false !== cFileHandler::write($tmpFile, $this->_moduleCode)) {
                        $this->_moduleCode = php_strip_whitespace($tmpFile);

                        // delete file
                        cFileHandler::remove($tmpFile);
                    }
                }
ins Auge gefallen. Um Modulcode von Whitespaces und Kommentaren zu bereinigen, wird hier für jede eingelesene Moduldatei eine temporäre Datei angelegt und diese dann per PHP-Funktion php_strip_whitespace() wieder eingelesen. Performance-technisch ist das aber, bei vielen Modulen, wohl nicht die beste Lösung. Auch hier sollte nochmal ein Auge drauf geworfen werden.

Gruß aus Franken

Ortwin
ConLite 2.1, alternatives und stabiles Update von Contenido 4.8.x unter PHP 7.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

Leo
Beiträge: 308
Registriert: Mi 19. Apr 2006, 19:26
Kontaktdaten:

Re: Variablen-Platzhalter erscheint im HTML-Code

Beitrag von Leo » Do 9. Jan 2020, 00:00

Hallo Contenido-Gemeinde,

ein gesundes neues Jahr!

Zu diesem Post-Eintrag: Die Lösung von bodil ist doch nicht sauber, wenn ich Oldperl verstanden habe, siehe Link:

viewtopic.php?p=180276#p180276

Gibt es dafür eine richtige Lösung oder Ansatz?

Vielen Dank vorab!

VG
Leonhard

xmurrix
Beiträge: 3143
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: Variablen-Platzhalter erscheint im HTML-Code

Beitrag von xmurrix » Fr 10. Jan 2020, 15:17

Hallo Leo,
Leo hat geschrieben:
Do 9. Jan 2020, 00:00
...Gibt es dafür eine richtige Lösung oder Ansatz?...
der Modulcode ist meiner Meinung nach auch dann zu parsen, wenn es keine Konfiguration zu CMS-Variablen gibt. Daher sollte folgender Code in contenido/classes/code_generator/class.code.generator.standard.php das Problem lösen:

Code: Alles auswählen

if (isset($containerConfigurations[$containerNr])) {
    $containerCmsValues = $this->_processCmsValueTags($containerNr, $containerConfigurations[$containerNr]);
} else {
    $containerCmsValues = $this->_processCmsValueTags($containerNr, '');
}
Es ist etwas anders als in viewtopic.php?f=115&t=43565#p180276 beschrieben, denn ein Zugriff auf nicht vorhandene Listeninhalte quitiert PHP mit einem Fehler.

Ich erstelle dazu mal ein Ticket unter https://github.com/CONTENIDO/CONTENIDO

Gruß
xmurrix
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.

Leo
Beiträge: 308
Registriert: Mi 19. Apr 2006, 19:26
Kontaktdaten:

Re: Variablen-Platzhalter erscheint im HTML-Code

Beitrag von Leo » Fr 10. Jan 2020, 15:45

Vielen Dank!

Ich probiere es aus und werde berichten. :D

Schönes Wochenende

VG
Leo

Antworten