PHP Classes

File: howtouse

Recommend this page to a friend!
  Classes of Paul Arbogast   arbplate   howtouse   Download  
File: howtouse
Role: ???
Content type: text/plain
Description: Describes how to use arbplate
Class: arbplate
Author: By
Last change:
Date: 23 years ago
Size: 10,074 bytes
 

Contents

Class file image Download
// // arbplate - An Easy and Powerful Template System v0.8a // // Copyright (c) 2001, Paul Arbogast // // // Latest version is available at http://arbplate.sourceforge.net // Send Questions or comments to arbo@att.net // Copyright (C) 2001 Paul Arbogast 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ------------------------------------------------------------ Setting up your Database: arbplate, hopefully before long, will support most databases. Currently, I only support mysql. Next up is support for a flat file database system that you can use SQL queries on, for those that have service providers that do not provide database access. To create the required tables, use included *.sql file. Currently, arbplate only uses two tables, one for site variables and one for site links, when user authentication is worked into the system, more will be used. Creating your site with arbplate: Create your index.php file for the site: --------- <?php include ( "class.arbplate.php" ) ; set_arberr(); $arb = new arbplate ( ); if ( ! ( isset( $tn ) ) ) { $tn = $ARB_CONFIG['DEF_INDEX']; } $arb -> parse ( "$tn" ); unset_arberr(); ?> --------- Now you ask, "That's great, but what about the templates?" First off, the templates must be in a specified directory. The default for the system, is "./template/arbplate". Let me show you a basic site, starting with index.arb (the default template): --------- {inc}heading.arb{/inc} <body> {inc}header.arb{/inc} {inc}indexpage.arb{/inc} {inc}footer.arb{/inc} </body> </html> --------- Now the heading.arb template: --------- <?xml version="1.0"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>{var}site{/var}</title> <meta name="description" content= "{var}description{/var}" /> <link rel="StyleSheet" href="{var}ROOT_DIR{/var}{var}SKIN{/var}.css" type="text/css" media="screen" /> </head> --------- Now, if you notice, you will see a few {var}...{/var} tags. These do variable substitution. 'site' and 'description' are defined by the user in index.php as above, or in a database if you set_db(true) like the second index.php above. The variables ROOT_DIR and SKIN are simply static variables of the class, in this case, used to build a path/filename to our stylesheet file for the related theme (skin). The next file that index.arb will load is header.arb: --------- <table width="100%"> <tr> <td> <img src="{var}sitegif{/var}" alt="{var}description{/var}" /> </td> <td class="header"> <a href="{link}l:home{/link}">{link}d:home{/link}</a> | <a href="{link}l:difpg{/link}">{link}d:downloads{/link}</a> </td> </tr> </table> --------- This loads the normal header (as I have defined it), loading my graphic (sitegif, which is defined like all other variables). You may notice the link stuff. I have taken sort of a different approach to links. I create multi-demensional arrays holding a link name, where the link points, and a description. You don't need to use the link description, I could have simply had: <a href="{link}l:home{/link}">Home</a> But I figured it would be easier to change, say from 'Home' to 'Main' if you do it like I did, and simply change your link definition, rather than going through HTML code looking all over for it. Ah, now comes your main content (indexpage.arb): --------- <table width="75%" align="center"> <tr> <td> <p>This is where you may put your content, or include more templates, generate tables or whatever.</p> </td> </tr> </table> --------- That one is pretty self explanitory for this most basic of examples, so lets move on to the footer.arb: --------- <hr /> <center>Questions? Remarks? Just <a href="{link}l:emailme{/link}">email</a> me.</center> <br /> <br /> <center><p class="sig">arbplate is {var}copyright{/var}</p></center> --------- That's just about it. If you remember, in the header.arb, we have a link to 'difpg', which is just a second page set up as an example, but of course, we will need to set up the template files for it, so here is difpg.arb: --------- {inc}heading.arb{/inc} <body> {inc}header.arb{/inc} {inc}difpgpage.arb{/inc} {inc}footer.arb{/inc} </body> </html> ---------- HEY! That's the index.arb file! Well, sort of, the only real difference is it includes difpgpage.arb rather than indexpage.arb. Here's difpgpage.arb: ---------- <table width="75%> <tr> <td> Some content on a different page. </td> </tr> </table> --------- That's it. Now you have a most basic site. Well, ok, theres the matter of that style sheet that we set up for the default theme directory, so right now, make arbplate.css in ./template/arbplate: --------- BODY { font-family : Veranda, Arial, Helvetica, Sans-Serif; color : #000000; background : #ffffff; } .sig { font-size : 8pt; font-family : sans-serif; } .header { color : orange; text-align: right; } --------- Well, if you have questions, email me, the address is above. I know this is real basic, you can do a LOT more with the system. Actually, if you keep reading, maybe you'll learn more. NOW... all those tags and how to do things (in order processed): {inc}nameoffiletoinclude.ext{/inc} Simply replaces that tag with the contents of the named file. {var}variablename{/var} Replaces tagline with content of variablename as defined (with def_static or in a database), or the content of any of the class variables (eg. VERSION, ROOT_DIR, etc). * currently inactivated - updating to make more flexible * {fill}tablename{/fill} * * This will open tablename in mysql and fill an array with the contents of the query * "select * from tablename". * * This will be expanded so you can select database to use, what to search on, and other * fun things like matching, but it's at it's most basic level now. * * As well as filling an array, this tag will be replaced with the number of rows found * in the SQL query results. This is important because it goes to use in the {rep} tag * for defining how many repitions to do. {rep}x:codetorepeatoverandover{/rep} This tagset is still under construction like the {fill}, it will be a bit more flexible as I improve it. But basically this is what you have, say you put this line in your template: {rep}4:This is iteration @@@@.<br>{/rep} What you would get is: This is iteration 0. This is iteration 1. This is iteration 2. This is iteration 3. The 4: is the count. This can be replaced with the {fill} since {fill} returns a #. The @@@@ is a placeholder to fill in the iteration number of the loop, this will fall a bit more into place when we go over {func}. You can include {inc} or {var} or whatever in a {rep} making it very versitile. {func}functionname();{/fucn} This will allow you to get away from including php code in your templates. If you have a 'common' file of sorts that contains loads of functions you want to include, simply 'include "functionsfile.php"' after the include for the class file in your index.php. Now a function doesn't have to be a function. It basically is eval'd code. So any valid php code COULD be there, but once again, that defeats the whole purpose, so just put your stuff in functions and call the function. This provides a greater seperation of content and layout. An example using the {rep}: {rep}10:@@@@ squared is {func}print sqr(@@@@);{/func}<br>{/rep} would print out: 0 squared is 0 1 squared is 1 2 squared is 1.4142135623731 .. and so on for 10 iterations. * fill tag inoperative due to construction on it. * * There is also a special function used with {rep} and {fill} to build tables from * Database files. An example: * * {rep}{fill}users{/fill}:{func}get_item(@@@@,"email");{/func}<br>{rep} * * This would: * * - Open table users and return all users (for now, until updated/improved) * - replicate the code in the rep field x times, x being the number of * rows found in table users. * - replace all of the function tagsets with the value of the 'email' field * from the database for each iteration.. * * So basically, it would print out every users email address. * * Remember, I am going to update this so you can search on specific and such. {link}A:linkname{/link} A is either l or d. If you use l, this returns the actual link to location of the realted linkname you specify. If you use d, it will return the link description. To Do: - finish text db interface - user authentication system - add query tag (it's gonna be cool) - add if tag (gotta have conditionals, right?) - some other stuff i can't remember at the moment.