Library articles and tutorials
Implementing a template based website
The PHP Code
Our demonstration php page is going to return the HTML for ResultsPage, along with a table full of results (with title and hits columns) using the information from the database. If you want to create the table and dummy data for the database, use the following MySQL statement:
CREATE TABLE items (
id int unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
title varchar(30) NOT NULL,
hits int NOT NULL DEFAULT ''
);
INSERT INTO items (title,hits) VALUES ('Test Item 1',29),('Test Item 2',15),('Test
Item 3',0);
Lets now take a look at the php code required to do this.
<?
#set the page title and query
$pagetitle = "Search Results";
$searchquery = "Dummy search";
#get the database information
$query = mysql_query("SELECT title,hits FROM items ORDER BY hits DESC LIMIT
10");
#loop through the results
while ($data=mysql_fetch_array($query)) {
#load the template for this instance, appending the
data onto $resultbits
eval("\$resultbits .= \"".gettemplate("ResultsBit")."\";");
}
#now return the whole template
eval("echo \"".gettemplate("ResultsPage")."\";");
?>
The code is actually very simple; it sets a few variables, loads the data from a template, and then outputs the data. However, it's those eval statements that do all the hard work, and need looking at more closely.
Related articles
Related discussion
-
how to access the PHP web service from VB?
by jayanagi (0 replies)
-
phpBB in VB
by hollystyles (1 replies)
-
VB6 to PHP convereter
by pcmattman (1 replies)
-
using inet or webbrowser and PHP in a program
by alexreg (1 replies)
-
From PHP to Visual Basic
by Mathy (0 replies)
I have been trying to use php's inlude to include a template file which has been marked up with some php variables. However when using include() the php parsing drops out. This code keeps the parsing on. Hope its of use to someone.
$buffer = addslashes(getincludecontents('resultspage.htm'));
eval("echo \"".$buffer."\";");
function getincludecontents($filename) {
if (isfile($filename)) {
obstart();
include $filename;
$contents = obgetcontents();
obendclean();
return $contents;
}
return false;
}
results page.htm:
....
<TD>{$output[num_responses]}</TD>
....
This sample is great BUT have a cuople of errors.
The file test.php is missing "#include template.php";.
The file template.php presents a variable $name that must be repalced with $templatename.
If you solve this all will work fine.
The article was written before PHP had made this a requirement - I'll try and get the article updated to reflect these changes.
The article demonstrates two methods - one that uses a MySQL database to store the templates, and one that just uses a folder on the website.
I'm having a really hard time understanding how this works and I am not able to test it since I don't have a mysql server setup on my computer. Does anyone have an example they could show me that doesn't involve connecting to a database?
The reason you get th error about $resultbits be undefined is because of the eval statement.
eval("\$resultbits .= \"".gettemplate("ResultsBit")."\";");
The operator underlined above takes to output of the gettemplate function and adds it to the $resultbits variable. However, in the script in the example does not give $resultbits a value before this eval statement, which causes the undefined error.
To solve this probelm, simple set the $resultbits variable to an empty string at the beginning of the script usein the line below:
$resultbits="";
This should solve the undefined variable error.
As for the different spelling you mentioned, I beleive it is just a typing error.
Hope this helps
Happy Programming
Defiant
To make the template system work, the most important thing to remember is that any PHP variable you use in the template must be defined prior to calling the template. Take the template bwlow, which I use in my sites:
<html>
<head>
<title>$pagetitle</title>
<link rel="stylesheet" type="text/css" href="../css/main.css">
<script language="JavaScript" src="../scripts/global.js" type="text/javascript"></script>
</head>
<body bgcolor=#470848 topmargin="0" leftmargin="0" marginheight="0" marginwidth="0" text=#D5D3D3>
<table border=0 cellpadding=0 cellspacing=0 width="100%" height=100%>
<tr height=90>
<td width=146 align=center><img src="../images/bigbullet1.jpg" width=91 height=90></td>
<td align=center><img src="../images/logo.gif" width="456" height="39"></td>
</tr>
<tr><td>
<table background="../images/menucenter.jpg" cellpadding=0 cellspacing=0 border=0 height=100%>
<tr><td class=bg><img src="../images/menutop.jpg"></td></tr>
$pagemenu
<tr><td height=99% valign=bottom><img src="../images/menubottom.jpg"></td></tr>
</table>
</td>
<td valign=top>
<center><img src="../images/line2.jpg" width=355 height=10><br>$pageheading</center><br>
$pagecontent
</td></tr>
</table>
</body>
</html>
The PHP variable, shown in bold face, must be defined before calling the template. Below is a typical page I would use with this template.
<?php
require "../php/global.inc";
require "../php/about-menu.inc";
$pagetitle = "About My Site";
$pageheading="<h3>Please choose a area you would like to learn about.</h3>";
$pagecontent = "";
$pagemenu="";
for ($i=0; $i < count($menunames); $i++) {
eval("\$pagemenu .= \"".gettemplate("menu")."\";");
}
eval("echo \"".gettemplate("main")."\";");
?>
The require statements import function unigue to my site. The point here is to show that I had to make sure that all the vairable I use in the template are defined. I also found that it works best if you give any variables you use in the templete to an empty string at the beginning of the script. It will take of some headaches later(trust me).
I hope this helps. The example I have shown works on my system. If you have problems getting it working for your self, email me and I would be happy to help. My address is defiantapp_s@omnitelcom.com
Happy Programming
Defiant
P.S. Sorry for the delay on posting a reply, been pritty busy. I will try to keep a closer eye in the future.
I find this article very interesting, but I don't succeed in making it working with an MS Access database and would be glad for any help or information how to do it.
Stephan Wölfel
stw@freesurf.fr
Could you pass on what you did to iron out the problems?
Just a short message to say how useful this topic was. I am currently developing a web site and found the information in this article very useful. It took a couple of tries to iron out the problems I had getting it started, but other then that, everything is working very well.
Thanks for the tip.
Happy Programs
btw, there is a misunderstanding with "resultsbit" instead of "resultbit". Anyways, it's quite nice
I have read the article and kinda understand. But how would you create the template using MS Access 97.
So is it not easy at all but sort of possible?
I am very good with HTML, PHP, and some others, but I am just now starting ASP. I got tired of SQL and moving on to some experimenting with ASP and OBDC.
Conversion of VBScript ASP isn't as easy, as it doesn't currently have an equivilant of the eval statement.... using JScript in an ASP file might well let you do that (I've never used it), in which case it should be fairly easy....
How well could you integrate this into ASP?
I am working on an ASP project and would love to use something to this effect. Could you make another tutorial on how to do this in ASP. I am not to good at converting things to ASP quite yet, and I have only created 3 things in ASP.
Anything would help.