Hi Leute,
Ich sitze jetzt mehrere Stunden an einer Klasse, die verschiedene Templates wie z.B. ... auswerten und in vernünftigen html-code umwandeln soll.
Im Grunde besteht diese Klasse nur aus einer einzigen Methode und könnte genausogut bloß eine Funktion sein, doch das ergänze ich Später noch weiter!
Mein Problem ist jetzt, das ich nicht die Ausgaben erhalte, dich ich erwarte. Wahrscheinlich komm ich irgendwo mit meinen Positionszählern durcheinander.
Also, folgendes:
diese Zeichenfolge ist ein Beispiel dafür, wie die Eingabe in die Methode sein könnte:
	
und die Ausgabe soll so aussehen:
	
Allerdings zerreiße ich mir an irgendeiner unauffindbaren Stelle den String, so dass ich eher etwas in die Art bekomme:
	
Zwischendurch funktionierten einige Ausgaben, nach einigen Änderungen, um die anderen Ausgaben auch zu korrigieren, änderten sich die Ausgaben wieder extremst!
Vielleicht kann mir ja jemand helfen und findet einen Fehler oder gibt mir einen Neuen Denkansatz, so dass ich das ganze noch einmal überdenken kann!!
Hier die Funktion:
	
Ich hoffe, ihr könnt mir helfen, denn bei mir siehts im mom so aus: 
							
						
					Ich sitze jetzt mehrere Stunden an einer Klasse, die verschiedene Templates wie z.B. ... auswerten und in vernünftigen html-code umwandeln soll.
