PHP Classes

File: DynamicTemplate.php5

Recommend this page to a friend!
  Classes of DAKEDO, Online Shopping Mall   Blogger Integration   DynamicTemplate.php5   Download  
File: DynamicTemplate.php5
Role: Class source
Content type: text/plain
Description: PHP5 class file
Class: Blogger Integration
Import a blog published in Blogger.com into a site
Author: By
Last change: Bug fixes in the class DynamicTemplate

* The body was not detected when there were parameters in the <body> tag.

* Before loading the template, the global variables used by the template need to be declared. So the constructor of the class DynamicTemplate takes one more parameter: an array containing the names of the global variables needed by the template.
Date: 17 years ago
Size: 4,541 bytes
 

Contents

Class file image Download
<?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);
}


}
?>