Seite 1 von 1
einfache Codebox für Templatekonfiguration
Verfasst: Mi 17. Aug 2011, 23:27
von derSteffen
Hallo Community,
ich möchte eigentlich nur in der Templatekonfiguration ein Textarea haben, wo man per STRG+V seinen Code einfügt und dieser dann, bzw. das Ergebnis des Codes einfach auf der Webseite (bzw. im Editor und in der Vorschau) ausgegeben wird.
Generell ist es in meinen Fall für eine YouTube-Einbettung gedacht!
Es klappt an sich mit einfachen Wörtern etc, aber sobald besondere Zeichen vorkommen erhalte ich u.a. folgende Fehlermeldung Parse error: syntax error, unexpected T_STRING in /www/htdocs/xxx/contenido/external/backendedit/front_content.php(981) : eval()'d code on line 1700
Ich habe auch schon mit htmlspecialchars_decode oder urlencode oder html_entity_decode versucht, aber kein Erfolg.
Mein Input
Code: Alles auswählen
?><?php
echo '<table>';
echo '<tr><td colspan="2"><strong>'.mi18n("Bitte Code mit, u.a. STRG+V eingeben").'</strong></td></tr>';
echo '<tr><td>'.mi18n("Code").'</td><td><input type="text" name="'."CMS_VAR[1]".'" value="'.htmlentities("CMS_VALUE[1]").'" style="width: 520px; height:320px"></td></tr>';
echo '<tr><td colspan="2"><hr /></td></tr>';
echo '</table>';
?><?php
Mein Output
Code: Alles auswählen
<?php
if ("CMS_VALUE[1]" == "")
{
echo "";
}
else
if ("CMS_VALUE[1]" != "")
{
echo ''.("CMS_VALUE[1]").'';
};
?>
Kann mir jemand sagen, was daran falsch ist?! Werden denn die Zeichen beim Input umgewandelt? Der Code im Input sieht allerdings gut aus. Komisch ist auch, wenn ich den Output leer lasse, dass dann trotzdem die Fehlermeldung kommt.
Vielen Dank
MfG Steffen
Re: einfache Codebox für Templatekonfiguration
Verfasst: Do 18. Aug 2011, 08:53
von Oldperl
Hallo Steffen,
ich sehe hier nicht nur 1 Problem.
- CMS_VAR und CMS_VALUE sine keine normalen Variablen in PHP, sondern eine Art Platzhalter, daher kann man Sie auch nicht einfach so im PHP-Kontext nutzen. Es wird vielmehr empfohlen diese Angaben nach Möglichkeit einer PHP-Variablen zuzuordnen und dann diese in PHP zu nutzen.
- Einen value-Wert eines Inputfeldes kannst du an dieser Stelle nicht für das Speichern, also für das Schreiben in die DB, manipulieren
derSteffen hat geschrieben:Code: Alles auswählen
echo '<tr><td>'.mi18n("Code").'</td><td><input type="text" name="'."CMS_VAR[1]".'" value="'.htmlentities("CMS_VALUE[1]").'" style="width: 520px; height:320px"></td></tr>';
Du manipulierst hier nur den in das Feld einzutragenden und anzuzeigenden Wert.
- Und wenn du dann den zu speichernden Wert im Modul-Input manipulierst, solltest du auch die Manipulation im Output wieder rückganging machen. Dieses fehlt aber bei deinem Output komplett.
Gruß aus Franken
Ortwin
Re: einfache Codebox für Templatekonfiguration
Verfasst: Do 18. Aug 2011, 10:05
von Spider IT
Hallo Steffen,
generell ist es schon möglich, HTML-Code in der Konfiguration einzutragen, allerdings musst du dafür eine Kleinigkeit beachten.
Beim Speichern der eingetragenen Werte in die Datenbank setzt Contenido diese in doppelte Anführungszeichen und escaped leider keine enthaltenen doppelten Anführungszeichen.
Deshalb musst du im HTML-Code alle doppelten Anführungszeichen durch einfache Anführungszeichen ersetzen.
@Ortwin: Deine Empfehlung, die Contenido-"Platzhalter" nicht direkt im PHP-Kontext zu benutzen ist zwar korrekt, eine Anwendung wie im Code von Steffen funktioniert aber dennoch, also liegt es nicht daran.
Die Empfehlung wird erst dann zur Pflicht, wenn man per PHP-Variable auf diese Felder zugreifen möchte:
geht nicht,
schon.
Gruß
René
Re: einfache Codebox für Templatekonfiguration
Verfasst: Do 18. Aug 2011, 10:21
von Oldperl
Hallo René,
Spider IT hat geschrieben:@Ortwin: Deine Empfehlung, die Contenido-"Platzhalter" nicht direkt im PHP-Kontext zu benutzen ist zwar korrekt, eine Anwendung wie im Code von Steffen funktioniert aber dennoch, also liegt es nicht daran.
Diese Aussage ist für den von Steffen angegebenen Input-Code so nicht korrekt. Er manipuliert in seinem Falle nur den im Inputfeld als "vorgegebenen" Eintrag anzuzeigenden Inhalt. Ändert er diesen Text nun, oder füllt er ein leeres Feld mit seinen Inhalten, ob jetzt per Copy&Paste oder von Hand, wird eine Manipulation in der Form
Code: Alles auswählen
echo '<input... value="'.htmlentities("CMS_VALUE[1]").'">';
Keinen Einfluss auf den in der DB zu speichernden Code haben, zumindest beim 1. Speichern!!!
Erst beim nächsten Befüllen des Feldes aus der DB wird die Funktion angewendet und entsprechend das Feld gefüllt.
Eigentlich ist dieses Vorgehen sogar problematisch, da nun beim 2. Durchgang die so geänderten Inhalte gespeichert werden und beim 3. wieder neu, und so weiter und so weiter. Dieses kann je nach angewendeter PHP-Funktion schon recht problematisch werden (z.B. addslashes).
Gruß aus Franken
Ortwin
Re: einfache Codebox für Templatekonfiguration
Verfasst: Do 18. Aug 2011, 10:27
von Spider IT
Absolut korrekt, dagegen habe ich auch nichts gesagt.
Meine Aussage bezieht sich auf dein Problempunkt 1:
Oldperl hat geschrieben:
- CMS_VAR und CMS_VALUE sine keine normalen Variablen in PHP, sondern eine Art Platzhalter, daher kann man Sie auch nicht einfach so im PHP-Kontext nutzen. Es wird vielmehr empfohlen diese Angaben nach Möglichkeit einer PHP-Variablen zuzuordnen und dann diese in PHP zu nutzen.
Gruß
René
Re: einfache Codebox für Templatekonfiguration
Verfasst: Do 18. Aug 2011, 10:53
von derSteffen
Vielen Dank für eure Hinweise und Ansätze. Ich versuche mich mit den Infos und gucke mal ob ich es hinbekomme. Übrigens hat ein html_entity_decode im Output es auch nicht gebracht.
Ich werde es trotzdem mit Variablen versuchen, damit dieses Modul dann auch anderen Voraussetzungen stand hält und es auch andere nutzen wollen.
Abere ein Fage habe ich ... Das bedeute ich arbeite im Input dann gar nicht mit CMS_VALUE[1] oder CMS_VAR[1]? Aber wie wird dann der Code gespeichert?
MfG Steffen
Re: einfache Codebox für Templatekonfiguration
Verfasst: Do 18. Aug 2011, 11:04
von Spider IT
Da hast du wohl was falsch verstanden