Im Grunde besteht diese Klasse nur aus einer einzigen Methode und könnte genausogut bloß eine Funktion sein, doch das ergänze ich Später noch weiter!
Mein Problem ist jetzt, das ich nicht die Ausgaben erhalte, dich ich erwarte. Wahrscheinlich komm ich irgendwo mit meinen Positionszählern durcheinander.
Also, folgendes:
diese Zeichenfolge ist ein Beispiel dafür, wie die Eingabe in die Methode sein könnte:
PHP-Code:
	
	
<?php 
  echo $templates->replace( "[hr][url=http://www.beispiel.de]
  schau mal bei beispiel rein[url][hr]" ); 
?>
PHP-Code:
	
	
<br /><hr />
<a href="http://www.beispiel.de" target="_blank">schau mal bei beispiel rein</a>
<br /><hr /> 
PHP-Code:
	
	
<br /><hr />
<a href="http://www.google.de" target="_blank"></a>gle rein-- kein bekanntes Tag url]
<br /><hr /> 
Zwischendurch funktionierten einige Ausgaben, nach einigen Änderungen, um die anderen Ausgaben auch zu korrigieren, änderten sich die Ausgaben wieder extremst!
Vielleicht kann mir ja jemand helfen und findet einen Fehler oder gibt mir einen Neuen Denkansatz, so dass ich das ganze noch einmal überdenken kann!!
Hier die Funktion:
PHP-Code:
	
	
<?php
class templates {
function replace( $source ) {
    
    // erstes Auftauchendes [
    $first_start = 0;
    // erstes Auftauchendes =
    $first_equal = 0;
    // erstes Auftauchendes ]
    $first_end   = 0;
    
    // Speichern die Start bzw. Endposition des schließenden [/...]
    $last_start = 0;
    $last_end   = 0;
    
    // Speichert den Typ des aktuellen Tags
    //        0        Kein gültiger Typ
    //        1        einfaches Tag ( z.B. [IMG]...[/IMG] )
    //        2        Zuweisungstag ( z.B. [URL=...]...[/URL] )
    //        3        monadisches Tag ( z.B. [HR] )
    $typ = 0;
    
    while ( !( ( $first_start = strpos( $source, "[", $first_end ) )===false ) 
    ) {
        
        // Werte zurücksetzen
        
        // Wert in einem Zuweisungstag
        $value = '';
        // Name des aktuellen Tags
           $tag = '';
        // Inhalt des Tags
           $contents = '';
           
           
        // nach erstem Vorkommen von ] suchen
        $first_end = strpos( $source, "]", $first_start );
        
        
        // Namen des Tags ermitteln
        $tag = strtolower( substr( $source, $first_start+1, $first_end-$first_start-1 ) );
        
        
        // Anfang des schließenden Tags suchen
        if( !( ( $last_start = strpos( strtolower( $source ), "[/".$tag."]",
 $first_end ) ) === false ) ) {
            
            // Ende des schließenden Tags suchen
            $last_end = strpos( strtolower( $source ), "]", $last_start
 );
            
            // Inhalt des Tag ermitteln
            $contents = strtolower( 
                substr( $source, $first_start + strlen( $tag ) + 2, 
$last_start - $first_end - 1 ) );
        }
        else {
            $last_start = $last_end = false;
            $contents = '';
        }
        
        
        // im Tag nach = suchen. Wenn gefunden, dann ist dieses 
Tag ein Zuweisungstag
        if( !( ( $first_equal = strpos( $tag, "=", 0 ) )=== false ) ) {
            // Typ: Zuweisungstag
            $typ = 2;
            
            $value = substr( $tag, $first_equal + 1 );
            
            // tag=value in nur tag splitten
            $tag = substr( $tag, 0, $first_equal );
        }
        // Kein Zuweisungsoperator. Überprüfen, ob ein 
schließendes Tag gefunden wurde
         else if ( ( $last_end === false ) AND ( $last_start === false
 ) ) {
            // Typ:    monadisches Tag
            $typ = 3;
        }
        // Kein = aber ein schließendes Tag gefunden
        else {
            // Typ:    einfaches Tag
            $typ = 1;
        }
        
        // Je nach Typ verschieden behandeln
        switch( $typ ) {
            
            // einfaches Tag
            case 1:
                // PHP
                if( $tag == 'php' ) {
                    
                    // Syntaxhighlighting für PHP-Tags einstellen
                    $replace = highlight_string( $contents, true );
                    
                    $source = substr_replace( $source, $replace, 
$first_start, ( $last_end - $first_start + 1 ) );
                    
                    // $first_end korrigieren, um weiteres 
Template-ersetzen innerhalb des Sourcecodes zu vermeiden
                    $first_end = $last_end;
                    
                }
                
                // IMG
                else if( $tag == 'img' ) {
                    
                    $replace = '<img src="'.$contents.'" alt="ein 
durch ein User eingebundenes Bild" />';
                    
                }
                
                // ...
                
                // kein bekanntes Tag
                else {
                    
                    $replace = '<!-- Kein bekanntes Tag '.$tag.' -->';
                    
                }
                
                // Tag ersetzen
                if( $tag != 'php' ) {
                    $source = substr_replace( $source, $replace, 
$first_start, ( $last_end - $first_start + 1 ) );
                }
                
                break;
            
            // Zuweisungstag
            case 2:
                // je nach Tag verschieden behandeln
                
                // URL
                if( $tag == 'url' ) {
                    
                    $replace = '<a href="'.$value.'" 
target="_blank">'.$contents.'</a>';
                    
                }
                
                // ...
                
                // kein bekanntes Tag
                else {
                    
                    $replace = '<!-- Kein bekanntes Tag '.$tag.' mit 
Wert '.$value.' -->'.$contents;
                    
                }
                
                // Tag ersetzen
                $source = substr_replace( $source, $replace, 
$first_start, ( $last_end - $first_start + 1 ) );
                
                break;
            
            // monadisches Tag
            case 3:
                // je nach Tag verschieden behandeln
                
                // HR
                if( $tag == 'hr' ) {
                    // Länge von [HR] = 4
                    $source = substr_replace( $source, '<br /><hr />',
 $first_start, 4 );
                    
                }
                
                // kein bekanntes Tag
                else {
                    
                    $source = substr_replace( $source,
 '<!-- kein bekanntes Tag '.$tag, $first_start, 4 );
                    
                }
                
                break;
            
            // unbekanntes Tag
            default:
                break;
            
        }    // ENDE switch
        
    }    // ENDE while
    
    return( $source );
}
    
};
    
?>
Ich hoffe, ihr könnt mir helfen, denn bei mir siehts im mom so aus:
 
							
						 
          
 Probleme mit Template-Klasse
									
									
									Probleme mit Template-Klasse
								
 
							
						
Kommentar