need your help with PHP templating. I'm new to PHP (I'm coming from Perl+Embperl). Anyway, my problem is simple:
- I have a small template to render some item, let it be a blog post.
- The only way i know to use this template is to use 'include' directive.
- I want to call this template inside a loop going thru all the relevant blog posts.
- Problem: I need to pass a parameter(s) to this template; in this case reference to array representing a blog post.
Code looks something like this:
$rows = execute("select * from blogs where date='$date' order by date DESC");
foreach ($rows as $row){
print render("/templates/blog_entry.php", $row);
}
function render($template, $param){
ob_start();
include($template);//How to pass $param to it? It needs that $row to render blog entry!
$ret = ob_get_contents();
ob_end_clean();
return $ret;
}
Any ideas how to accomplish this? I'm really stumped :) Is there any other way to render a template?
$param should be already available inside the template. When you include() a file it should have the same scope as where it was included.
from http://php.net/manual/en/function.include.php
You could also do something like:
Then $row would be available, but still called $row.
Consider including a PHP file as if you were copy-pasting the code from the include into the position where the include-statement stands. This means that you inherit the current scope.
So, in your case, $param is already available in the given template.
I use the following helper functions when I work on simple websites:
display will output the template to the screen directly. render will return it as a string. It makes use of ob_get_contents to return the printed output of a function.