Portal > Foren > PHP > PHP-Programmierung > Problem bei Verarbeitung von Templates (Eigene Klassen)
Antwort
 
LinkBack Themen-Optionen Thema durchsuchen
Alt 17.01.2006, 17:27 Nach oben    #1
Daniel Golowin
 
Registriert seit: 17.11.2005
Ort: Rheinland-Pfalz, Osthofen
Beiträge: 130
Standard Problem bei Verarbeitung von Templates (Eigene Klassen)

Liebe Forengemeinschaft,
nach dem ich schon hier viel tolles gelsen habe, bin ich einfach begeistert über dieses Forum! Niergends sooooviel Profissionalität gelsen!!!

Nun ich hab leider ein Problem und komme nicht dahinter was es sein kann!

Ich hab mir vorgenommen eine Templates Verabeitungs Classe zu schreiben, der nur ein Start-Templatename übergen werden soll und den rest soll bitte schön diese doch aus dem Template herauslesen!

Nun die Idee habe ich schon lange, alerding hapert es etwas mit der realisierung. Als inspiration habe ich mir die tollen Tutorials von hier genommen.

Diese hier:
Ein eigenes Templatesystem schreiben von Corvin Gröning
[php] Ein einfaches Template-System von MrNiceGuy

DANKE Leute!!!


Ich hab versuch aus diesen beiden Tutorials, wie ich meine, die Vorteile in eine Classe zusammen zu fassen.

Hier ist sie: Korrigiert!
PHP-Code:
/*
 * Template Verarbeitung
 *
 * Enthält Methoden zum verarbeiten der Templates
 *
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
 

class templateVerarbeitung
{
//######################################################################
// Variablen der Klasse
//######################################################################

      /*
      * Der linke Delimiter für einen Platzhalter
      *
      * @access public
      * @var    string
      */
      
protected $delimiter_left '{';
      
      
/*
      * Der rechte Delimiter für einen Platzhalter
      *
      * @access public
      * @var    string
      */
      
protected $delimiter_right '}';

      
/*
      * Inhalt des Templates.
      *
      * @access protected
      * @var    array
      */
      
protected $template = array();
      
      
/*
      * Objekt für den Datenbankzugriff.
      *
      * @access protected
      * @var    object
      */
      
protected $obj_db "";
      
      
/*
      * Name der Tabelle mit Templates.
      *
      * @access protected
      * @var    string
      */
      
protected $tpl_table "";
      
      
/*
      * Pfad der Funktionsdateien.
      *
      * @access protected
      * @var    string
      */
      
protected $dir_functions "";
      
      
/*
      * Dateiendungen der Funktionsdateien.
      *
      * @access protected
      * @var    string
      */
      
protected $file_endung "";
      
      
/**
      * Konfigurations-Status der Klasse.
      *
      * @access protected
      * @var    boolean
      */
      
protected $config false;
      

//######################################################################
// Methoden der Klasse
//######################################################################

      /*
      * Klasse konfigurieren
      *
      * @access    public
      * @param     object  $obj_db         Objekt für den Datenbankzugriff
      * @param     string  $tpl_table      Name der Tabelle mit Templates
      * @param     string  $dir_functions  Pfad der Funktionsdateien
      * @param     string  $file_endung    Dateiendung der Funktionsdateien (Standart *.php)
      * @return    boolean
      */
      
public function config(&$obj_db,
                             
$tpl_table,
                             
$dir_functions,
                             
$file_endung ".php")
      {
             
// Prüfen ob Variablen mit Werten gefüllt wurden
             
if (!empty ($obj_db)
              && !empty (
$tpl_table)
              && !empty (
$dir_functions))
             {
                 
$this->obj_db $obj_db;
                 
$this->tpl_table $tpl_table;
                 
$this->dir_functions $dir_functions;
                 
$this->file_endung $file_endung;
                 
$this->config true;
                 
                 return 
true;
             }
             
             return 
false;
      }
      
      
      
/*
      * Initiator der Klasse, starten der Abarbeitung
      *
      * @access    protected
      * @param     string  $tpl_name  Name des Templates
      * @return    boolean
      */
      
