Neuigkeiten:

moziloCMS verwendet Cookies. Wenn Sie auf unserer Seite weitersurfen, stimmen Sie der Cookie-Nutzung zu Datenschutzerklärung
moziloCMS Layouts
moziloCMS Plugins

Hauptmenü

PHP-Code in Inhaltsseiten ohne eval einsetzen

Begonnen von vop, 03. Dezember 2009, 10:36:01

« vorheriges - nächstes »

vop

Hi Leute
Ich bin ein neuer Anwender von moziloCMS und schätze die Einfachheit sehr. Als Programmierer interessierte es mich sehr, PHP im CMS benutzen zu können.
Allerdings hatte ich ein wenig Bauchschmerzen mit eval().
Um nun nicht die gesamte PHP-Welt zu eröffnen, bin ich folgenden Weg gegangen. In der Syntax.php habe ich, anstatt den Block
    elseif ($attribute == "php") {
                // Formatierungen rckg?gig machen, um den reinen PHP-Code zu erhalten!
                $value = preg_replace("/&#(d*);/Umsie", "''.chr('\1').''", $value);
                $value = preg_replace("/\/Umsi", "\", $value);
                $value = preg_replace("/$/Umsi", "$", $value);
                $value = html_entity_decode($value);
                $content = str_replace ("$match", eval($value), $content);
            }
*/
auszukommentieren folgendes getan.
Erstens
Vor der Klassendefinition von Syntax, binde ich eine eigene usercode.php ein:
require_once("usercode.php");

class Syntax {
 .....  
Zweitens ich füge eine eigenerVerarbeitung für usercode nach dem PHP-Block ein:

   elseif ($attribute == "usercode"){
                // Formatierungen rckgügig machen, um den reinen PHP-Code zu erhalten!
                $value = preg_replace("/&#(d*);/Umsie", "''.chr('\1').''", $value);
                $value = preg_replace("/\/Umsi", "\", $value);
                $value = preg_replace("/$/Umsi", "$", $value);
                $value = html_entity_decode($value);
$usercode = new UserCode();
$content = $usercode->replaceContent("$match", "$value", $content);                
   }
Drittens ich verwende meine eigene usercode.php, die gewünschte Funktionalität zur Verfügung stellt.
Simples Beispiel:
<?php
/* 
*  Autor: Volker Paul
*  Für spezielle Ersetzungen, ohne PHP generell freischalten zu müssen
*/
class UserCode {
  function 
UserCode() {
    
// Im Konstruktor beliebige interne Objekte initialisieren etc.
  
}

  function 
Summe($params)
  {
    
// eine kleine interne Funktion
    
$ergebnis 0;
    for (
$i=1$i<count($params); $i++)
    {
      
$ergebnis += $params[$i];
    };
    return 
$ergebnis;
  }

  function 
replaceContent($usermatch$uservalue$usercontent) {
   
// Diese Funktion wird von Syntax.php aufgerufen
  // Eine kleine Implementierung:
    
$params split("|",$uservalue);
    
$funktion $params[0];
    if ( 
$funktion == 'Summe' )
    {
      
$ersetzung $this->Summe($params);
    }
    elseif (
$funktion == 'Datum' )
    {
      
$ersetzung date("d.m.Y");
    };

   
// Hier die Ersetzung durchführen
    
$userhelp str_replace ("$usermatch"$ersetzung$usercontent);
   
// und Ergebnis übermitteln
    
return $userhelp;
  }
}
?>

Wie genau die Funktionen in usercode aussehen, bleibt dabei jedem selbst überlassen. Allein die Funktion replaceContent muß definiert werden und die nötige Ersetzung zurückliefern.
Damit läßt sich in usercode alles machen, ohne, dass sämtlich PHP-Funktionalität im CMS erlaubt ist. Nur was explizit in usercode quasi als Schnittstelle angegeben ist, kann auch ausgeführt werden.
In meinem kleinen Beispiel könnte ich so z.B. [usercode|Summe|3|4|5] oder [usercode|Datum] verwenden.
Durch entsprechende usercode.php-Dateien läßt sich alles weitere ermöglichen.
Ich hoffe, auch jemand anderem geholfen zu haben

azett

#1
Hey und willkommen im Supportforum :)

Danke für den Hack! Du baust damit faktisch schon die Pluginschnittstelle ein, die mit 1.12 Einzug ins CMS halten wird. Ab dann kann man eigene Logik ganz ohne Anpassungen am Originalcode nutzen - bis dahin tut dein Hack einen guten Job :)

vop

#2
Ok. Dann freue ich mich ja schon auf 1.12. :D

Wann sollte die nochmal rauskommen? :?:

azett

#3
Im ersten Quartal 2010. Genauer kann ichs noch nicht sagen, wir arbeiten noch an einigen Details ;)

