• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Kommentar mit if anweisung entfernen

Status
Für weitere Antworten geschlossen.

CGollhardt

Mitglied
Hallo,

ich schreibe derzeit ein Template system. Ich habe eine Bedingungskommentar eingebaut, das mit samt inhalt gelöscht werden muss, und auch noch überprüft, dass es die selbe schleife ist:

Code:
<!-- if(eingeloggt) //-->
Ein bisschen inhalt
<!-- endif(eingeloggt) //-->

Ich habe mir gedacht, lese mich ein bisschen in die Regulären Ausdrücke ein. Jetzt habe ich folgendes geschrieben:
PHP:
$this -> vorlage = ereg_replace ("<!-- if\((.*)\) //-->.*<!-- endif\(\1\) //-->","", $this -> vorlage);
Das will aber nicht funktionieren
 
Werbung:
Ich bin mir nicht sicher.
Aber bei mir hat Slibbo geschrieben, dass man ereg_replace nicht mehr benutzen sollte.
Sondern stattdessen preg_replace schreiben.

Das hat aber nicht viel mit deinem Problem zutun.

MfG Speider
 
Werbung:
Wozu denn der Aufwand, wenn PHP doch schon eine prima Template-Sprache ist?

Klappt das?
Code:
<!-- if\(([^)]+)\) //-->.*<!-- endif\(\1\) //-->
 
Nein leider auch nicht. Aber trotzdem danke für deine Mühe. Wozu der Aufwand? Ich schreibe gerade ein Browsergame, und bin mitten drinn auf die OOP gestoßen. Naja und jetzt habe ich mich entschlossen noch mal neu anzufangen und obejct orientiert zu arbeiten. Und dann habe ich mich noch "schlau" geschaut, dass man dann Template basierend arbeiten sollte... Naja und da bin ich auf die Idee gekommen, auch noch eine Bedingung ins Template einzufügen, da ich sonst viel mehr aufwand hätte.
 
Also ein eigenes zu schreiben ist schon eine feine Sache, aber viel Aufwand. Schon was von Smarty gehört? Ist ganz gut.
 
Werbung:
Ja davon habe ich schon gehört. Aber ich hasse es, fremde Klassen zu includieren, ich schreibe lieber meine eigenen, und kann sie dadurch besser anpassen, da ich ja weiß, wie mein eigener Code zusammenhängt
 
Code:
/\<\!-- if\(.*\) \/\/--\>.*\<\!-- endif\(.*\) \/\/--\>/isU

das zwischen singlequotes und dann sollte es gehen...
 
Mh, dass will irgendwie nicht, egal was ich mache preg bzw. ereg...

Habe jetzt folgende Testdatei angelegt:
PHP:
<?php
/*
$string = "[u]Test[u]";
$string = preg_replace ("\[b\](.*)\[/b\]","<u>$1</u>",$string);
echo $string;
*/
$string = "<!-- if(eingeloggt) //-->
Ein bisschen inhalt
<!-- endif(eingeloggt) //-->";
echo preg_replace ("/\<\!-- if\(.*\) \/\/--\>.*\<\!-- endif\(.*\) \/\/--\>/isU","",$string);
?>
Selbst das auskommentierte geht nicht, und dort bin ich mir sicher dass das gehen müsste...
 
Werbung:
Sowas ist auch keine Aufgabe mehr von Regex, sondern von einem Parser.

Was spricht denn gegen:
PHP:
<? if ($this->eingeloggt): ?>
<p>Sie sind eingeloggt</p>
<? endif ?>
Wenn du Objekt-orientiert arbeitest, wirst du dich sicher auch für MVC entschieden haben und dort schreibt man seine Views in der gleichen Sprache.
 
Bis ich neu angefangen habe, hatte ich es ja auch wie du jetzt geschrieben hast mit if (defined("ISMEMBER")) etc. geregelt. Jetzt wollte ich bloß mit meiner Script Datei *.tpl dateien einlesen und meinetwegen {(Rohstoffe)} durch die Datenbank ersetzen lassen. Funktioniert prächtig! Nur dieses kleine Problem damit, dass sich die TPL Datei bei ein paar kleinen Bedingungen verändern soll. Zb. Subnavi Vorhanden?, Eingeloggt (Dann keine Resis Anzeige)?

[edit]
TPL's funktioniert ja demnach leider kein PHP code
 
die templates bekommen die endung .tpl
in diesen templates schreibst du PHP z.b.

PHP:
<html>
    <head>
        <title><?=PAGE_TITLE;?></title>
        <?foreach((new MetaTags) as $tag):?>
            <?=$tag;?>
        <?endforeach;?>
    </head>
    <body>
        <?$module = new PageController();?>
        <?foreach($module as $modul):?>
            <?if($modul->getDisplay()):?>
                <?=$modul;?>
            <?endif;?>
        <?endforeach;?>
        <?=PAGE_ADD;?>
    </body>
</html>

und das includest du dann in deiner bootstrap datei oder sonst wo und schon hast du ein wunderschönes und seeehr schnelles template system ^^
 
Werbung:
Da sieht man mal wieder, wie viel (sorry) sch***ß im Netz zu finden ist. Habe dort gelesen, das man bei einem Templatebasierten System niemals Serverseitigen Code stehen haben darf.

Naja Danke für eure Hilfe, ich werde dass dann so machen, wie Slibbo es in seinem Beispiel hat. Ist denke ich mal eh Ressourcen freundlicher, was bei einem Browsergame am Schluss doch sehr Sichtbar sein wird.
 
Vll. möchstest du das bei Gelegenheit gleich weitertreiben und ein MVC-Framework, wie Zend Framework, CakePHP oder Symfony benutzen. Die nehmen einem Arbeit ab und schaffen insbesondere viel Ordnung. Symfony findest du vll. am geeignetsten, da es leichtgewichtig ist.
 
Danke für den Tipp, aber ich weiß nicht, irgendwie liebe ich die Herausforderung am Programmieren, und das "Knowing you have done by your self".
Deshalb halte ich von Frameworks oder fertigen einzelnen Klassen nicht soviel.

Warum ein fertiges Forum in die Homepage innerhalb von einem Tag implementieren, wenn du auch ein viertel Jahr drann programmieren kannst, und es immer noch nicht so hochwertig danach ist, wie das gedownloadede?

Ich weiß meine Logik bricht sich dass Genick, aber so bin ich mal. xD
 
Werbung:
Status
Für weitere Antworten geschlossen.
Zurück
Oben