public function init($tpl_name)
      {
             if (
$this->config)
             {
                 
$this->lade_tpl($tpl_name);
                 
$this->ersetze_platzhalter($tpl_name);
                 
                 return 
true;
             }
             
             return 
false;
      }
      

      
/*
      * Template laden
      *
      * @access    protected
      * @param     string  $tpl_name  Name des Templates
      * @return    boolean
      */
      
protected function lade_tpl($tpl_name)
      {
                if (isset(
$this->template[$tpl_name]) === true)
                {
                    
// Template wurde schon geladen
                    
return true;
                }
                else
                {
                    
// Template laden
                    
$this->obj_db->anfrage("SELECT template_inhalt FROM "
                                                   
$this->tpl_table
                                                   
" WHERE template_name = '"
                                                   
$tpl_name "'");

                    
$tpl_daten $this->obj_db->auslese();
                    
                    
// Template speichern
                    
$this->template[$tpl_name] = $tpl_daten['template_inhalt'][0];
                    
                    return 
true;
                }
      }
      
      
      
/*
      * Aufruffunktion zum ersetzen von Platzhalter
      *
      * @access    protected
      * @param     string  $tpl_name  Name des Templates
      * @return    boolean
      */
      
protected function ersetze_platzhalter($tpl_name)
      {
                
$this->ersetze_variable($tpl_name);
                
$this->ersetze_array($tpl_name);
                
$this->ersetze_template($tpl_name);
                
$this->ersetze_file($tpl_name);
                
$this->ersetze_function($tpl_name);
                
                return 
true;
      }
      
      
      
/*
      * Platzhalter {$varname} ersetzen
      *
      * @access    protected
      * @param     string  $tpl_name  Name des Templates
      * @return    boolean
      */
      
protected function ersetze_variable($tpl_name)
      {
                
$this->template[$tpl_name] = preg_replace_callback('/' $this->delimiter_left '(\$(.*))' $this->delimiter_right '/isU',
                                                          
create_function('$treffer''return $GLOBALS[$treffer[2]];'),
                                                          
$this->template[$tpl_name]);
                
                return 
true;
      }
      
      
      
/*
      * Platzhalter {array="arrayname[indexname]"} ersetzen
      *
      * @access    protected
      * @param     string  $tpl_name  Name des Templates
      * @return    boolean
      */
      
protected function ersetze_array($tpl_name)
      {
                while (
preg_match('/' $this->delimiter_left 'array=\"(.*)\[(.*)\]\"' $this->delimiter_right '/isU'$this->template[$tpl_name], $treffer))
                {
                       
// Array bereitstellen
                       
$array =& $GLOBALS[$treffer[1]];
                       
                       
$this->template[$tpl_name] = preg_replace('/' $this->delimiter_left 'array=\"' $treffer[1] . '\[' $treffer[2] . '\]\"' $this->delimiter_right '/isUe',
                                                                 
'$array[$treffer[2]]',
                                                                 
$this->template[$tpl_name]);
                }

                return 
true;
      }
      
      
      
/*
      * Platzhalter {template="templatename"} ersetzen
      *
      * @access    protected
      * @param     string  $tpl_name  Name des Templates
      * @return    boolean
      */
      
protected function ersetze_template($tpl_name)
      {
                while (
preg_match('/' $this->delimiter_left 'template=\"(.*)\"' $this->delimiter_right '/isU'$this->template[$tpl_name], $treffer))
                {
                       
// Template laden und vorbereiten
                       
$this->lade_tpl($treffer[1]);
                       
$this->ersetze_platzhalter($treffer[1]);
                       
                       
$this->template[$tpl_name] = preg_replace('/' $this->delimiter_left 'template=\"' $treffer[1] . '\"' $this->delimiter_right '/isUe',
                                                                 
'$this->template[$treffer[1]]',
                                                                 
$this->template[$tpl_name]);
                }

                return 
true;
      }
      
      
      
