aan alle goede dingen komt een eind, webmasterplein.net 2003 - 2013
wij danken jullie voor al mooie momenten die dankzij dit forum ontstonden - Derk, Rutger en Stef

[php] PHP-variables in templates

Deel alles wat je delen kan, gebruik het voor opslag, plaats het omdat je er trots op bent of creëer samen wat moois!

[php] PHP-variables in templates

Berichtdoor Rik » 09 mei 2008 20:04

Code: Selecteer alles
  /**
   * Load template and ouput it
   *
   * @param string $file Template file
   * @param array $data Array with variables passed to the template
   * @param bool $return Return the file oe output it directly?
   */
  function output($file, $data = array(), $return = false)
  {
    if(!file_exists($file)) return false;
   
    extract($data); // Makes the key in an array an actual variable, so we can use $body instead of $data['body'] in the template
   
    ob_start();
    include($file);
    $output = ob_get_contents();
    ob_end_clean();
   
    // Return output or directly output the output
    if($return)
    {
      return $output;
    }
    else
    {
      echo $output;
      return true;
    }
  }


Ik was er al een tijdje benieuwt naar hoe CodeIgniter dit deed, ik vond het, heb het zelf herschreven en het werkt!


Voorbeeld:
index.php
Code: Selecteer alles
<?php
output('index.tpl', array('title' => 'Welkom!'));
?>

index.tpl
Code: Selecteer alles
<h1><?php echo $title ?></h1>
Avatar gebruiker
Rik
wmpr
 
Berichten: 1576
Geregistreerd: 11 jun 2005 17:59

Re: [php] PHP-variables in templates

Berichtdoor libia » 09 mei 2008 20:21

hoe ik het doe:

template.php
Code: Selecteer alles
<?php
class template
{
    //An array with all the variables
    protected $variables;
    
    
/* Public void addVar
     * Add a variable to replace in the page
     * param var: the variable to replace
     * param replacement: the text to replace it with
     */
    public function addVar($var, $replacement)
    {
        $this->variables[$var] = $replacement;
    }
    
    
/* Public void remVar
     * Remove a variable
     * param var: the variable to remove
     */
    public function remVar($var)
    {
        if(isset($this->variables[$var]))
        {
            unset($this->variables[$var]);
            return true;
        }
        return false;
    }
    
    
/* Public void start
     * Replace all the variables
     */
    public function exec(&$text)
    {
        if($text == null)
        {
            $text = $this->page;
        }
        $this->inc($text);
        $this->for_each($text);
        $this->ifExpr($text);
        
        foreach
($this->variables as $a => $b)
        {
            if(is_array($b))
            {
                $text = preg_replace_callback("/\{(" . $a . ")\[(.*?)\]\}/", array($this, 'callbackArray'), $text);
            }
            else
            
{
                $text = preg_replace("/\{" . $a . "\}/", $b, $text);
            }
        }
    }
    
    
/* Private mixed callbackArray
     * for the callback
     */
    private function callbackArray(&$match)
    {
        return $this->variables[$match[1]][$match[2]];
    }
...
}
?>
(bij ... is niet relevant)

testpagina.php
Code: Selecteer alles
<?php
include("template.php");

$text = file_get_contents("testpagina.tpl");

$template = new template();
$template->addVar('title', 'Dit is een testpagina');
$template->addVar('pagina', 'Dit is mijn pagina');
$template->exec($text);

echo
$text;
?>


testpagina.tpl
Code: Selecteer alles
<html>
<head>
<title>{title}</title>
</head>
<body>
<h1>{title}</h1>
<p>{pagina}</p>
</body>
</html>


heeft wat meer mogelijkheden ;)
en zeker als je de rest er ook nog bij hebt, maar dat heeft niets met variabelen te maken.. dus dat heb ik weggelaten :)
Avatar gebruiker
libia
wmpr
 
Berichten: 4149
Geregistreerd: 23 okt 2005 14:14
Woonplaats: Alphe!!

Re: [php] PHP-variables in templates

Berichtdoor Rik » 09 mei 2008 20:25

Ik heb zelf liever de mogelijkheid om PHP te gebruiken inplaats van een echte template parser. Ik maak ook vaak gebruik van Smarty op mijn werk. Die heeft pas functies zeg! Maar probeer ze maar eens te vinden, PHP ken ik wel, maar ik heb eigenlijk geen zin om ook nog eens Smarty te leren.
Avatar gebruiker
Rik
wmpr
 
Berichten: 1576
Geregistreerd: 11 jun 2005 17:59

Re: [php] PHP-variables in templates

Berichtdoor libia » 09 mei 2008 20:39

nou dit is gewoon libia-template :P

maar er valt niet zoveel aan te leren

- addVar = variabele toevoegen
- remVar = variabele verwijderen
- exec = alles verwerken

en de rest van de functionaliteit stop je rechtstreeks in de .tpl:
{var} = variabele
en als voorbeeld (zit hier niet in, maar wel in mijn complete versie):
<!--START IF(1 <= 5)-->
--code hier--
<!--END IF-->
<!--START ELSE-->
--code hier--
<!--END ELSE-->
(en zo ook meet de foreach en de include)

het voordeel van deze classe van mij is trouwens ook dat je geen functie nodig hebt om de waardes terug te krijgen, hij veranderd de aangewezen variabele :)
Avatar gebruiker
libia
wmpr
 
Berichten: 4149
Geregistreerd: 23 okt 2005 14:14
Woonplaats: Alphe!!

Re: [php] PHP-variables in templates

Berichtdoor KillerSponge » 10 mei 2008 09:21

Ik ben fan van Bloe's methode, waarom een hele scriptingtaal uitvinden als je er al een tot je beschikking hebt :)
Blabla en andere onzin - http://killersponge.nl
Avatar gebruiker
KillerSponge
Beheerder
Beheerder
 
Berichten: 14456
Geregistreerd: 24 aug 2004 13:05

Re: [php] PHP-variables in templates

Berichtdoor frizzy » 10 mei 2008 09:26

Me 2...
frizzy
wmpr
 
Berichten: 4261
Geregistreerd: 20 sep 2006 16:03
Woonplaats: Boskoop :D

Re: [php] PHP-variables in templates

Berichtdoor ElbertF » 10 mei 2008 14:22

Je leert heel wat meer door 't zelf te doen. :)
Avatar gebruiker
ElbertF
wmpr
 
Berichten: 1310
Geregistreerd: 14 nov 2007 22:09

Re: [php] PHP-variables in templates

Berichtdoor Rik » 10 mei 2008 16:22

En daarom heb ik even snel gekeken naar de functie die ik had gevonden en daarna helemaal zelf weer herschreven. :)
Avatar gebruiker
Rik
wmpr
 
Berichten: 1576
Geregistreerd: 11 jun 2005 17:59


Keer terug naar Snippets



cron