For a while now, I’ve been working on a framework that should, ultimatly, allow me to create a website by simply uploading the framework, modules the site needs, run a few installers and thats it. If it needs something I don’t have yet, I would be able to just write a new module without having to worry about things like sessions, users, etc, because the framework does that.
I did a few total rewrites, I’ve been verry unhappy about the way things work several times, but now I feel I’m really getting on my way.
There is just one thing left, really: A theme system. Its not that hard to just make a simple text-replacement system, but that just wouldn’t do. Partially because I want to give the person who makes it full control, so they need to be able to use PHP. And that, right there, makes it kinda hard. The theme/template file has PHP, so it needs to be parsed by the Zend Engine. (Sure, if I would really really really want to, I might be able to get the contents of the file, use a few dozen regular expressions, and be able to do basic PHP that way, but that would take ages to develop, ages to run, and would only allow basic PHP; I want it all.) However, when you do that, everything is outputted to the client (= whatever requested the page) rightaway, which I don’t want. (For several reasons. One being that I might need to set cookies, start sessions, etc after primary output. Another one is: The page title has to be partially set by the running module, but that would mean that the module is responsible for using the templating system, which I don’t want. All it should have to do is $this->engine->template(‘comments’);, and the framework would do everything else.)
Just now, I did find a solution: PHP’s output buffering system.
It wouldn’t be verry hard, I beleave. Consider the following function (as a part of the Framework’s engine class)
public function template( $what )
{
ob_start();
//
// The magic of grabbing the right file, executing it
//
$output = ob_get_contents();
ob_end_clean();
return $output;
}
This, right now, seems to be the way to do this. However, I have never worked with PHP’s output buffering, and thus, have no idea if this would actually work as I want it to, how it is on speed / memory usage, etc.
So I gues thats really the point of this blogpost (other then posting. 😛 ), to find out of any of my nonexistant users is could give me some advice on the ob_ functions.