Re: [Fwd: Re: [PEAR-DEV] MVC revisted]
| From: | Philippe Jausions | Date: | Tue, 11 May 2004 20:20:54 +0000 |
| Subject: | Re: [Fwd: Re: [PEAR-DEV] MVC revisted] | ||
| References: | 1 2 3 4 5 | Groups: | php.pear.dev php.pear.dev |
| Request: | Send a blank email to pear-dev+get-29110@lists.php.net to get a copy of this message | ||
Tony Bibbs wrote:
For example adding an optional template factory that supports any of the PEAR-based template libraries is on my to-do list.Funny that you said that, because I started a thread last week about PEAR supporting/recommending standard interfaces for packages. I don't think having a factory is a good thing here because the engines are so different in their inner working and a factory would have to limit capabilities. My approach was to ask the package mainteners to comply with a PEAR-community approved interface. Since PHP5 helps code interfaces I think it's a good way to go. In a framework a template engine should be seen as a black box. We feed a template and data, and we ask for the result. We should care if the engine uses blocks, tags, pseudo-code or if the template is a string, a file or taken from a database. Here's a preview of what I'm writing (that's work in progress, I can't even guarantee that it would parse properly ;-) -Philippe <?php interface Interface_ContentGenerating {
abstract public function openTemplate($template);
abstract public function setData($name, $data = null);
abstract public function setDataByRef($name, &$data);
abstract public function output();
abstract public function toFile($filename);
abstract public function toString();
}
class HTML_Template_???Interfaced extends HTML_Template_??? implements Interface_ContentGenerating {
function HTML_Template_???Interfaced() {
$this->__construct();
}
function __construct() {
parent::__construct();
}
public function openTemplate($template) {
}
public function setData($name, $data = null) {
}
public function setDataByRef($name, &$data) {
}
public function output() {
}
public function toFile($filename) {
$file = @fopen($filename, 'wb');
if (!$file) {
require_once('PEAR.php');
return PEAR::raiseError('Couldn\'t open file to write template result to.');
}
$mgc = get_magic_quotes_runtime();
set_magic_quotes_runtime(0);
$length = @fwrite($file, $this->toString());
set_magic_quotes_runtime($mgc);
if ($length === false) {
require_once('PEAR.php');
return PEAR::raiseError('Couldn\'t write template result to file.');
}
if (!@fclose($file)) {
require_once('PEAR.php');
return PEAR::raiseError('Couldn\'t close file with template result.');
}
return $length;
}
public function toString() {
ob_start();
$this->output();
return ob_get_clean();
}
}
?>