Template php variable maken
jolly9 - 22/09/2006 10:42 (laatste wijziging 22/09/2006 11:35)
Nieuw lid
is het mogelijk om in een bestaande template:
in die file nog php code uit te voeren?
<?
$temp = template.inc
$t=new Template;
$t->set_file("ctlr","/language.php"); // deze regel is toegevoegd en is bedoelt om alle tekst die van een bepaalde taal afhankelijk zijn te vervangen.
$t->set_file("ctlr","$temp");
$t->set_block("ctlr","desc","hd");
$t->set_var(array(
"text1"=>$text1,
"text2"=>$text2,
"text3"=>$text3,
));
$t->parse("hd","desc",true);
}
}
?>
<?
$temp = template. inc
$t = new Template;
$t -> set_file ( "ctlr" , "/language.php" ) ; // deze regel is toegevoegd en is bedoelt om alle tekst die van een bepaalde taal afhankelijk zijn te vervangen.
$t -> set_file ( "ctlr" , "$temp " ) ;
$t -> set_block ( "ctlr" , "desc" , "hd" ) ;
"text1" => $text1 ,
"text2" => $text2 ,
"text3" => $text3 ,
) ) ;
$t -> parse ( "hd" , "desc" , true ) ;
}
}
?>
i vroeg me dus af of ik op een simple manier een extra file in de template kan toevoegen
zonder alles opnieuw uit te schrijven onder array "xxx" => yyy, etc etc.
en zo ja hoe doe ik dat?
groetjes
7 antwoorden
Gesponsorde links
Wijnand - 22/09/2006 11:35 (laatste wijziging 22/09/2006 11:35)
Moderator
uhh, sommige template engines kunnen het wel, sommige niet.
Welke gebruik jij?
Verder kun je om de code op dit forum even [ code ] en [ /code ] zetten (nu heb ik het gedaan voor je), dan is het duidelijker leven.
jolly9 - 22/09/2006 11:44
Nieuw lid
ik heb geen idee...
waar kan ik dat zien....
ik heb algekeken naar smarty maar die staan volgens mij niet
op de server... althans... met >locate smarty ... krijg ik nix.
jolly9 - 22/09/2006 12:29
Nieuw lid
ik heb ze door gelezen maar het lijkt er op dat ik geen van de drie gebruik.
ik heb namelijk een file die ik include in het bestaande bestand
namelijk:
<?php
class Template {
var $classname = "Template";
/* if set, echo assignments */
var $debug = false;
/* $file[handle] = "filename"; */
var $file = array();
/* relative filenames are relative to this pathname */
var $root = "";
/* $varkeys[key] = "key"; $varvals[key] = "value"; */
var $varkeys = array();
var $varvals = array();
/* "remove" => remove undefined variables
* "comment" => replace undefined variables with comments
* "keep" => keep undefined variables
*/
var $unknowns = "remove";
/* "yes" => halt, "report" => report error, continue, "no" => ignore error quietly */
var $halt_on_error = "yes";
/* last error message is retained here */
var $last_error = "";
/***************************************************************************/
/* public: Constructor.
* root: template directory.
* unknowns: how to handle unknown variables.
*/
function Template($root = ".", $unknowns = "remove") {
$this->set_root($root);
$this->set_unknowns($unknowns);
}
/* public: setroot(pathname $root)
* root: new template directory.
*/
function set_root($root) {
if (!is_dir($root)) {
$this->halt("set_root: $root is not a directory.");
return false;
}
$this->root = $root;
return true;
}
/* public: set_unknowns(enum $unknowns)
* unknowns: "remove", "comment", "keep"
*
*/
function set_unknowns($unknowns = "keep") {
$this->unknowns = $unknowns;
}
/* public: set_file(array $filelist)
* filelist: array of handle, filename pairs.
*
* public: set_file(string $handle, string $filename)
* handle: handle for a filename,
* filename: name of template file
*/
function set_file($handle, $filename = "") {
if (!is_array($handle)) {
if ($filename == "") {
$this->halt("set_file: For handle $handle filename is empty.");
return false;
}
$this->file[$handle] = $this->filename($filename);
} else {
reset($handle);
while(list($h, $f) = each($handle)) {
$this->file[$h] = $this->filename($f);
}
}
}
/* public: set_block(string $parent, string $handle, string $name = "")
* extract the template $handle from $parent,
* place variable {$name} instead.
*/
function set_block($parent, $handle, $name = "") {
if (!$this->loadfile($parent)) {
$this->halt("subst: unable to load $parent.");
return false;
}
if ($name == "")
$name = $handle;
$str = $this->get_var($parent);
$reg = "/<!--\s+BEGIN $handle\s+-->(.*)\n\s*<!--\s+END $handle\s+-->/sm";
preg_match_all($reg, $str, $m);
$str = preg_replace($reg, "{" . "$name}", $str);
$this->set_var($handle, $m[1][0]);
$this->set_var($parent, $str);
}
/* public: set_var(array $values)
* values: array of variable name, value pairs.
*
* public: set_var(string $varname, string $value)
* varname: name of a variable that is to be defined
* value: value of that variable
*/
function set_var($varname, $value = "") {
if (!is_array($varname)) {
if (!empty($varname))
if ($this->debug) print "scalar: set *$varname* to *$value*<br>\n";
$this->varkeys[$varname] = "/".$this->varname($varname)."/";
$this->varvals[$varname] = $value;
} else {
reset($varname);
while(list($k, $v) = each($varname)) {
if (!empty($k))
if ($this->debug) print "array: set *$k* to *$v*<br>\n";
$this->varkeys[$k] = "/".$this->varname($k)."/";
$this->varvals[$k] = $v;
}
}
}
/* public: subst(string $handle)
* handle: handle of template where variables are to be substituted.
*/
function subst($handle) {
if (!$this->loadfile($handle)) {
$this->halt("subst: unable to load $handle.");
return false;
}
$str = $this->get_var($handle);
$str = @preg_replace($this->varkeys, $this->varvals, $str);
return $str;
}
/* public: psubst(string $handle)
* handle: handle of template where variables are to be substituted.
*/
function psubst($handle) {
print $this->subst($handle);
return false;
}
/* public: parse(string $target, string $handle, boolean append)
* public: parse(string $target, array $handle, boolean append)
* target: handle of variable to generate
* handle: handle of template to substitute
* append: append to target handle
*/
function parse($target, $handle, $append = false) {
if (!is_array($handle)) {
$str = $this->subst($handle);
if ($append) {
$this->set_var($target, $this->get_var($target) . $str);
} else {
$this->set_var($target, $str);
}
} else {
reset($handle);
while(list($i, $h) = each($handle)) {
$str = $this->subst($h);
$this->set_var($target, $str);
}
}
return $str;
}
function pparse($target, $handle, $append = false) {
print $this->parse($target, $handle, $append);
return false;
}
/* public: get_vars()
*/
function get_vars() {
reset($this->varkeys);
while(list($k, $v) = each($this->varkeys)) {
$result[$k] = $this->varvals[$k];
}
return $result;
}
/* public: get_var(string varname)
* varname: name of variable.
*
* public: get_var(array varname)
* varname: array of variable names
*/
function get_var($varname) {
if (!is_array($varname)) {
return $this->varvals[$varname];
} else {
reset($varname);
while(list($k, $v) = each($varname)) {
$result[$k] = $this->varvals[$k];
}
return $result;
}
}
/* public: get_undefined($handle)
* handle: handle of a template.
*/
function get_undefined($handle) {
if (!$this->loadfile($handle)) {
$this->halt("get_undefined: unable to load $handle.");
return false;
}
preg_match_all("/\{([^}]+)\}/", $this->get_var($handle), $m);
$m = $m[1];
if (!is_array($m))
return false;
reset($m);
while(list($k, $v) = each($m)) {
if (!isset($this->varkeys[$v]))
$result[$v] = $v;
}
if (count($result))
return $result;
else
return false;
}
/* public: finish(string $str)
* str: string to finish.
*/
function finish($str) {
switch ($this->unknowns) {
case "keep":
break;
case "remove":
$str = preg_replace('/{[^ \t\r\n}]+}/', "", $str);
break;
case "comment":
$str = preg_replace('/{([^ \t\r\n}]+)}/', "<!-- Template $handle: Variable \\1 undefined -->", $str);
break;
}
return $str;
}
/* public: p(string $varname)
* varname: name of variable to print.
*/
function p($varname) {
print $this->finish($this->get_var($varname));
}
function get($varname) {
return $this->finish($this->get_var($varname));
}
/***************************************************************************/
/* private: filename($filename)
* filename: name to be completed.
*/
function filename($filename) {
if (substr($filename, 0, 1) != "/") {
$filename = $this->root."/".$filename;
}
if (!file_exists($filename))
$this->halt("filename: file $filename does not exist.");
return $filename;
}
/* private: varname($varname)
* varname: name of a replacement variable to be protected.
*/
function varname($varname) {
return preg_quote("{".$varname."}");
}
/* private: loadfile(string $handle)
* handle: load file defined by handle, if it is not loaded yet.
*/
function loadfile($handle) {
if (isset($this->varkeys[$handle]) and !empty($this->varvals[$handle]))
return true;
if (!isset($this->file[$handle])) {
$this->halt("loadfile: $handle is not a valid handle.");
return false;
}
$filename = $this->file[$handle];
$str = implode("", @file($filename));
if (empty($str)) {
$this->halt("loadfile: While loading $handle, $filename does not exist or is empty.");
return false;
}
$this->set_var($handle, $str);
return true;
}
/***************************************************************************/
/* public: halt(string $msg)
* msg: error message to show.
*/
function halt($msg) {
$this->last_error = $msg;
if ($this->halt_on_error != "no")
$this->haltmsg($msg);
if ($this->halt_on_error == "yes")
die("<b>Halted.</b>");
return false;
}
/* public, override: haltmsg($msg)
* msg: error message to show.
*/
function haltmsg($msg) {
printf("<b>Template Error:</b> %s<br>\n", $msg);
}
}
?>
<?php
class Template {
var $classname = "Template" ;
/* if set, echo assignments */
var $debug = false ;
/* $file[handle] = "filename"; */
/* relative filenames are relative to this pathname */
var $root = "" ;
/* $varkeys[key] = "key"; $varvals[key] = "value"; */
/* "remove" => remove undefined variables
* "comment" => replace undefined variables with comments
* "keep" => keep undefined variables
*/
var $unknowns = "remove" ;
/* "yes" => halt, "report" => report error, continue, "no" => ignore error quietly */
var $halt_on_error = "yes" ;
/* last error message is retained here */
var $last_error = "" ;
/***************************************************************************/
/* public: Constructor.
* root: template directory.
* unknowns: how to handle unknown variables.
*/
function Template( $root = "." , $unknowns = "remove" ) {
$this -> set_root ( $root ) ;
$this -> set_unknowns ( $unknowns ) ;
}
/* public: setroot(pathname $root)
* root: new template directory.
*/
function set_root( $root ) {
$this -> halt ( "set_root: $root is not a directory." ) ;
return false ;
}
$this -> root = $root ;
return true ;
}
/* public: set_unknowns(enum $unknowns)
* unknowns: "remove", "comment", "keep"
*
*/
function set_unknowns( $unknowns = "keep" ) {
$this -> unknowns = $unknowns ;
}
/* public: set_file(array $filelist)
* filelist: array of handle, filename pairs.
*
* public: set_file(string $handle, string $filename)
* handle: handle for a filename,
* filename: name of template file
*/
function set_file( $handle , $filename = "" ) {
if ( $filename == "" ) {
$this -> halt ( "set_file: For handle $handle filename is empty." ) ;
return false ;
}
$this -> file [ $handle ] = $this -> filename ( $filename ) ;
} else {
$this -> file [ $h ] = $this -> filename ( $f ) ;
}
}
}
/* public: set_block(string $parent, string $handle, string $name = "")
* extract the template $handle from $parent,
* place variable {$name} instead.
*/
function set_block( $parent , $handle , $name = "" ) {
if ( ! $this -> loadfile ( $parent ) ) {
$this -> halt ( "subst: unable to load $parent ." ) ;
return false ;
}
if ( $name == "" )
$name = $handle ;
$str = $this -> get_var ( $parent ) ;
$reg = "/<!--\s+BEGIN $handle \s+-->(.*)\n \s*<!--\s+END $handle \s+-->/sm" ;
$this -> set_var ( $handle , $m [ 1 ] [ 0 ] ) ;
$this -> set_var ( $parent , $str ) ;
}
/* public: set_var(array $values)
* values: array of variable name, value pairs.
*
* public: set_var(string $varname, string $value)
* varname: name of a variable that is to be defined
* value: value of that variable
*/
function set_var( $varname , $value = "" ) {
if ( $this -> debug ) print "scalar: set *$varname * to *$value *<br>\n " ; $this -> varkeys [ $varname ] = "/" . $this -> varname ( $varname ) . "/" ;
$this -> varvals [ $varname ] = $value ;
} else {
if ( $this -> debug ) print "array: set *$k * to *$v *<br>\n " ; $this -> varkeys [ $k ] = "/" . $this -> varname ( $k ) . "/" ;
$this -> varvals [ $k ] = $v ;
}
}
}
/* public: subst(string $handle)
* handle: handle of template where variables are to be substituted.
*/
function subst( $handle ) {
if ( ! $this -> loadfile ( $handle ) ) {
$this -> halt ( "subst: unable to load $handle ." ) ;
return false ;
}
$str = $this -> get_var ( $handle ) ;
return $str ;
}
/* public: psubst(string $handle)
* handle: handle of template where variables are to be substituted.
*/
function psubst( $handle ) {
print $this -> subst ( $handle ) ;
return false ;
}
/* public: parse(string $target, string $handle, boolean append)
* public: parse(string $target, array $handle, boolean append)
* target: handle of variable to generate
* handle: handle of template to substitute
* append: append to target handle
*/
function parse( $target , $handle , $append = false ) {
$str = $this -> subst ( $handle ) ;
if ( $append ) {
$this -> set_var ( $target , $this -> get_var ( $target ) . $str ) ;
} else {
$this -> set_var ( $target , $str ) ;
}
} else {
$str = $this -> subst ( $h ) ;
$this -> set_var ( $target , $str ) ;
}
}
return $str ;
}
function pparse( $target , $handle , $append = false ) {
print $this -> parse ( $target , $handle , $append ) ; return false ;
}
/* public: get_vars()
*/
function get_vars( ) {
while ( list ( $k , $v ) = each ( $this -> varkeys ) ) { $result [ $k ] = $this -> varvals [ $k ] ;
}
return $result ;
}
/* public: get_var(string varname)
* varname: name of variable.
*
* public: get_var(array varname)
* varname: array of variable names
*/
function get_var( $varname ) {
return $this -> varvals [ $varname ] ;
} else {
$result [ $k ] = $this -> varvals [ $k ] ;
}
return $result ;
}
}
/* public: get_undefined($handle)
* handle: handle of a template.
*/
function get_undefined( $handle ) {
if ( ! $this -> loadfile ( $handle ) ) {
$this -> halt ( "get_undefined: unable to load $handle ." ) ;
return false ;
}
$m = $m [ 1 ] ;
return false ;
if ( ! isset ( $this -> varkeys [ $v ] ) ) $result [ $v ] = $v ;
}
return $result ;
else
return false ;
}
/* public: finish(string $str)
* str: string to finish.
*/
function finish( $str ) {
switch ( $this -> unknowns ) {
case "keep" :
break ;
case "remove" :
break ;
case "comment" :
$str = preg_replace ( '/{([^ \t\r\n}]+)}/' , "<!-- Template $handle : Variable \\1 undefined -->" , $str ) ; break ;
}
return $str ;
}
/* public: p(string $varname)
* varname: name of variable to print.
*/
function p( $varname ) {
print $this -> finish ( $this -> get_var ( $varname ) ) ; }
function get( $varname ) {
return $this -> finish ( $this -> get_var ( $varname ) ) ;
}
/***************************************************************************/
/* private: filename($filename)
* filename: name to be completed.
*/
function filename( $filename ) {
if ( substr ( $filename , 0 , 1 ) != "/" ) { $filename = $this -> root . "/" . $filename ;
}
$this -> halt ( "filename: file $filename does not exist." ) ;
return $filename ;
}
/* private: varname($varname)
* varname: name of a replacement variable to be protected.
*/
function varname( $varname ) {
}
/* private: loadfile(string $handle)
* handle: load file defined by handle, if it is not loaded yet.
*/
function loadfile( $handle ) {
if ( isset ( $this -> varkeys [ $handle ] ) and
! empty ( $this -> varvals [ $handle ] ) ) return true ;
if ( ! isset ( $this -> file [ $handle ] ) ) { $this -> halt ( "loadfile: $handle is not a valid handle." ) ;
return false ;
}
$filename = $this -> file [ $handle ] ;
$this -> halt ( "loadfile: While loading $handle , $filename does not exist or is empty." ) ;
return false ;
}
$this -> set_var ( $handle , $str ) ;
return true ;
}
/***************************************************************************/
/* public: halt(string $msg)
* msg: error message to show.
*/
function halt( $msg ) {
$this -> last_error = $msg ;
if ( $this -> halt_on_error != "no" )
$this -> haltmsg ( $msg ) ;
if ( $this -> halt_on_error == "yes" )
return false ;
}
/* public, override: haltmsg($msg)
* msg: error message to show.
*/
function haltmsg( $msg ) {
printf ( "<b>Template Error:</b> %s <br>\n " , $msg ) ; }
}
?>
het enige wat ik wil weten of er mogelijk is m.b.v. 2 verschillende language files: Language_EN.php / Language_FR.php te includen waar door de taal wordt gewijzigd.
jolly9 - 22/09/2006 12:47 (laatste wijziging 22/09/2006 12:54)
Nieuw lid
ff een test pagina wat ik dus nu probeer is dit:
<?php
include("temp_inc.php"); // dat is de file die ik hierboven heb gepost.
$text1="HALLOWWW";
$temp = "template.inc";
$lang = "lang_en.txt";
{
$t=new Template;
$t->set_file("ctlr","$lang");
$t->set_file("ctlr","$temp");
$t->set_block("ctlr","desc","hd");
require(lang_en.txt);
$t->set_var(array(
//include("lang_en.txt");
"text1"=>$text1,
"text2"=>$text2,
"text3"=>$text3
));
//$t->set_var(array("dycity"=>$loc));
$t->parse("hd","desc",true);
$t->parse("opt","ctlr");
$t->p("opt");
}
?>
<?php
include ( "temp_inc.php" ) ; // dat is de file die ik hierboven heb gepost.
$text1 = "HALLOWWW" ;
$temp = "template.inc" ;
$lang = "lang_en.txt" ;
{
$t = new Template;
$t -> set_file ( "ctlr" , "$lang " ) ;
$t -> set_file ( "ctlr" , "$temp " ) ;
$t -> set_block ( "ctlr" , "desc" , "hd" ) ;
require ( lang_en. txt) ;
//include("lang_en.txt");
"text1" => $text1 ,
"text2" => $text2 ,
"text3" => $text3
) ) ;
//$t->set_var(array("dycity"=>$loc));
$t -> parse ( "hd" , "desc" , true ) ;
$t -> parse ( "opt" , "ctlr" ) ;
$t -> p ( "opt" ) ;
}
?>
dit is de code die bijv. de lang_en.txt bevat bijv.
$t->set_var(array(
"lang1"=>"EN 1",
"lang2"=>"EN 2",
"lang3"=>EN 3
));
"lang1" => "EN 1" ,
"lang2" => "EN 2" ,
"lang3" => EN 3
) ) ;
maar hiermee is het mij dus nog niet gelukt... ik krijg wel "HALLOWWW" te zien maar nog niet de EN 1,2 of 3 ....
...........................edit...........................:::
dit kan overigens wel, ben ik inmiddels achter, maar een combinatie
om 2 templates te include is me nog niet gelukt... dus
graag jou expertise hierover...
<?php
include("temp_inc.php");
$text1="HALLOWWW";
$temp = "template.inc";
$lang = "lang_en.php";
{
$t=new Template;
$t->set_file("ctlr","$lang");
$t->set_file("ctlr","$temp");
$t->set_block("ctlr","desc","hd");
include("lang_en.php");
//require(lang_en.txt);
/*
$t->set_var(array(
include("lang_en.php");
"text1"=>$text1,
"text2"=>$text2,
"text3"=>$text3
));
*/
//$t->set_var(array("dycity"=>$loc));
$t->parse("hd","desc",true);
$t->parse("opt","ctlr");
$t->p("opt");
}
?>
<?php
include ( "temp_inc.php" ) ;
$text1 = "HALLOWWW" ;
$temp = "template.inc" ;
$lang = "lang_en.php" ;
{
$t = new Template;
$t -> set_file ( "ctlr" , "$lang " ) ;
$t -> set_file ( "ctlr" , "$temp " ) ;
$t -> set_block ( "ctlr" , "desc" , "hd" ) ;
include ( "lang_en.php" ) ;
//require(lang_en.txt);
/*
$t->set_var(array(
include("lang_en.php");
"text1"=>$text1,
"text2"=>$text2,
"text3"=>$text3
));
*/
//$t->set_var(array("dycity"=>$loc));
$t -> parse ( "hd" , "desc" , true ) ;
$t -> parse ( "opt" , "ctlr" ) ;
$t -> p ( "opt" ) ;
}
?>
Thomas - 22/09/2006 15:13
Moderator
Ik zou voor elke taal een folder met templates maken:
templates/en/...
templates/nl/...
die dus verder dezelfde templates hebben, maar inhoudelijk van taal verschillen.
Op grond van de geselecteerde taal lees je uit een van de twee folders. Hier kom je bijna niet omheen als je meerdere talen wilt gebruiken.
Gesponsorde links
Dit onderwerp is gesloten .