Така ето един урок, как да си създадете темплейт система, на принципа на phpbb.
Първо си изтеглете следния файл
template.php
Така, това е файл с клас, взет от phpbb, няма смисъл да си пишете собствен, след като има вече готов :-)
как се работи с template.php?
Ами създавате си един нов файл с произволно име /например test.php/ който ще ви служи за тестване.
Такам, сега в този файл test.php инклудвате файла template.php. Викате класа по следния начин
|
$template = new Template('template'); |
|
като template е папката в която ще се намира темплейт файла
с разширение tpl.
Следващата стъпка е да зададете името на файла който е tpl, това става по следния начин:
|
$template->set_filenames(array(
"index" => "test.tpl"
)); |
|
значи, тук index е ключа на арая, а test.tpl е самия темплейт.
Сега, затваряне на файла за темплатизиране става по следния начин:
|
$template->pparse('index'); |
|
забележете, че ползваме ключа с който отворихме темплейта.
Всичко като цяло до момента трябва да изглежда
по следния начин
|
<?php
include('template.php');
$template = new Template('template');
$template->set_filenames(array(
"index" => "test.tpl"
));
$template->pparse('index');
|
|
Сега ще ви покажа, как да вкарате и малко информация, която не се вика от mysql.
|
$template->assign_vars(array(
"TITLE_SITE" => "Тест сайт",
"LOGO" => "kartinka.jpg",
"CHARSET" => "windows-1251"
)); |
|
тук сме задали, името на картинката която се използва за лого,
както и title-то на страницата и чарсета, по този начин се задават всички визуализиращи се работи
който не са в тип array както е от mysql-а
сега вече трябва да създадете папка template и файл test.tpl в нея, отваряте го и си го структурирате като
нормален html код.
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html >
<head>
<title>{TITLE_SITE}</title>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset={CHARSET}">
</head>
<body>
<img src="{LOGO}"><br>
|
|
така изглежда началото на test.tpl който създаваме. а ето как ще изглежда и на test.php
|
<?php
include('template.php');
$template = new Template('template');
$template->set_filenames(array(
"index" => "test.tpl"
));
$template->assign_vars(array(
"TITLE_SITE" => "Тест сайт",
"LOGO" => "kartinka.jpg",
"CHARSET" => "windows-1251"
));
$template->pparse('index');
|
|
можете да тествате това което е направено до момента, в папката където е test.php трябва да имате файл kartinka.jpg
за да можете да видите катринката.
сега продължаваме с това как да се визуализира резултат от mysql които е в блок /така се казва повтарящата се част/.
Става със следния код
|
$template->assign_block_vars("test",array( ));
|
|
като в него пак са подредени във вид array. Забележете как сме задали test, това е критерия за нашия блок.
да предположим, че имаме таблица test със следното съдържание:
|
CREATE TABLE `test` (
`id` int(50) NOT NULL auto_increment,
`user` varchar(250) NOT NULL,
`email` varchar(250) NOT NULL,
PRIMARY KEY (`id`)
);
|
|
и искаме да визуализираме резултатите от нея.
|
mysql_connect("localhost", "root", "")or die("грешка 1");
@mysql_select_db("test") or die("грешка 2");
$query = " SELECT * FROM test";
$result = mysql_query($query) or die('Error, query failed');
while($row = mysql_fetch_array($result))
{
$template->assign_block_vars("test",array(
"ID" => $row['id'],
"USER" => $row['user'],
"EMAIL" => $row['email']
));
}
|
|
Забележете, че е съвсем нормална заявка, която има минимална разлика, която е в
|
$template->assign_block_vars("test",array( ));
|
|
сега да ви кажа, как ще стане блока в tpl файла с име test.
|
<!-- BEGIN test -->
{test.ID} - {test.USER} - {test.EMAIL}<br>
<!-- END test -->
|
|
BEGIN и END се задават за определяне на блока, който служи за заявката. когато са в блок се задава м-у скобите {}
не само критерия, но и името на блока {test.ID}.
Вече нашите файлове ще имат следния вид.
test.php
|
<?php
include('template.php');
$template = new Template('template');
$template->set_filenames(array(
"index" => "test.tpl"
));
$template->assign_vars(array(
"TITLE_SITE" => "Тест сайт",
"LOGO" => "kartinka.jpg",
"CHARSET" => "windows-1251"
));
mysql_connect("localhost", "root", "")or die("грешка 1");
@mysql_select_db("test") or die("грешка 2");
$query = " SELECT * FROM test";
$result = mysql_query($query) or die('Error, query failed');
while($row = mysql_fetch_array($result))
{
$template->assign_block_vars("test",array(
"ID" => $row['id'],
"USER" => $row['user'],
"EMAIL" => $row['email']
));
}
$template->pparse('index');
|
|
и test.tpl
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html >
<head>
<title>{TITLE_SITE}</title>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset={CHARSET}">
</head>
<body>
<img src="{LOGO}"><br>
<!-- BEGIN test -->
{test.ID} - {test.USER} - {test.EMAIL}<br>
<!-- END test -->
</body>
</html>
|
|
а сега един пример, как да слагате един блок в друг. примерно създаваме блок с име wttest може да се ползва
както с mysql така и без, аз ще дам пример без, разлкика няма.
|
mysql_connect("localhost", "root", "")or die("грешка 1");
@mysql_select_db("test") or die("грешка 2");
$query = " SELECT * FROM test";
$result = mysql_query($query) or die('Error, query failed');
while($row = mysql_fetch_array($result))
{
$template->assign_block_vars("test",array(
"ID" => $row['id'],
"USER" => $row['user'],
"EMAIL" => $row['email']
));
$template->assign_block_vars("test.wttest",array(
"TEST" => "1",
"DRUGO" => "3"
));
}
|
|
забележете 2-рия блок, че има име test.wttest, това е защото се отнася за другия блок.
а ето как ще изглежда и блока в tpl файла
|
<!-- BEGIN test -->
{test.ID} - {test.USER} - {test.EMAIL} -
<!-- BEGIN wttest -->
{test.wttest.TEST} - {test.wttest.DRUGO}
<!-- END wttest -->
<br>
<!-- END test -->
|
|
разликата тук, е че се задава test.wttest м-у скобите, а началото и края на блока е по същия начин.
В коментарите ползвани за начало и краи на блок, задължително трябва да има поленца преди BEGIN/END и след името на блика.
Урока е авторски и е писан за http://web-tourist.net забранявам неговото преписване в други сайтове
Ако нещо не ви е ясно, питайте във форума или на ЛС
ДЕМО сайта е изграден по този начин.