jj20051 Posted November 8, 2010 Share Posted November 8, 2010 I've been trying to create a basic template system that will replace the data in {} correctly. The template system is supposed to auto load any pages called into the file by things like {load header} and replace the variables in there, but it doesn't... Here is my code and an example page: <?php $site_title = "This Title Works Just Fine"; $template_index = 'index.php'; $template_header = 'header.php'; $template = './templates/default'; class templateParser { var $output; function templateParser($templateFile='default_template.htm'){ (file_exists($templateFile))?$this->output=file_get_contents($templateFile):die('Error:Template file '.$templateFile.' not found'); } function parseTemplate($tags=array()){ if(count($tags)>0){ foreach($tags as $tag=>$data){ $data=(file_exists($data))?$this->parseFile($data):$data; $this->output=str_replace ('{'.$tag.'}',$data,$this->output); } } else { die('[Error: 023 - Template Variables Invalid or Missing]'); } } function parseFile($file){ ob_start(); include($file); $content=ob_get_contents(); ob_end_clean(); return $content; } function display(){ return $this->output; } } // Tags $tags = array( 'site_title'=>$site_title, 'load_header'=>$template.$template_header ); // instantiate a new template Parser object $tp=&new templateParser($template.$template_index); // parse template file $tp->parseTemplate($tags); // display generated page echo $tp->display(); ?> Example Page Code: // index.php {load_header} <div id="container"> <div id="left"> <div id="lefttitle">{site_title}</div><br><p> </p> </div> // header.php <title>{site_title}</title> </head> <body> <div id="headertitle">{site_title}</div> So the page loads fine... The problem is that the site title remains {site_title} and so does the "headertitle". The problem with this is that both are defined in the tags array and should be replaced by the variable $site_title. The "replacement" works just fine in index.php (replacing {site_title} like it should), but will not replace it in header.php which is why there is a problem. Can anyone help me fix this? Quote Link to comment https://forums.phpfreaks.com/topic/218110-could-someone-look-over-my-code-please/ Share on other sites More sharing options...
jj20051 Posted November 8, 2010 Author Share Posted November 8, 2010 Bump. Quote Link to comment https://forums.phpfreaks.com/topic/218110-could-someone-look-over-my-code-please/#findComment-1131810 Share on other sites More sharing options...
mikosiko Posted November 8, 2010 Share Posted November 8, 2010 just a friendly suggestion... You should read Forum Rule # 17 and Forum DO NOT http://www.phpfreaks.com/page/rules-and-terms-of-service#toc_forum_do_nots Quote Link to comment https://forums.phpfreaks.com/topic/218110-could-someone-look-over-my-code-please/#findComment-1131829 Share on other sites More sharing options...
jj20051 Posted November 8, 2010 Author Share Posted November 8, 2010 Alright, I apologize... I assumed that because it drifted down past 20 that no one had really looked at it... I will wait until after its on the second page from now on. Maybe I'll flip some code around to see if it helps. Update: Apparently if I run it through the function parseTemplate twice (once before and after loading the pages that fixes the problem. Quote Link to comment https://forums.phpfreaks.com/topic/218110-could-someone-look-over-my-code-please/#findComment-1131837 Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.