/*
      * Platzhalter {file="dateipfad"} ersetzen
      *
      * @access    protected
      * @param     string  $tpl_name  Name des Templates
      * @return    boolean
      */
      
protected function ersetze_file($tpl_name)
      {
                
// Datei-Inhalt einlesen und einfügen
                
$this->template[$tpl_name] = preg_replace('/' $this->delimiter_left 'file=\"((.*)\.(.*))\"' $this->delimiter_right '/isUe',
                                                          
'file_get_contents(ROOT_DIR . "/$2.$3")',
                                                          
$this->template[$tpl_name]);

                return 
true;
      }
      
      
      
/*
      * Platzhalter {function="funktionname()"} ersetzen
      *
      * @access    protected
      * @param     string  $tpl_name  Name des Templates
      * @return    boolean
      */
      
protected function ersetze_function($tpl_name)
      {
                while (
preg_match('/' $this->delimiter_left 'function=\"(.*)\((.*)\)\"' $this->delimiter_right '/isU'$this->template[$tpl_name], $treffer))
                {
                       
// Prüfen ob die Funktion schon vorhanden ist und ob die Datei existiert
                       
if (!function_exists($treffer[1]) && file_exists($this->dir_functions $treffer[1] . $this->file_endung))
                       {
                               
// Laden der Datei mit der Funktion
                               
include_once($this->dir_functions $treffer[1] . $this->file_endung);
                       }
                       
                       
// Wenn die Funktion vorhanden ist, wird diese ausgeführt
                       
if (function_exists($treffer[1]))
                       {
                               
$this->template[$tpl_name] = preg_replace('/' $this->delimiter_left 'function=\"' $treffer[1] .  '\(' $treffer[2] . '\)\"' $this->delimiter_right '/isUe',
                                                                         
'' $treffer[1] . '(' $treffer[2] .')',
                                                                         
$this->template[$tpl_name]);
                       }
                }
                
                return 
true;
      }


      
/*
      * Template ausgeben
      *
      * @access    public
      * @param     string  $tpl_name  Name des Templates
      * @return    boolean
      */
      
public function show($tpl_name)
      {
             echo 
$this->template[$tpl_name];
             
             return 
true;
      }

Meine Vermutung ist, dass es an dem übergebendem Objekt liegt! Scheinbar funktioniert es nicht so wie ich es mir vorgestellt hatte!


Hier noch die Datenbankzugriff Classe:
PHP-Code:
/*
 * Datenbankzugriff Klasse (MySQL)
 *
 * Enthält Methoden zum arbeiten mit der Datenbank
 *
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */


class dbMysql
{
//######################################################################
// Variablen der Klasse
//######################################################################

      /*
      * Datenbank Servername.
      *
      * @access protected
      * @var    string
      */
      
protected $db_host;
      
      
/*
      * Datenbank Benutzer.
      *
      * @access protected
      * @var    string
      */
      
protected $db_user;
      
      
/*
      * Datenbank Passwort.
      *
      * @access protected
      * @var    string
      */
      
protected $db_psw;
      
      
/*
      * Datenbank Name.
      *
      * @access protected
      * @var    string
      */
      
protected $db_name;
      
      
/*
      * Tabellen Präfix.
      *
      * @access protected
      * @var    string
      */
      
protected $tb_prfx;

      
/*
      * Datenbank Verbindungskennung.
      *
      * @access protected
      * @var    string
      */
      
protected $db_verbindung false;
      
      
/*
      * Ergebnis des letzten SQL-Befehl.
      *
      * @access protected
      * @var    string
      */
      
protected $sql_query false;
      
      
/*
      * Anzahl der betroffenen Datensätze.
      *
      * @access public
      * @var    string
      */
      
public $ds_anzahl false;
      

//######################################################################
// Methoden der Klasse
//######################################################################