Natürlich arbeitest du im Input-Bereich weiterhin mit CMS_VAR[] und CMS_VALUE[].
Was du nicht machen darfst, ist CMS_VALUE[] per PHP-Funktion abändern, denn dies ist der bereits gespeicherte Wert der dann anders angezeigt und demzufolge auch wieder anders gespeichert wird (jedes Mal).
Das andere ist, wenn du den gespeicherten Wert irgendwo nutzen willst (z.B. um beim select-Element die richtige Voreinstellung zu machen), solltest du den Wert aus CMS_VALUE[] in eine PHP-Variable kopieren und damit arbeiten:
Code: Alles auswählen
$SelectedElement = "CMS_VALUE[0]";
if ($Element == $SelectedElement) {
...
Gruß
René
Re: einfache Codebox für Templatekonfiguration
Verfasst: Do 18. Aug 2011, 11:26
von Oldperl
@Spider IT
Spider IT hat geschrieben:Meine Aussage bezieht sich auf dein Problempunkt 1:
Oldperl hat geschrieben:
- CMS_VAR und CMS_VALUE sine keine normalen Variablen in PHP, sondern eine Art Platzhalter, daher kann man Sie auch nicht einfach so im PHP-Kontext nutzen. Es wird vielmehr empfohlen diese Angaben nach Möglichkeit einer PHP-Variablen zuzuordnen und dann diese in PHP zu nutzen.
Wieso, diese Aussage ist doch korrekt, es sind keine "normalen" PHP-Var, daher auch die Empfehlung. Und wenn ich sie immer regulären PHP-Variablen zuweise, dann gehe ich gleich von Vornherein sämtlichen Problemen ähnlich dem von dir beschriebenen aus dem Weg. Daher auch die Empfehlung, mal davon abgesehen, das es eben auch nur eine Empfehlung ist.
Gruß aus Franken
Ortwin
Re: einfache Codebox für Templatekonfiguration
Verfasst: So 28. Aug 2011, 12:17
von derSteffen
Hallo,
also ich habe mich jetzt noch einmal veruscht. Eine Frage, ist denn mein Input auch scon falsch?
mein Problem sind glaube ich die doppelten Anführungszeichen aber mit ENT_COMPAT bekomme ich es auch nicht hin!
Mein Output habe ich wie folgt geändert
Code: Alles auswählen
<?php
$code = "CMS_VALUE[1]";
if ($code == "")
{
echo "";
}
else
if ($code != "")
{
echo ''.($code).'';
};
?>
MfG Steffen
Re: einfache Codebox für Templatekonfiguration
Verfasst: So 28. Aug 2011, 17:39
von Spider IT
Ich glaube fast, du hast es nicht richtig verstanden.
In der Konfiguration darfst du zwar HTML-Code einfügen, musst aber die doppelten Anführungszeichen durch einfache ersetzen.
Aus
musst du
machen.
Das hat mit der Programmierung nichts zu tun, in der Konfiguration dürfen einfach keine doppelten Anführungszeichen eingegeben werden.
Gruß
René