Jeg går normail hele vejen og gør følgende:
Først har jeg min layout fil eller slet og ret min html fil.
Den fylder jeg med unikke afsnit som jeg kan køre en str_replace på.
Et eksempel kunne være:
{VAR:TITLE}
eller
{VAR:NAME} (I metatagget)
{VAR:SCRIPT} (For javascript)
{VAR:CSS} (for css fil)
{VAR:BANNER}
osv.
Dette gør at jeg 100% dynamisk kan styre indholdet.
Eksempel fra en "live" fil
<?xml version="1.1" encoding="iso-8859-1"?>
<!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" xml:lang="da">
<head>
<meta http-equiv="Content-Type" content="application/xhtml+xml" name="{VAR:NAME}" />
<title>{VAR:TITLE}</title>
<link type="text/css" rel="stylesheet" href="{VAR:STYLE}.css" />
{VAR:SCRIPTS}
</head>
<body>
<div id="wrap">
<div id="banner">{VAR:BANNER}</div>
<div id="hold">
<div id="menu">{VAR:MENU}</div>
<div id="submenu">{VAR:SUB}</div>
</div>
<div id="main">
<div id="text">{VAR:MAIN}</div>
</div>
</div>
</body>
</html>
Det næste jeg gør at få hele indholdet ind i en streng fra min index.php side.
$page = file_get_contenst("layout.html");
Denne streng kan jeg så lave str_replace på.
her kommer eksempel på "live" index.php
<?php
/**
* @copyright Steria Denmark A/S
* @author Kevin Kruse Rasmussen.
* @version 1.0
*/
session_start();
include_once("classes.php");
$core = new core();
$page = file_get_contents("layout.html");
$page = str_replace("{VAR:NAME}",$core->name(),$page);
$page = str_replace("{VAR:TITLE}",$core->title(),$page);
$page = str_replace("{VAR:STYLE}",$core->style(),$page);
$page = str_replace("{VAR:SCRIPTS}",$core->scripts(),$page);
$page = str_replace("{VAR:BANNER}",$core->gen_banner(),$page);
$page = str_replace("{VAR:MENU}",$core->gen_menu(),$page);
$page = str_replace("{VAR:SUB}",$core->gen_submenu(),$page);
$page = str_replace("{VAR:MAIN}",$core->gen_contents(),$page);
print $page;
?>
Som du så nok kan gætte indeholder classes både database funktioner og alle de funktioner jeg skal bruge til at "generere" min side.
<?php
/**
* @copyright Steria Denmark A/S
* @author Kevin Kruse Rasmussen.
* @version 1.0
*/
session_start();
class database
{
function database()
{
$server = '127.0.0.1'; $adminuser = ''; $adminpass = ''; $dbname = 'din database';
mysql_connect($server,$adminuser,$adminpass);
mysql_select_db($dbname);
}
function login_db($username,$password)
{
$result = mysql_query("SELECT * FROM users WHERE username = '$username' AND password = '$password' LIMIT 1") or die(mysql_error());
return $result;
mysql_close();
}
function get_assocc($query)
{
$result = mysql_query($sqlstr) or die(mysql_error());
mysql_close();
return $result;
}
function get_single($query)
{
$result = mysql_query($query) or die(mysql_error());
$result_ar = mysql_fetch_array($result);
mysql_close();
return $result_ar;
}
function go($query)
{
$result = mysql_query($sqlstr) or die(mysql_error());
mysql_close();
}
function get_time_string()
{
$text = time("d","m","y");
return $text;
}
}
class core extends database
{
function logout()
{
session_destroy();
header("location: index.php");
}
function new_user()
{
$form = 'Her skal du registrere dig som bruger for at kunne bruge dette site.<br />';
$form .= '<form action="" method="post">Brugernavn: <input type="text" name="username" /><br />Password: <input type="password" name="password" /><br />';
$form .= 'Mail adresse: <input type="text" name="mail" /><br /><input type="submit" value="Registrer" /></form>';
if($_POST["username"]=="" && $_POST["password"]=="")
{
$text = $form;
}
else
{
$user = $_POST["username"]; $pass = sha1($_POST["password"]); $mail = $_POST["mail"];
if($user!="" && $pass!="" && $mail!="")
{
$this->go("INSERT INTO `users` (`username`, `password`, `level`, `mail`, `active`) VALUES ('$user', '$pass', '', '$mail', '')");
header("location: index.php");
}
else
{
$text = $form.'DU SKAL HUSKE AT UDFYLDE ALLE FELTER!';
}
}
return $text;
}
function frontpage()
{
$text = 'Dette er forsiden.<br />';
$text .= 'Du er logget ind som: '.$_SESSION['username'];
return $text;
}
function dyn()
{
$text = 'Her vil hentes direkte fra databasen.';
}
function loginbox()
{
if(!isset($_POST['usrname']))
{
$text = 'Du skal logge ind herunder. Har du ikke allerede en bruger, kan du oprette en <a href="index.php?side=new_user">her</a>.<br />';
$text .= '<form action="index.php?side=login" method="post">Brugernavn: <input type="text" name="usrname" /> Password: <input type="password" name="usrpass" /> <input type="submit" value="login" /></form>';
}
else
{
$user = $_POST["usrname"];
$pass = sha1($_POST["usrpass"]);
$result_ar = $this->login_db($user,$pass);
if(mysql_num_rows($result_ar)>0)
{
$res = mysql_fetch_array($result_ar);
$_SESSION['lvl'] = $res["level"];
$_SESSION['username'] = $res["username"];
$_SESSION['mail'] = $res["mail"];
header("location: index.php");
exit;
}
else
{
header("location: index.php?side=logout");
exit;
}
}
return $text;
}
function name()
{
}
function title()
{
}
function style()
{
}
function scripts()
{
}
function gen_banner()
{
}
function gen_menu()
{
if(!isset($_SESSION['username']))
{
$login = '<a href="index.php?side=login">Login</a> <a href="index.php?side=new_user">Tilmeld dig</a>';
}
else
{
$login = '<a href="index.php?side=logout">Logud</a>';
}
if($_GET['id']!="")
{
}
else
{
$id = $_GET["side"];
switch($id)
{
case login :
$text = '<a href="index.php">Forside</a> '.$login;
return $text;
break;
case new_user :
$text = '<a href="index.php">Forside</a> '.$login;
return $text;
break;
case logout :
$this->logout();
break;
case dyn :
$text = $this->dyn();
return $text;
break;
default :
$text = $login;
return $text;
break;
}
}
}
function gen_submenu()
{
}
function gen_contents()
{
$id = $_GET["side"];
switch($id)
{
case login :
$text = $this->loginbox();
return $text;
break;
case new_user :
$text = $this->new_user();
return $text;
break;
case logout :
$this->logout();
break;
default :
$text = $this->frontpage();
return $text;
break;
}
}
}
?>
Dette mulliggør også opbygning af siden i moduler.
Det er eden ene måde jeg gør det på.
Skal det være en hurtigt side, er det meget enekelt. Det følger i næste post.