      /*
      * Klasse konfigurieren
      *
      * @access    public
      * @param     string  $db_host  Datenbank Servername
      * @param     string  $db_user  Datenbank Benutzer
      * @param     string  $db_psw   Datenbank Passwort
      * @param     string  $db_name  Datenbank Name
      * @param     string  $tb_prfx  Tabellen Präfix
      * @return    boolean
      */
      
public function config($db_host,
                             
$db_user,
                             
$db_psw,
                             
$db_name,
                             
$tb_prfx "")
      {
             
// Prüfen ob Variablen mit Werten gefüllt wurden
             
if (!empty ($db_host)
              && !empty (
$db_user)
              && !empty (
$db_psw)
              && !empty (
$db_name))
             {
                 
$this->db_host $db_host;
                 
$this->db_user $db_user;
                 
$this->db_psw  $db_psw;
                 
$this->db_name $db_name;
                 
$this->tb_prfx $tb_prfx;
               
                 return 
true;
             }
             
             return 
false;
      }
      
      
      
/*
      * Stellt eine Verbindung zu der Datenbank her
      *
      * @access    public
      */
      
public function verbinde()
      {
               
$this->db_verbindung mysql_connect($this->db_host,
                                                    
$this->db_user,
                                                    
$this->db_psw
               
);

               
// Wählt die Datenbank aus
               
$this->auswaehle();
      }
      
      
      
/*
      * Auswahl einer Datenbank
      *
      * @access    public
      * @param     string  $db_name  Datenbank Name
      */
      
public function auswaehle($db_name NULL)
      {
               if (!
$db_name)
               {
                   
$db_name $this->db_name;
               }

               
mysql_select_db($db_name$this->db_verbindung);
      }
      
      
      
/*
      * Beendet die Datenbank Verbindung
      *
      * @access    public
      */
      
public function trenne()
      {
               
mysql_close($this->db_verbindung);
      }
      
      
      
/*
      * Sendet eine Anfrage an die Datenbank
      *
      * @access    public
      * @param     string  $sql  SQL Befehl
      */
      
public function anfrage($sql)
      {
               
$this->sql_query mysql_query($sql$this->db_verbindung);
               
               
// Speichert die Anzahl der Betroffenen Datensätze
               
if (stristr($sql"SELECT") !== false)
               {
                   
$this->ds_anzahl mysql_num_rows($this->sql_query);
               }
               else
               {
                   
$this->ds_anzahl mysql_affected_rows();
               }
      }
      
      
      
/*
      * Stellt ein Array mit Informationen bereit aus dem Ergebnis der zuvor
      * gestellten Datenbank Anfrage
      *
      * @access    public
      * @return    array    Datensätze aus der Datenbank
      *            boolean
      */
      
public function auslese()
      {
               if (
$this->sql_query)
               {
                   
// Liest eine Zeile aus
                   
for ($i 0$dt_zeile mysql_fetch_array($this->sql_query); $i++)
                   {
                        
// Läuft die Spalten durch
                        
foreach ($dt_zeile as $spalte => $inhalt)
                        {
                                 
// Erstellen der Datensätze Array's
                                 
$daten[$spalte][$i] = $inhalt;
                        }
                   }
                   
// Übergibt den Datensätze Array
                   
return $daten;
               }
               else
               {
                   
// Gibt FALSE zurück falls keine Anfrage vorher stattgefunden hat
                   
return false;
               }
      }

Die Fehlermeldungen die ich bekomme sind folgende:
Code:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in ...\class_dbMysql.php on line 183
 
Notice: Undefined index: templatename in ...\class_templateVerarbeitung.php on line 205 
Ich bin ratlos!

Nach der zweiten Meldung, wird kein Template gespeichert! Obwohl der teil des Codes ausgeführt wird!
Und in der Warnung steht, dass kein richtiges Ergebnis aus der Datenbank anfrage zu stande kommt!


Wenn noch irgendwelche Erleuterungen notwedigt sind, einfach schreiben!
Könnt ihr mir weiter helfen?

Geändert von Jann Hendrik (03.07.2008 um 10:35 Uhr)
dago ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 17.01.2006, 17:32 Nach oben    #2
Ben
Erfahrener Benutzer
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Koblenz
Beiträge: 4.794
Standard

Bau mal ein mysql_error() ein.
Dann wirst Du sehen woran es liegt .


<offtopic>
Zitat:
Zitat von dago
Liebe Forengemeinschaft,
nach dem ich schon hier viel tolles gelsen habe, bin ich einfach begeistert über dieses Forum! Niergends sooooviel Profissionalität gelsen!!!
Danke. Da lacht mein Herz .

</offtopic>
__________________
Mehr TuS Koblenz geht nicht ... - TuS Koblenz Forum ... Benjamin Klaile ist noch in der Aufwärmphase
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 17.01.2006, 17:36 Nach oben    #3
Daniel Golowin
 
Registriert seit: 17.11.2005
Ort: Rheinland-Pfalz, Osthofen
Beiträge: 130
Standard

Hmm, dran hab ich noch nicht gedacht, werde tun was du schreibst!

Allerdings hab ich den Befehl durchgetestet! An sich ist da nichts verkehrt. Bei einfacher ausführung funktioniert das ja auch! :ratlosbin:
dago ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 17.01.2006, 18:16 Nach oben    #4
Daniel Golowin
 
Registriert seit: 17.11.2005
Ort: Rheinland-Pfalz, Osthofen
Beiträge: 130
Standard

Hey, danke Ben! Hab den einen gefunden! Hab mich an einer Variable vertippt!

Die Notice Meldung bleib aber! hmm...
dago ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 17.01.2006, 18:35 Nach oben    #5
Ben
Erfahrener Benutzer
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Koblenz
Beiträge: 4.794
Standard

Nu, du versuchst auf den Index "templatename" zuzugreifen, aber den gibt es nicht.
Schau Dir mal an, wie das Array gefüllt ist (var_dump()) und schau wo Du es füllst.
Dann findest Du eventuell schon den Grund, warum es zu dieser Meldung kommt.

Grüße Ben.
__________________
Mehr TuS Koblenz geht nicht ... - TuS Koblenz Forum ... Benjamin Klaile ist noch in der Aufwärmphase
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 17.01.2006, 18:42 Nach oben    #6
Daniel Golowin
 
Registriert seit: 17.11.2005
Ort: Rheinland-Pfalz, Osthofen
Beiträge: 130
Standard

Man bin ich blod! Bingo!

So jetzt muss ich noch dafür sorgen, dass die Ersetzungsfunktionen richtig funktionieren und stell die dann die Classe hier koriegiert rein!


DANKE!
dago ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 17.01.2006, 18:50 Nach oben    #7
Ben
Erfahrener Benutzer
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Koblenz
Beiträge: 4.794
Standard

Klasse. Da kommt kein "c" vor.
Deutsch: Klasse
Englisch: class

__________________
Mehr TuS Koblenz geht nicht ... - TuS Koblenz Forum ... Benjamin Klaile ist noch in der Aufwärmphase
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 18.01.2006, 23:57 Nach oben    #8
Erfahrener Benutzer
 
Registriert seit: 30.10.2005
Beiträge: 302
Standard

Wo wir grad dabei sind
Ich habe die Klasse vom Tutorial verändert und erweitert.
Die Funktion ersetzt Multi-Arrays wie $books und jeder Key is eben nochmal ein Array mit Titel, etc. Ähnlich wie ein DB Ergebnis

Vielleicht kann jemand mal die Funktion bei sich einbauen oder testen und den Code vielleicht zu optimieren...ist nämlich meines Erachtens ein bisschen viel, Perfomance mäßig merk ich nix aber vielleicht kann man das auch kürzer machen

Übrigens hab ich der Funktion assign noch ne Abfrage eingebaut wo checkt ob es ein String ist oder eben ein Array, falls ein Array dann kommt assign_array()
Anmerkungen: Das rtrim() und das preg_replace verwende ich damit beim zusammenbauen keine leeren Zeilen entstehen verwende ich trim werden allerdings die Tabs geschluckt, was ich aber im source z.b. bei ner Tabelle nich will.
Kann man sich irgendwie die zweite Schleife sparen indem man vielleicht sowas einsetzt wie str_replace mit einem array() http://www.phpbar.de/w/%DCbersichtliches_str_replace
*Hüstel...Rekurs**on...verschachteltes {foreach} ;)
Code:
{foreach $book}
{$autor} - {$title}
{/foreach}
PHP-Code:
private function assign_array($replace$replacement_array) {
        
$matches = array ();
        
preg_match('/\{foreach \$'.$replace.'\}(.*?)\{\/foreach\}/si'$this->template$matches);
        
$keys array_keys($replacement_array['0']);
        
$row '';
        foreach (
$replacement_array as $array) {
            
$items $matches['1'];
            foreach (
$keys as $key) {
                
$items str_replace($this->left_delimiter.$key.$this->right_delimiter$array[$key], $items);
            }
            
$row .= str_replace($matches['1'], $row$items);
            
$row rtrim($row);
        }
        
$all_rows preg_replace('/\r\n/si'''rtrim($row), 1);
        
$this->template str_replace($matches['0'], $all_rows$this->template);
        return 
true;
    } 

