Erweitertes "ersetzen" bzw. ausschneiden

emptynick

Erfahrenes Mitglied
Hallo,

ich stehe momentan total auf dem Schlauch.
Ich bin dabei eine Templateklasse zu programmieren und dabei möchte ich ein Extra Feature einbauen.
Und zwar möchte ich in die Templates If-Schleifen einbauen.
Diese sollen einen Text ausgeben, bzw. falls false eben nicht.
Und zwar habe ich mir das ganze so gedacht:

In der HTML Datei steht folgendes:
[if(123)]Leider ist ein Fehler aufgetreten![/if123]

Nun setze ich per PHP Script die If-Schleife sozusagen auf "True".
Das mache ich wie folgt:
$tpl->ifclause(123);
Damit wird dann einfach das [if(123)] und das [/if(123)] entfernt.
Das funktioniert soweit ganz gut.
Doch wie gehe ich vor, wenn das nicht per Script auf "True" gesetzt wurde?
Sprich, wie schneide ich den Teil dann einfach weg, sodass nichts ausgegeben wird?
Mit strpos etc. wird das relativ schwer, da die "123" irgendeine beliebige Zahl sein kann UND auch ein Text o.Ä. sein kann.
außerdem können beliebig viele dieser "If-Schleifen" in einem Template vorkommen.

Bis jetzt gehe ich wie folgt vor:

PHP:
foreach($this->ifc as $out){
	if(@eregi("[if(".$out.")]", $input) && @eregi("[/if(".$out.")]", $input))
	{
	$input = str_replace("[if(".$out.")]", "", $input);
	$input = str_replace("[/if(".$out.")]", "", $input);
	}
$input entspricht dem Text der durchfließt!
$this->ifc ist die Variable mit den auf true gesetzten Werten (in unserem Fall 123)


Was jemand, wie ich da weitermachen kann?

Vielen dank und LG
emptynick
 
Hallo,

schon mal darüber nachgedacht, zu jeden if gibt es auch ein else- nur mal so als Denkanstoss.
 
Die Ausgabe soll aber nicht in dem PHP Script vorgenommen werden,
sondern in der HTML Datei sozusagen.
Genauso wie die If-Schleife, die ist auch in der HTML Datei, NICHT in der PHP!
Steht auch so in dem ersten Post...
 
das weiß ich, aber ich weiß nicht wie du dein Template parst. Fakt ist, das dir ein "else" fehlt, mehr wollte ich damit nicht sagen!

P.S. trotzdem muss die PHP Datei eine Art Renderer aufrufen, was dein Template parst, weil wie sonst sollen die Variablen in deinen Template ausgewertet werden?
 
Zuletzt bearbeitet von einem Moderator:
Okay gut, meinet wegen.
Hier der Quelltext:
PHP:
function handle($file)
{
	$handle = @fopen($file, "r");
	$content = @fread($handle, filesize($file));
	return $content;
}

function ifc($input)
{
	foreach($this->ifc as $out){
		if(@eregi("[if(".$out.")]", $input) && @eregi("[/if(".$out.")]", $input))
		{
			$input = str_replace("[if(".$out.")]", "", $input);
			$input = str_replace("[/if(".$out.")]", "", $input);
		}
                //Wenn ich hier ein Else reinmache...
               //In der Variable $this->ifc muss garnichts drinne sein
              //damit würde kein einziges If im Template ersetzt werden, obwohl vielleicht welche drinne sind....
	}
	
	return $input;
}

function ifclause($tagname)
{
	$this->ifc[] = $tagname;
}

function display($template)
{
	$content = $this->handle($template);
	$content = $this->ifc($content);
	$content = nl2br($content);
	echo $content;
}

Hab mal ein wenig an die Stelle wo das Else hin soll was reingeschrieben...
 
so vielleicht, ist schon spät...
PHP:
function ifc($input)
{
    foreach($this->ifc as $out){
        if(@eregi("[if(".$out.")]", $input) && @eregi("[/if(".$out.")]", $input))
        {
            $input = str_replace("[if(".$out.")]", "", $input);
            $input = str_replace("[/if(".$out.")]", "", $input);
        } else if (isset($this->ifc) && $out == '[else]') {

            //  $input = 'bla bla' ;
        }
                //Wenn ich hier ein Else reinmache...
               //In der Variable $this->ifc muss garnichts drinne sein
              //damit würde kein einziges If im Template ersetzt werden, obwohl vielleicht welche drinne sind....
    }
    
    return $input;
}

sorry kann nicht ganz folgen, was steht in $out? Kann den Funktionsaufruf ifclause($tagname) nicht sehen :confused:
 
Zuletzt bearbeitet von einem Moderator:
Nochmal der genaue Ablauf:
Ich habe ein Template wie folgt:
Code:
Es sind Fehler aufgetreten:
[if(1)]Fehler 1[/if(1)]
[if(2)]Fehler 2[/if(2)]

Jetzt trifft aber nur Fehler 2 wircklich zu.
Somit setze ich in dem PHP Script per:
PHP:
$tpl->ifclause(2);
den Wert 2 in den Array "ifc".

In dem Script wird nun "geprüft", ob in dem Array eine 2 ist.
Wenn ja, wird einfach "[if(2)]" und "[/if(2)]" rausgeschnitten, somit wird der Text ausgegeben.

Da aber keine "1" in dem Array vorkommt, soll der ganze Teil:
[if(1)]Fehler 1[/if(1)]
rausgeschnitten werden.
Das wird nichts mit else ;)
Hab schon lange drüber nachgedacht, aber so wirds eher nichts....
 
sorry meinst du so? welche werte kann $out denn haben?
PHP:
function ifc($input)
{
    foreach($this->ifc as $out){
        if(@eregi("[if(".$out.")]", $input) && @eregi("[/if(".$out.")]", $input) && $out == 1)
        {
            $input = str_replace("[if(".$out.")]", "", $input);
            $input = str_replace("[/if(".$out.")]", "", $input);
        } 
                //Wenn ich hier ein Else reinmache...
               //In der Variable $this->ifc muss garnichts drinne sein
              //damit würde kein einziges If im Template ersetzt werden, obwohl vielleicht welche drinne sind....
    }
    
    return $input;
}
 
Zurück