pripadne by to slo upravit jeste takto, aby se tam nemusela vypisovat ta adresa
$home = 'C:\\wamp\\www\\x\\';
switch ($file) // vyber sablonu podle aktualni stranky
{
case $home.'tpl-file.php': $sablona = 'sablona2.htm'; break;
pripadne by to slo upravit jeste takto, aby se tam nemusela vypisovat ta adresa
$home = 'C:\\wamp\\www\\x\\';
switch ($file) // vyber sablonu podle aktualni stranky
{
case $home.'tpl-file.php': $sablona = 'sablona2.htm'; break;
Nj, klasicka chyba novacku placat php a html kod dohromady. Mnohem prehlednejsi je, ulozit si to do promennych.
Mno, a ten zbytek php kod? Tohle dela jen vykresleni.
Postrehy:
- pred <!DOCTYPE mas radek navic
- doctype bych pouzil jen html <!DOCTYPE HTML>
- php kod na zacatek
- include / require se pise require "function.php"; a include "bottom.htm"; (bez zavorek)
- <? a <?php je dobre psat <?php a taky jednotne a nestridat to
Mno, mi prijde, ze o php asi moc nevis, tak nevim, zda si poradis s timto kodem... Ale necham to ve tvych schopnych rukou. Mam tam pouzite 4 soubory a bude treba upravit obsah() a include(formulare). Tak se drz a snaz :) V podstate to, co je pod ob_start je jedine, co zbyde ve strance. Html kod sablony strany se presune do pomocneho html souboru.
--- tpl/sablona1.htm ---
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head>
<title>{title}</title>
<link rel="stylesheet" rel="nofollow" href="styles3.css" type="text/css" media="all">
</head>
<body>
<div id="wrapper">
<div id="header1"></div>
<div id="header">{bottom}</div>
<div id="inner">
<div id="middle" class="clearfix">
<div id="content">
<div id="left1">{left}</div>
<div id="content2">{content}</div>
</div>
</div>
</div>
<div id="l"></div>
<div id="m"></div>
</div>
{form}
</body>
</html>
--- tpl/sablona2.htm ---
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head>
<title>{title}</title>
<link rel="stylesheet" rel="nofollow" href="styles3.css" type="text/css" media="all">
</head>
<body>
<div id="wrapper">
<div id="header1"></div>
<div id="header">{bottom}</div>
<div id="inner">
<div id="middle" class="clearfix">
<div id="content">
<!-- pozn: smazano left -->
<div id="content2">{content}</div>
</div>
</div>
</div>
<div id="l"></div>
<div id="m"></div>
</div>
{form}
</body>
</html>
<?php
//--- function.php ---
function render($data,$file)
{
switch ($file) // vyber sablonu podle aktualni stranky
{
case 'C:\wamp\www\x\tpl-file.php': $sablona = 'sablona2.htm'; break;
default: $sablona = 'sablona1.htm';
}
$sablona = 'tpl/'.$sablona; // dopln adresar se sablonami
$sablona = file_get_contents($sablona); // nacti ze souboru text do promenne
$keys = array_keys($data); // ziskam indexy do pole pro str_replace
foreach($keys as $key=>$value) {$keys[$key] = '{'.$value.'}';} // pridam k indexum slozene zavorky
// si muzes udelat vypis pole, jestli te zajima, co tam je:
// echo '<pre>'; print_r($keys);
return str_replace($keys,$data,$sablona); // nahrad v $sablone text '{bottom}' za obsah promenne pole $data['bottom'] a proved totez pro ostatni indexy pole $data
}
function obsah2()
{
return 'Ahoj';
}
function vlozPhp($url)
{
return 'Formulare: '.$url;
}
//--- stranka.php ---
ob_start();
//require "function.php";
$html = array(
'title' => 'titulek okna prohlizece / text zalozky', //file_get_contents("bottom.htm"), // mi to vypisuje na localhost C:\wamp\www\x\tpl-file.php, totez jsem tedy pouzil pro switch-case pro 'sablona2.htm'
'bottom' => __FILE__.'<br>bottom', //file_get_contents("bottom.htm"), // mi to vypisuje na localhost C:\wamp\www\x\tpl-file.php, totez jsem tedy pouzil pro switch-case pro 'sablona2.htm'
'left' => 'left',//file_get_contents("left1.htm"),
'content' => obsah2(), // upravit php kod, aby nedelal echo
'form' => vlozPhp("formulare/online.php") // upravit php kod
);
echo render($html,__FILE__);
ob_end_flush();
?>
No, zatim moc nevim, co chces, tvuj kod neznam ani, jak is to asi predstavujes, tam se taky moc nechytam. Zatim jen tak tipuji... Klidne zkus tahat, ale :)
Ten kus php kodu by mel delat to, ze podle url zvoli sablonu. Precte si souboru podle $sablona. Prepise v nem text {title} na xxx a {h1} na yyy. Na otestovani jsem radek s oteviranim souboru zakomentoval a nahradil ho primym textem
//$sablona = file_get_content($sablona); // otevirani souboru
$sablona = '<title>{title}</title><h1>{h1}</h1>'; // primy text
Kdyz ten kod spustis, tak zdrojovy kod stranky bude mit <title>xxx</title><h1>yyy</h1>. Kdyz si zdrojovy kod nebudes prohlizet, tak v zahlavi okna bude xxx a na strance velke tucne yyy. Proste klasicke nahrazovani str_replace textu (viz php.net manual a priklady tam).
No a text pro nahrazeni si teda zvolis pomoci
switch (__FILE__)
{
case 'konkretni adresa': $sablona = 'tpl/xyz'; break;
default: $sablona = 'tpl/abc';
}
Muzes si pred to napsat
echo __FILE__;
Text, ktery to vypise pak vyplnis misto textu konkretni adresa. Umisteni sablon jsem zvolil do slozky tpl/. Sablonu 1 jsem pojmenoval jako xyz (bez pripony) a sablonu2 jako abc. Jsou to textove soubory, ktere muzou obsahovat treba html kod. nasledny file_get_content je otevre jako text. (viz manual, prace s file_get_content). V obou souborech muzes mit stejny html kod, treba
<title>{title}</title><h1>{h1}</h1>
A nebo tam muzes mit rozdilny html kod, treba tve 2 sloupce nebo 3 sloupce.