Geändert von ex³ (19.01.2006 um 00:06 Uhr)
ex³ ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.01.2006, 00:59 Nach oben    #9
Daniel Golowin
 
Registriert seit: 17.11.2005
Ort: Rheinland-Pfalz, Osthofen
Beiträge: 130
Standard

Zitat:
Zitat von Ben
Klasse. Da kommt kein "c" vor.
Deutsch: Klasse
Englisch: class

Du musst verstehen Ben, ich schreibe Dagoisch! Deswegen das Durcheinander.
Aber nagut für dich habe ich jetzt auf Deutsch übersetzt!

Hab die Klassen oben aktualisiert! Folgende Ersetzungen sind möglich:
Code:
{$variablename}
{array="arrayname[indexname]"}
{template="templatename"}
{file="dateipfad"}
{function="funktionname(parm1, parm2)"}
Bin noch beim überlegen noch ein paar hinzuzufügen. Mal schaun.

@ex³
Super Funktion, schau mir die noch genauer an! Danke!

Wenn ihr Fragen zu meiner Klasse habt, einfach schreiben!
dago ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.01.2006, 11:14 Nach oben    #10
Erfahrener Benutzer
 
Registriert seit: 30.10.2005
Beiträge: 302
Standard

Das Foreach lass ich ja durchgehen aber das Funktionen angewandt werden in der Template wie in Smarty die modifiert...ist ein bisschen zu viel meines Erachtens. Denke man sollte sich schön die Variablen zurechtmachen und dann einfach dem Template zuweisen.
ex³ ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.01.2006, 14:26 Nach oben    #11
Daniel Golowin
 