glhsman

#4
Hallo zusammen.
Mich würde auch interessieren, wann das plugin verfügbar sein wird.
Denn ich habe ein Problem mit einem Link, der zwingend einen php-code enthalten muß.
Hier das Beispiel, um was es geht:

<a href="ftp://<?php echo $_SERVER['SERVER_NAME']; ?>:21" target="_blank">hier klicken</a>

Zweck ist der Aufruf der Browser internen FTP-Funtion auf meinem Homeserver. Die Linkadresse ist dabei unterschiedlich, jenachdem ob man vom lokalen Netzwerk, oder übers Internet (DynDNS IP) auf die Homepage gekommen ist.

Ich sehe sonst leider keinen anderen Weg, außer 2 seperate Links anzubieten. Aber das ist für meine Familie und Freunde zu kompliziert und man kann sich sehr leicht verklicken.

Oder gibts einen einfacheren Weg, der mit nur nicht einfällt? Wäre für Tipps dankbar.
LG Frank
mozilo CMS 1.12beta2 auf FreeNAS-Homeserver

str

#5
Meinst Du etwas in der Art

<a href="ftp://{ServerName}:21" target="_blank">hier klicken</a>

Wenn ja, schau Dir mal das Plugin an. Ist kein PHP Wrapper Plugin oder sonst irgenwas  ;)  Es gibt einfach nur den Servernamen aus  :D

Gruss
Stefan

glhsman

#6
Danke dir.
Ich werde es mal testen und werde dann berichten.

LG Frank
mozilo CMS 1.12beta2 auf FreeNAS-Homeserver

glhsman

#7
Edit:

Habs eben getestet. Es kommt zwar der korrekte Link heraus. Aber der wird als fehlerhaft gekennzeichnet und läßt sich nicht anklicken. Der eigentlich richtige Link ist rot-durchgestrichen. Schade!
mozilo CMS 1.12beta2 auf FreeNAS-Homeserver

str

#8
Habe eben mal ein bisschen probiert. Als Benutzerdefinierte Syntax folgendes hinzufügen:
ftplink = <a href="ftp://{VALUE}:21" target="_blank">hier klicken</a>Auf der Seite dann folgendes eintragen:
[ftplink|{ServerName}]Gruss
Stefan

glhsman

#9
Habe es auch hinbekommen, allerdings anders. Dein Plugin funktioniert, wenn man statt der mozilo-syntax, den TinyMCE-Editor nutzt. Unter LINK bearbeiten/einfügen schreibt man zB folgendes:
ftp://{ServerName}:21

Danke übrigens für das tolle Plugin!


Unter dem normalem cms-syntax klappt es out of the box nicht.
Deine neue Variante mit dem eigenem Syntax werde ich aber auch mal probieren.

PS: Weiß jemand zufällig wie man unter dem TinyMCE die Plugins einbindet?
mozilo CMS 1.12beta2 auf FreeNAS-Homeserver

m4ddy

#10
ZitatPS: Weiß jemand zufällig wie man unter dem TinyMCE die Plugins einbindet?

hi,
meinst du als bbcode, bzw als Button, der über das Menu genutzt werden kann?
Dazu gibt es ein Beispielplugin im Plugin-verzeichnis, da kann man sich die Funktion zumindest grundlegend anschauen. Leider hatte ich nicht den Eindruck, dass es sehr gut dokumentiert ist. schau da am besten mal rein.

Ich hoffe das hilft dir schonmal weiter.

Gruß
m4ddy
There are 10 sorts of people. Those who understand binary and those who don\'t.