Library tutorials & articles
Implementing a template based website
A closer look
Lets take a look at
eval("\$resultbits .= \"".gettemplate("ResultsBit")."\";");
first. What the eval statement does is evaluate php code as if
you have written it yourself. For example
eval("echo \"thetext\";");
does the same as hard-coding
echo "thetext";
Our code takes advantage of this functionality, by writing it's own php code for this statement. What's the point, you may ask? Well, just as
echo "hello $name";
would output hello, and the contents of the variable, $name, the
same applies when used within an eval statement. Lets imagine that gettemplate
function returns simply
<td>$data[title]</td>
What ends up being evaluated in the call to the eval statement is
$resultbits .= "<td>$data[title]</td>";
(remembering that we need to escape characters such as $ and " within
the string). PHP then appends <td>$data[title]</td>
to the $resultbits variable, and replaces $data[title]
with its current value. In the same way, PHP replaces all the variables within
our templates with the current value (which, in this instance, has been loaded
from $data=mysql_fetch_array($query).) Our code simply loops through
the information from the database, evaluating the template for each different
value of $data[title] and appends it to $resultbits. Finally, once
the loop is complete, we call another eval statement, this time retrieving the
value from the ResultsPage template, and replacing $pagetitle,$searchquery and
$resultbits with their values in the script. Simple! :-)
And there you have it, your own template based website.
Related articles
Related discussion
-
VB4 Help needed
by admin999 (0 replies)
-
how to access the PHP web service from VB?
by jayanagi (0 replies)
-
From PHP to Visual Basic
by Mathy (0 replies)
-
VB6 to PHP convereter
by pcmattman (1 replies)
-
phpBB in VB
by hollystyles (1 replies)
Related podcasts
-
EarthClassMail.com - Moving from LAMP to .NET 3.5
Scott chats with Matt Davis, architect at EarthClassMail.com, about their move from a LAMP stack (Linux/Apache/mysql/PHP) to .NET 3.5. What's working, what's not, and what kinds of issues are they running into as their architect their solution.
Events coming up
-
Dec
3
The Auckland PHP December meetup
Auckland, New Zealand
Topic: Magento E-Commerce platform Speaker: Robert Popovic, LERO9, Robert is the Technical Director and co-founder of LERO9. Robert attended the Electrotechnical Faculty at The University of Belgrade where he graduated with a Masters in Computer Science and Information Technology. Robert has worked exclusively in the field of web and software development throughout his career.
$buffer = addslashes(get_include_contents('resultspage.htm'));
eval("echo \"".$buffer."\";");
function get_include_contents($filename) {
if (is_file($filename)) {
ob_start();
include $filename;
$contents = ob_get_contents();
ob_end_clean();
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.
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?
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
<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
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.
This thread is for discussions of Implementing a template based website.