Registriert seit: 17.11.2005
Ort: Rheinland-Pfalz, Osthofen
Beiträge: 130
Standard

Stimm dir zu ex³! Bei meiner Übelegung mache ich dass mit der URL, ich stelle sie als Array bereit! Sonstige allgemeinen Aufgaben erledige ich ebenfallst vor der Klasse.

Meine Überlegung ist nur etwas anders. An sich soll ja meine Klasse nicht einfach nur ein Template durchgehen und die bereitgestellten Ergebnisse einfügen, sondern selbst um die bereitstellung sorgen! D.h. die Funktionen.

Ich möchte auch nicht viel Code in Templates haben, lediglich nur ein Hinweis was rein soll.

Ich mach mal ein Beispiel:

URL: http://www.domainname.de/index.php?aktion=login

Template:
HTML-Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
...
</head>
<body>
...
{function="sitzung({array="url[aktion]"})"}
...
</body>
</html> 
Zuerst bereitstelle ich die URL als Array => $url['aktion'] = "login";
Der Inhalt des Array's wird dann an der Stelle ergenzt. Dann wird die benötigte Funktion geladen und ausgeführt. Hier handelt es sich um eine Anmeldung, also wird der Benutzer versucht anzumelden. Falls es nicht klappt, wird eine neue URL in den HEADER übergeben und der Benutzer umgeleitet.

Mein Ziel ist es einen Script zu haben, wo ich in den Templates nur schreiben muss, was rein gehört! Die benötigten Funktionen lege ich in einem Ordner ab. Der Script soll sich dann selbst um das aufrufen der Funktion kümmern und ein eventuell zurückgeliefertes Ergebnis an der etsprechender Stelle einfügen!

