<?php
/*
DynamicTemplate v1.1 - DynamicTemplate.php5 v1.1 2007/03/07
This class enables you to insert the body of a web page into your website.
More precisely, it wraps your website's look (or template) around the desired web page.
Copyright (c) 2007 DAKEDO
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
designer: DAKEDO, Online Shopping Mall
url: http://www.dakedo.com
download: http://www.dakedo.com/blogs/27/2007/02/blogger-integration.html
email: contact@dakedo.com
*/
abstract class DynamicTemplate {
var $page, $globals;
function DynamicTemplate($templateFile,$globals = array()) {
$this->globals = $globals;
$this->page = $this->load($templateFile);
}
abstract protected function processBody($page_body);//called at the end of mergeBody
abstract protected function processHead($page_head);//called at the end of mergeHead
abstract protected function get_File_To_Include($path, $file);//called in output
abstract protected function copyright();//allows a subclass developper to include his copyright
final function output() {
//get the page to insert
$file = $_GET['file'];
if (isset($_GET['language'])) $language_code = $_GET['language'];
else $language_code = '';
$path = ($language_code!=''?$language_code . '/':'');
//if the file doesn't exist, die
if ( ($file != '') && (!file_exists($path . $file)) ) die("wrong file name!");
$included_file = $this->get_File_To_Include($path, $file);
if ($included_file === false) die("page not found!");
$buffer = $this->load($included_file);
$page_head = $this->getHead($buffer);
$page_body = $this->getBody($buffer);
unset($buffer);
$this->mergeHead($page_head);
$this->mergeBody($page_body);
echo $this->page;
}
final protected function load($file) {
//globals that need to be defined in the template
foreach ($this->globals as $global) eval("global \$" . $global . ";");
//start output buffering
ob_start();
require $file;
//get everything into a variable
$buffer = ob_get_contents();
//stop the buffer output
ob_end_clean();
return $buffer;
}
final protected function getBody($page) {
$body_tag_pos = strpos($page, "<body");
$body_tag_end_pos = strpos($page, ">", $body_tag_pos);
$body_end_pos = strpos($page, "</body>");
return substr($page, $body_tag_end_pos + 1, $body_end_pos - 1 - $body_tag_end_pos);
}
final protected function getHead($page) {
$head_pos = strpos($page, "<head>");
$head_end_pos = strpos($page, "</head>");
return substr($page, $head_pos + 6, $head_end_pos - 6 - $head_pos);
}
final protected function mergeBody($page_body) {
//insert the body of the page into the template
$this->page = str_replace("<\$DynamicTemplateBody\$>", $page_body, $this->page);
$this->processBody($page_body);
//Copyright announcement (html comment, not visible on the web page of course)
//This announcement complies with section 2c of the GNU General Public License (GPL) and thus can not be removed.
$this->page = eregi_replace('(<body[^<^>]+>)',"\\1\r<!--\r" . $this->copyright() . "\rDynamicTemplate V1.0\rCopyright (c) 2007 DAKEDO\rReleased under the GNU General Public License\rurl: http://www.dakedo.com\rfree download: http://www.dakedo.com/blogs/27/2007/02/blogger-integration.html\r" . "-->\r" ,$this->page);
}
final protected function mergeHead($page_head) {
$this->page = str_replace("<head>", "<head>\r" . $page_head, $this->page);
//p {...margin:0;...} (in the header)
$this->page = eregi_replace('((p[ ]+\{[^}]*)margin:[0-9]+[;]*([^{]+\}))','\\2\\3',$this->page);
//a:link {..text-decoration:underline;...}
$this->page = eregi_replace('((a:(link|visited|hover|active)[ ]+\{[^}]*)text-decoration:underline[;]*([^{]+\}))','\\3\\4',$this->page);
//remove body {..} so that there be no interference with mine
$this->page = eregi_replace('(body[ ]*{[^{^}]+})','',$this->page);
$this->processHead($page_head);
}
}
?>
|