tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
4
ZUGRIFFE
664
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Kamephis Kamephis ist offline Mitglied Bronze
    Registriert seit
    Mar 2004
    Beiträge
    36
    Hallo zusammen,

    Vorweg eine Erklärung des Zusammenhangs.

    Ich habe ein Templatesystem gebastelt, bei dem sowohl die Inhalte & Bildurls, als auch die Templates in einer MySQL-Datenbank gespeichert werden.

    Ich möchte im Template erst die Größe von Thumbnails für Bilder festlegen können, also keine vorgenerierten Thumbs hinterlegen müssen, weil mir eine Standardgröße einfach nichts bringt.

    Eine Funktion mit dem kreativen namen content($pageid) ruf zunächst alle Inhalt aus der DB ab und speichert diese in den entsprechenden Variablen.
    Also z.B. $ltext1, $ltext2 $stext1 usw.
    Oder für bilder eben $pic1 usw.

    Sind alle nötigen Inhaltsvariablen befüllt, lese ich das Template aus der DB.
    PHP-Code:
    $resulttemplate mysql_query("SELECT * FROM $content_templates WHERE id = '$data[templateid]' LIMIT 1");
    while (
    $datatemplate mysql_fetch_array($resulttemplate)) {
       eval(
    "\$code .= \"$datatemplate[code]\";");

    Damit sind wir schon am Ende der Funktion, $code wird - natürlich nach mehr durchläufen, wenn mehr Templates benutzt wurden - per return zurückgegeben.

    Soweit funktioniert das auch wie vorgesehen, ich kann HTML- oder Javascript-Code (ohne doppelte Anführungszeichen, ok...) und die Variablen normal benutzen und alles wird ersetzt.


    Mein Problem:
    ich möchte es ermöglichen, das im Template meine PHP-Funktion createthumb benutzt werden kann, um bei folgendem Codeschnipsel nicht auf vorgenerierte Thumbnails einer Standardgröße zurückgreifen zu müssen.

    HTML-Code:
    <a href="Javascript:FotoWindow('img/mannschaftsfotos/f1.jpg','532','398');">
    <img src="img/thumbs/newsh267.jpg" style="border-color: rgb(0, 0, 0);" 
    alt="Klicken zum Vergrößern" border="1" height="97" vspace="6" width="130">
    </a>
    Bei folgendem:
    PHP-Code:
    eval("\$code .= \"$datatemplate[code]\";"); 
    wirden anscheinend nur die $irgendwas ersetzt, aber keine Funktionen ausgeführt.

    Aus den Kommentaren bei Eval auf php.net hab ich folgendes:

    PHP-Code:
    eval("?>".$string); 
    Wenn ich das mache, muss ich aber im Template so etwas schreiben:
    PHP-Code:
    <a href="Javascript:FotoWindow('<?php echo $pic1?>','<?php echo $pic1w?>','<?php echo $pic1h?>');">
    <img src="<?php echo createthumb($pic1,'200','pic1thumb.jpg'); ?>
    style="border-color: rgb(0, 0, 0);" alt="Klicken zum Vergrößern" 
    border="1" vspace="6" width="200"></a>
    Wenn ich im Template ganz normalen PHP-Code benutzen muss, ist das nicht mehr wirklich sinnvoll finde ich...

    Eine Möglichkeit wäre natürlich, während ich die Templates eingebe gesondert die Größe der Thumbnails festzulegen und in eine MySQL-Tabelle zu speichern. Wenn ich (bzw. jemand von euch) keine andere Idee hat, wird mir wohl oder übel nichts anderes übrig bleiben.

    Also: hat jemand eine Idee, wie ich das lösen kann? Bin für jede Hilfe sehr dankbar.

    Gruß
    Sven
     

  2. #2
    Avatar von EvilO
    EvilO EvilO ist offline Mitglied Gold
    Registriert seit
    Feb 2004
    Ort
    Wuppertal (NRW)
    Beiträge
    172
    Hi, ich finde du solltest deinen Template Ansatz überdenken, es ist nicht allzu sinnvoll mit eval() zu arbeiten und, wenn Inhalte vom Benutzer kommen können, auch sehr gefährlich. Ich würde an deiner Stelle das Template in der Datenbank als normalen HTML code speichern und dabei die Stellen, die du später ersetzen willst durch Platzhalter kennzeichnen, also z:B. {platzhalter1}, {platzhalter2}, usw...

    Wenn du dann dein Template aus der Datenbank in eine Variable geladen hast, z.B. $tpl, dann kannst du doch sehr einfach mittels str_replace() die Platzhalter durch die passenden Werte ersetzen.

    Deine Template sähe dann z.B. so aus:
    HTML-Code:
    <a href="javascript:FotoWindow('{pic}','{pic_width}','{pic_height}');"> 
    <img src="{pic_thumb}"  
    style="border-color: rgb(0, 0, 0);" alt="Klicken zum Vergrößern"  
    border="1" vspace="6" width="200"></a>
    Wenn du jetzt sagen wir mal die Bild URL einsetzen willst sieht das in PHP ungefähr so aus

    PHP-Code:
    $tpl ' ... '// Dein Template kommt hier rein

    $tpl str_replace('{pic}'' * DEINE BILD URL * '$tpl
    Geändert von EvilO (01.03.07 um 21:04 Uhr)
     
    "Die Deutsche Rechtschreibung ist Freeware, dass heisst jeder kann sie benutzen wann er will, ohne dafür zu zahlen. Sie ist aber nicht Open Source, also darf sie ohne Zustimmung der Entwickler nicht verändert und weiterverbreitet werden."

  3. #3
    Kamephis Kamephis ist offline Mitglied Bronze
    Registriert seit
    Mar 2004
    Beiträge
    36
    Erstmal danke für die Antwort.

    Das löst aber, so weit ich das sehen kann, nicht mein Problem, dass ich im Template die Größe des im Moment der Ausgabe neu zu erstellenden Thumbnails festlegen kann, oder?

    Ich denke eigentlich nicht, dass ein Sicherheitsrisiko besteht, die Templates werden nur von uns Seitenerstellern bzw. Admins eingegeben, die Benutzer, die Inhalte bearbeiten können haben auf diesen Teil keinen Zugriff. Die Inhalte, die aus der Datenbank kommen werden von mir natürlich entsprechend behandelt, damit da kein html und garnichts benutzt werden kann.
     

  4. #4
    Avatar von EvilO
    EvilO EvilO ist offline Mitglied Gold
    Registriert seit
    Feb 2004
    Ort
    Wuppertal (NRW)
    Beiträge
    172
    Das Problem mit der Thumbnailgröße löst das nicht, aber das könntest du z.B. über eine zusätzliche Spalte in deiner Datenbanktabelle lösen, in der du die Größe speicherst, natürlich nur, wenn alle Thumbnails im Template gleich groß sein sollen, sonst wird es mit Sicherheit deutlich schwieriger...
     
    "Die Deutsche Rechtschreibung ist Freeware, dass heisst jeder kann sie benutzen wann er will, ohne dafür zu zahlen. Sie ist aber nicht Open Source, also darf sie ohne Zustimmung der Entwickler nicht verändert und weiterverbreitet werden."

  5. #5
    Kamephis Kamephis ist offline Mitglied Bronze
    Registriert seit
    Mar 2004
    Beiträge
    36
    Es sollen im Template beliebig viele, beliebig große Thumbnails möglich sein... Werde dann wohl - zumindest erstmal - wirklich über
    PHP-Code:
    eval("?>".$string); 
    erstmal in HTML-Mode wechseln und dann eben nicht bloß $irgendwas zum ersetzen benutzen können, sondern <? echo $irgendwas; ?> benutzen müssen...
    Wenn ich wieder mehr Zeit habe, muss ich dann eben eine extra Tabelle für die Thumbnailgrößen anlegen :/. Passt mir zwar eigentlich nicht, aber geht ja leider anscheinend nicht anders...

    Oki, trotzdem danke fürs Mitüberlegen!
     

Ähnliche Themen

  1. Funktion wird nicht ausgeführt?
    Von xamunrax im Forum Javascript & Ajax
    Antworten: 1
    Letzter Beitrag: 31.01.09, 22:59
  2. Funktion wird nicht ausgeführt
    Von Raxxor im Forum Javascript & Ajax
    Antworten: 0
    Letzter Beitrag: 05.07.08, 16:25
  3. Funktion wird nicht richtig ausgeführt
    Von RehW im Forum Javascript & Ajax
    Antworten: 3
    Letzter Beitrag: 29.06.06, 11:27
  4. Funktion wird nicht ausgeführt
    Von Dolphon im Forum PHP
    Antworten: 6
    Letzter Beitrag: 06.04.06, 23:09
  5. onsubmit-Funktion wird nicht ausgeführt.
    Von ilona im Forum Javascript & Ajax
    Antworten: 10
    Letzter Beitrag: 20.08.03, 10:20