einfache Codebox für Templatekonfiguration

Gesperrt
derSteffen
Beiträge: 847
Registriert: Mi 14. Dez 2005, 16:15
Wohnort: Königs Wusterhausen bei Berlin
Kontaktdaten:

einfache Codebox für Templatekonfiguration

Beitrag 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
Oldperl
Beiträge: 4316
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Hat sich bedankt: 6 Mal
Danksagung erhalten: 4 Mal
Kontaktdaten:

Re: einfache Codebox für Templatekonfiguration

Beitrag von Oldperl »

Hallo Steffen,

ich sehe hier nicht nur 1 Problem.
  1. 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.
  2. 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.
  3. 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
ConLite 3.0.0-dev, alternatives und stabiles Update von Contenido 4.8.x unter PHP 8.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog
Spider IT
Beiträge: 1416
Registriert: Fr 3. Dez 2004, 10:15

Re: einfache Codebox für Templatekonfiguration

Beitrag 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:

Code: Alles auswählen

$x = "CMS_VALUE[($i + 1)]";
geht nicht,

Code: Alles auswählen

$j = ($i + 1);
$x = "CMS_VALUE[$j]";
schon.

Gruß
René
Oldperl
Beiträge: 4316
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Hat sich bedankt: 6 Mal
Danksagung erhalten: 4 Mal
Kontaktdaten:

Re: einfache Codebox für Templatekonfiguration

Beitrag 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
ConLite 3.0.0-dev, alternatives und stabiles Update von Contenido 4.8.x unter PHP 8.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog
Spider IT
Beiträge: 1416
Registriert: Fr 3. Dez 2004, 10:15

Re: einfache Codebox für Templatekonfiguration

Beitrag von Spider IT »

Absolut korrekt, dagegen habe ich auch nichts gesagt.
Meine Aussage bezieht sich auf dein Problempunkt 1:
Oldperl hat geschrieben:
  1. 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é
derSteffen
Beiträge: 847
Registriert: Mi 14. Dez 2005, 16:15
Wohnort: Königs Wusterhausen bei Berlin
Kontaktdaten:

Re: einfache Codebox für Templatekonfiguration

Beitrag 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
Spider IT
Beiträge: 1416
Registriert: Fr 3. Dez 2004, 10:15

Re: einfache Codebox für Templatekonfiguration

Beitrag 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é
Oldperl
Beiträge: 4316
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Hat sich bedankt: 6 Mal
Danksagung erhalten: 4 Mal
Kontaktdaten:

Re: einfache Codebox für Templatekonfiguration

Beitrag von Oldperl »

@Spider IT
Spider IT hat geschrieben:Meine Aussage bezieht sich auf dein Problempunkt 1:
Oldperl hat geschrieben:
  1. 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
ConLite 3.0.0-dev, alternatives und stabiles Update von Contenido 4.8.x unter PHP 8.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog
derSteffen
Beiträge: 847
Registriert: Mi 14. Dez 2005, 16:15
Wohnort: Königs Wusterhausen bei Berlin
Kontaktdaten:

Re: einfache Codebox für Templatekonfiguration

Beitrag 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
Spider IT
Beiträge: 1416
Registriert: Fr 3. Dez 2004, 10:15

Re: einfache Codebox für Templatekonfiguration

Beitrag 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

Code: Alles auswählen

<div id="Test">Dies ist ein Test</div>
musst du

Code: Alles auswählen

<div id='Test'>Dies ist ein Test</div>
machen.
Das hat mit der Programmierung nichts zu tun, in der Konfiguration dürfen einfach keine doppelten Anführungszeichen eingegeben werden.

Gruß
René
Gesperrt