Template systeem => phpparse

Status
Niet open voor verdere reacties.

slabbetje

Gebruiker
Lid geworden
5 mei 2007
Berichten
290
Beste helpers,

Ik moet voor een school een eigen framework schrijven alleen nu zit ik met een probleempje,
Ik ben bezig met een template systeem maar hij ondersteund nog geen php in de templates wat ik toch wel graag zou willen...
Hoe kan ik dit implementeren in mijn code (zie hieronder) en wat doe ik fout...

Alvast harstikke bedankt,

Michael

PHP:
<?php
Class Template
{
    protected $_variables;
    protected $_controller;
    protected $_method;
    protected $_page;

    /**
     * This is the constructor, the params contains the names of the controller and the method
     * @param String $controller
     * @param String $method
     */
    public function __construct($controller,$method)
    {
        $this->_controller = ucfirst($controller);
        $this->_method = $method;
        
        
        if (file_exists('.'. DS . 'app' . DS . 'views' . DS . $this->_controller . DS . $this->_method . '.php')) {
            $this->_page = join("", file('.'. DS . 'app' . DS . 'views' . DS . $this->_controller . DS . $this->_method . '.php'));
        } else {
            die('Template "<b>'.$controller . '/' .$method.'</b>"  is not found!');
        }
        $this->_replaceTags();
        $this->_render();
    }

    
    /**
     * Displays the template
     */
    private function _render()
    {
        echo $this->_page;
    }
    
    /**
     * This replaces the tags to template items!
     * Example: {title} => lalala
     */
    private function _replaceTags()
    {
        $replacements = array("title"=>"lalala");
        
        if (count($replacements) > 0 && is_array($replacements))
        {
            foreach ($replacements as $key => $value)
            {
                $this->_page = eregi_replace("{" . $key . "}", $value, $this->_page);
            }
        }
    }
    
}
 
Als je de code op de pagina wilt uitvoeren zal je de boel moeten includen. Het beste kun je dan alleen opslaan wat de namen zijn van de files die geinclude moeten worden, en die files dan includen op het moment dat je de pagina rendert.

Je kunt ook altijd spieken bij een bestaand templating systeem natuurlijk, er zijn er genoeg.
 
door deze te bekijken

http://code.google.com/p/autosite/s...omaticsitev2.5/v2.5/function/Qhtml/Qvieuw.inc

http://code.google.com/p/autosite/s...ticsitev2.5/v2.5/function/Qhtml/Qtemplate.inc

http://code.google.com/p/autosite/s...sitev2.5/v2.5/preparts/data_templatevieuw.inc


wat doe je fout
PHP:
   public function __construct($controller,$method)    {
        $this->_controller = ucfirst($controller);
        $this->_method = $method;
        if (file_exists('.'. DS . 'app' . DS . 'views' . DS . $this->_controller . DS . $this->_method . '.php')) {
            $this->_page = join("", file('.'. DS . 'app' . DS . 'views' . DS . $this->_controller . DS . $this->_method . '.php'));
        } else {
            die('Template "<b>'.$controller . '/' .$method.'</b>"  is not found!');
        }
        $this->_replaceTags();
        $this->_render();
    }
$this is er nog niet omdat je construct dus het object is er nog niet(functies) op dat momment moet je gebruik maken van self::
dit is echter niet het geval bij variabelen die worden meestal bij construct al gevuld
PHP:
   public function __construct($controller,$method) {
        SELF::_controller = ucfirst($controller);
        SELF::_method = $method;
        
        if (file_exists('.'. DS . 'app' . DS . 'views' . DS . $this->_controller . DS . $this->_method . '.php')) {
            SELF::_page = join("", file('.'. DS . 'app' . DS . 'views' . DS . $this->_controller . DS . $this->_method . '.php'));
        } else {
            die('Template "<b>'.$controller . '/' .$method.'</b>"  is not found!');
        }
        SELF::_replaceTags();
        SELF::_render();
    }
Verder moet je weten dat je in de andere functies best geen self gebruikt maar dat heeft dan ook zijn reden
 
Laatst bewerkt:
Ik ga er naar kijken bedankt, verder is mijn code OOP correct gemaakt...

self word gebruikt bij statische objecten net als parent in bijvoorbeeld een singleton pattern
this word gebruikt bij niet statische objecten

Volgensmij word de __construct functie pas aangeroepen als de classe word geinstancieerd dus hoef je ook geen statische objecten te gebruiken
 
Ik ga er naar kijken bedankt, verder is mijn code OOP correct gemaakt...

self word gebruikt bij statische objecten net als parent in bijvoorbeeld een singleton pattern
this word gebruikt bij niet statische objecten

Volgensmij word de __construct functie pas aangeroepen als de classe word geinstancieerd dus hoef je ook geen statische objecten te gebruiken
maar bij php kan je er anders niet aan maar op die mannier wel en statis object is het niet als je een clone uitvoert nadien.

en parent vraagt vader gij kunt da wel doe hij dat nen keer dus(parent hoort bij extends)om boven gelegen functies te kunnen gebruiken
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan