Tinymce-Plugin einbinden (php ausführen)

Gesperrt
Wolle
Beiträge: 5
Registriert: Fr 14. Okt 2011, 08:27
Kontaktdaten:

Tinymce-Plugin einbinden (php ausführen)

Beitrag von Wolle » Fr 14. Okt 2011, 09:58

Hallo,

als Contenido-Anfänger brauche ich etwas Unterstützung. Ich möchte das Plugin codeprotect in Tinymce einbinden (http://sourceforge.net/tracker/?func=de ... tid=738747). Das Plugin soll im Editor eingegebenen php-Code ausführbar machen. Hintergrund ist, dass ich in Abhängigkeit von bestimmten url-Parametern variable Texte einbinden möchte, und zwar im fließenden Text. Eine Einbindung per Modul ist daher nur schwer möglich, da ich dann für jeden Absatz, der den variablen Text enthält, mehrere Module erstellen müsste.

Ich habe das Plugin also in den Plugin-Ordner von Tinymce geladen und in den Systemeinstellungen gemäß techref/backend/backend.customizing.html eingetragen (tinymce / plugins / codeprotect). Es funktioniert aber nicht. Muss ich also noch etwas anderes beachten?

Oder alternativ: Gibt es eine andere Lösung, einen im Editor eingegeben php-Code ausführbar zu machen?

Für lösungsorientierte Antworten bin ich Euch sehr dankbar ;-)

Viele Grüße
Wolfram

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

Re: Tinymce-Plugin einbinden (php ausführen)

Beitrag von xmurrix » Fr 14. Okt 2011, 10:43

Hallo Wolfram,

willkommen im CONTENIDO-Forum.

Das TinyMCE Plugin könnte ein Problem darstellen, da man dadurch jedem Backenduser, der Artikel editieren kann, eine Möglichkeit gibt, PHP Code einzubinden, also auch Usern, die nicht erfahren genug sind.

Du kannst aber den HTML-Code der Seite, vor der Ausgabe an den Client abfangen und manipulieren. Siehe ein Beispiel dazu unter:
http://forum.contenido.org/viewtopic.php?f=64&t=22487

Oder du machst das jeweils in der Modulausgabe, wo CMS_HTML, CMS_HEAD, usw... ausgegeben wird:

Code: Alles auswählen

<?php
$cmsHtml = "CMS_HTML[0]";
echo str_replace("find", "replace", $cmsHtml);
Das geht dann im Editor z. B. mit einem eigenen Marker "###FOOBAR###" der dann entsprechend ersetzt wird. Backenduser können somit keinen Schaden anrichten.

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.

Wolle
Beiträge: 5
Registriert: Fr 14. Okt 2011, 08:27
Kontaktdaten:

Re: Tinymce-Plugin einbinden (php ausführen)

Beitrag von Wolle » Fr 14. Okt 2011, 12:03

Prima, danke, die zweite Version hat geklappt.

Dabei hat sich aber das Problem ergeben, dass der Marker auch im Editor beim erneuten Aufrufen durch den variablen Text ersetzt wird. Folge: Bei Textänderungen muss man vor dem Speichern jedes mal den Marker wieder einfügen, weil man sonst den variablen Text speichert.

Kann man das irgendwie verhindern?

Grüße
Wolfram

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

Re: Tinymce-Plugin einbinden (php ausführen)

Beitrag von xmurrix » Fr 14. Okt 2011, 12:16

In der Modulausgabe kann man das dann folgendermaßen steuern:

Code: Alles auswählen

<?php
$cmsHtml = "CMS_HTML[0]";
if (!isset($contenido) && !isset($edit)) {
    // nicht im backend und editor
    $cmsHtml = str_replace("find", "replace", $cmsHtml);
}
echo $cmsHtml;
...
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.

Wolle
Beiträge: 5
Registriert: Fr 14. Okt 2011, 08:27
Kontaktdaten:

Re: Tinymce-Plugin einbinden (php ausführen)

Beitrag von Wolle » Fr 14. Okt 2011, 12:38

Hmm, wenn ich Deinen Vorschlag ausprobiert habe, hat es den betroffenen Content-Bereich nicht mehr auf der Homepage angezeigt (im Editor schon).

So sieht das insgesamt aus:

Code: Alles auswählen

<?php

$ort = $_GET['ort'];

if($ort == "x0")
 {
$tel = "12345";
} 

elseif($ort == "x1")
 {
$tel = "23456";
} 

else {
$tel = "34567";
} 

$cmsHtml = "CMS_HTML[1]";
if (!isset($contenido) && !isset($edit)) {
    // nicht im backend und editor
    $cmsHtml = str_replace("#tel#", "$tel", $cmsHtml);
}
echo $cmsHtml;

if (!isset($tpl) || !is_object($tpl)) {
    $tpl = new Template();
}

$tpl->reset();

?>
Wo ist der Fehler?...

Grüße
Wolfram

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

Re: Tinymce-Plugin einbinden (php ausführen)

Beitrag von xmurrix » Fr 14. Okt 2011, 13:03

Es kann auch sein, dass es folgendermaßen sein muss:

Code: Alles auswählen

if ($contenido && $edit) {
    // nicht im backend und editor
    $cmsHtml = str_replace("#tel#", "$tel", $cmsHtml);
}
echo $cmsHtml;
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.

Wolle
Beiträge: 5
Registriert: Fr 14. Okt 2011, 08:27
Kontaktdaten:

Re: Tinymce-Plugin einbinden (php ausführen)

Beitrag von Wolle » Fr 14. Okt 2011, 13:46

Hallo xmurrix,

Bei Deinem letzte Vorschlag wurde der Marker im Klartext ausgegeben, also nicht ersetzt.

Habe es jetzt aber so hinbekommen (man beachte die beiden || im Code):

Code: Alles auswählen

$cmsHtml = "CMS_HTML[1]";
if (!isset($contenido) || !isset($edit)) {
    // nicht im backend und editor
    $cmsHtml = str_replace("#tel#", "$tel", $cmsHtml);
}
echo $cmsHtml;
Vielen Dank!

Grüße
Wolfram

kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Re: Tinymce-Plugin einbinden (php ausführen)

Beitrag von kummer » Fr 14. Okt 2011, 16:13

das hier...

Code: Alles auswählen

!isset($contenido) || !isset($edit)
und das...

Code: Alles auswählen

$contenido && $edit
müsste eigentlich dasselbe resultat geben. wüde ich jetzt so prima vista meinen.

mit diesem verfahren kannst du natürlich nur statische ersetzungen machen. also platzhalter durch werte ersetzen. und so wie vorgeschlagen auch nur genau in dem dazu vorgesehenen plugin. besser wäre es wohl, wenn du die ersetzung nach der rendering-phase vornehmen würdest. dann kannst du das in jeder ausgabe verwenden, ohne jedes modul anpassen zu müssen. und noch etwas weiter gedacht, könntest du mit einer zeichenfolge spezifische module ausführen lassen und deren ausgabe anstelle des platzhalters ausgeben.
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)

Gesperrt