Leider habe ich bis her keine Möglichkeit gefunden, die bereits bereitgestellten Funktionen, aus der Klasse heraus auszuführen! Es müssten auch noch ein paar andere Schritte getan werden, bis das funktioniert. Ich möchte auch noch mit Klassen arbeiten können, sehe aber bis jetzt keine Möglichkeit diese sinvoll nutzen zu können. Wenn ich Ausserhalb der Klasse auf Methoden zugreiffen könnte, währe es etwas anders. Bin also noch am grübeln!

Naja mal schaun vielleicht gelingt mir ja noch das ganze!

Grüße dago
dago ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 20.01.2006, 10:26 Nach oben    #12
Erfahrener Benutzer
 
Registriert seit: 30.10.2005
Beiträge: 302
Standard

Vielleicht mit preg "function="" raussuchen denn Inhalt mit Funktion_exists prüfen und wenns die gibt dann ausführen?
ex³ ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 20.01.2006, 10:39 Nach oben    #13
Daniel Golowin
 
Registriert seit: 17.11.2005
Ort: Rheinland-Pfalz, Osthofen
Beiträge: 130
Standard

Hmm, wie du schon gemerkt haben solltest, arbeite ich ja schon mit Ersetzung durch preg_replace! Das Problem ist die Funktionen interhalb der Methode bekannt zu machen. Ich hab einfach bis her keine Möglichkeit gefunden, Funktionen Global bereitzustellen.

Mit Variablen und Array's klappt das, aber nicht mit Funktionen. Vielleicht kennst du ja eine Möglichkeit diese inerhalb der Methode bekannt zu machen?
dago ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 21.01.2006, 00:41 Nach oben    #14
Daniel Golowin
 
Registriert seit: 17.11.2005
Ort: Rheinland-Pfalz, Osthofen
Beiträge: 130
Standard

Zitat:
Zitat von ex³
Vielleicht mit preg "function="" raussuchen denn Inhalt mit Funktion_exists prüfen und wenns die gibt dann ausführen?
Stell dir vor, genau dass habe ich auch zuerst probiert und irgendwie beim testen bin drauf gekommen, dass es nicht geht!

Jetzt hab ich das noch mal ausserhalb der Klasse ganz simpel durchgetestet! Es geht! Hab auch in die Klasse eingebaut, funktioniert!


Ich glaub ich war im Eifer das Ding so schnell wie Möglich fertig zu stellen, dass ich mir selber Steine in den Weg gelegt habe! Vergesse den letzten Post.

Naja mach mal weiter...
dago ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 11.03.2006, 14:03 Nach oben    #15
Neuer Benutzer
 
Registriert seit: 11.03.2006
Beiträge: 29
Standard

Zitat:
Zitat von ex³
Wo wir grad dabei sind
Ich habe die Klasse vom Tutorial verändert und erweitert.
Die Funktion ersetzt Multi-Arrays wie $books und jeder Key is eben nochmal ein Array mit Titel, etc. Ähnlich wie ein DB Ergebnis

Vielleicht kann jemand mal die Funktion bei sich einbauen oder testen und den Code vielleicht zu optimieren...ist nämlich meines Erachtens ein bisschen viel, Perfomance mäßig merk ich nix aber vielleicht kann man das auch kürzer machen

Übrigens hab ich der Funktion assign noch ne Abfrage eingebaut wo checkt ob es ein String ist oder eben ein Array, falls ein Array dann kommt assign_array()
Anmerkungen: Das rtrim() und das preg_replace verwende ich damit beim zusammenbauen keine leeren Zeilen entstehen verwende ich trim werden allerdings die Tabs geschluckt, was ich aber im source z.b. bei ner Tabelle nich will.
Kann man sich irgendwie die zweite Schleife sparen indem man vielleicht sowas einsetzt wie str_replace mit einem array() http://www.phpbar.de/w/%DCbersichtliches_str_replace
*Hüstel...Rekurs**on...verschachteltes {foreach} ;)
Code:
{foreach $book}
{$autor} - {$title}
{/foreach}
PHP-Code:
private function assign_array($replace$replacement_array) {
        
$matches = array ();
        
preg_match('/\{foreach \$'.$replace.'\}(.*?)\{\/foreach\}/si'$this->template$matches);
        
$keys array_keys($replacement_array['0']);
        
$row '';
        foreach (
$replacement_array as $array) {
            
$items $matches['1'];
            foreach (
$keys as $key) {
                
$items str_replace($this->left_delimiter.$key.$this->right_delimiter$array[$key], $items);
            }
            
$row .= str_replace($matches['1'], $row$items);
            
$row rtrim($row);
        }
        
$all_rows preg_replace('/\r\n/si'''rtrim($row), 1);
        
$this->template str_replace($matches['0'], $all_rows$this->template);
        return 
true;
    } 
wie müste man denn dann die werte übergeben mit einer while schleife oder wie????

oder brauch $book gar kein wert???
lycoos ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 12.03.2006, 23:02 Nach oben    #16
Daniel Golowin
 
Registriert seit: 17.11.2005
Ort: Rheinland-Pfalz, Osthofen
Beiträge: 130
Standard

Zitat:
Zitat von lycoos
wie müste man denn dann die werte übergeben mit einer while schleife oder wie????

oder brauch $book gar kein wert???
Einfach vorher den Array erstellen und dann das Template der Klasse übergeben.

PHP-Code:
/*
Code zur erstellung des Array's und anderer Variablen.
*/
/*Bsp.*/ 
$book[$autor] = $title;
 
/*
Hier Template parsen. Das Templates der Klasse übergeben und die Platzhalter ersetzen lassen.
*/ 
Das kann man auch im Template formatieren:
HTML-Code:
{foreach $book}
{$autor} - {$title}
{/foreach}
dago ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 21.03.2006, 21:27 Nach oben    #17
Neuer Benutzer
 
Registriert seit: 11.03.2006
Beiträge: 29
Standard

könnte mal jemand nen beispiel machen büdde. so richtig chegge ich das net ^^
lycoos ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 30.06.2006, 16:50 Nach oben    #18
Neuer Benutzer
 
Registriert seit: 30.06.2006
Beiträge: 2
Standard

Hallo Leute,

könnte hier nicht mal jemand antworten? Ich komm auch nicht klar mit dem PHP-Code. Das mit dem .tpl-file ist ok.

Bitte um ein vollständiges/ausführliches Beispiel.

danke!

Gruss n00b
n00b ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 30.06.2006, 17:26 Nach oben    #19
Benjamin Steininger
 
Benutzerbild von robo47
 
Registriert seit: 02.06.2005
Ort: weiher im tiefsten Odenwald
Beiträge: 1.379
Standard

Zitat:
Zitat von n00b
Hallo Leute,

könnte hier nicht mal jemand antworten? Ich komm auch nicht klar mit dem PHP-Code. Das mit dem .tpl-file ist ok.

Bitte um ein vollständiges/ausführliches Beispiel.

danke!

Gruss n00b

wozu genau willst du denn ein beispiel ? wie man seine klasse benutzt ?
robo47 ist gerade online  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 30.06.2006, 17:33 Nach oben    #20
Neuer Benutzer
 
Registriert seit: 30.06.2006
Beiträge: 2
Standard

zur verwendung von foreach im template-system
n00b ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Problem mit Klassen Bookworm PHP-Programmierung 17 18.09.2006 22:25
Klassen Problem la-finest PHP-Programmierung 9 14.09.2006 16:41
Templates - Was sie bieten sollten!? MrNiceGuy PHP-Programmierung 26 28.05.2006 22:14
Vererbung bei Templates Pain-maker PHP-Programmierung 6 28.03.2006 15:37
Problem bei der Verarbeitung bei Formularen sauer82 Enterprise Java 1 01.10.2005 12:57


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:24 Uhr.


Powered by vBulletin® Version 3.8.4 (Deutsch)
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.3.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47