Създаване на темплейт система с MySQL
Така ето един урок, как да си създадете темплейт система, на принципа на 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 забранявам неговото преписване в други сайтове

Ако нещо не ви е ясно, питайте във форума или на ЛС


ДЕМО сайта е изграден по този начин.



/ Трябва да сте регистриран за да напишете коментар /
От: bubeto
11:50 28-05-2010
Template->make_filename(): Error - file /test.tpl does not exist

Това ми искарва като грешка !!! в роот дир имам файла тест.тпл
От: bubeto
18:25 30-05-2010
Template->make_filename(): Error - file /test.tpl does not exist !~!

Някои може ли да ми каже каде ми ее грешката !!! всичко съм направил както е описано
От: bubeto
18:30 30-05-2010
Template->make_filename(): Error - file /test.tpl does not exist !~!

Някои може ли да ми каже каде ми ее грешката !!! всичко съм направил както е описано
От: jooorooo
13:46 05-06-2010
$template = new Template('template');

$template->set_filenames(array(
"index" => "test.tpl"
));

папка templates -> Template('template');
файл -> "test.tpl"
От: jooorooo
13:47 05-06-2010
по точно template папка, в конструктора на обекта се сетва папката където е темплейта
От: chalgoman
11:20 05-07-2010
По-добре със smarty :)
От: redbulldog
11:25 22-04-2011
За да проработи кода просто трябва да напишете папката в която е test.tpl:

$template->set_filenames(array(
"index" => "template/test.tpl"
));

След това да заменете във файла template.php това:
function make_filename($filename)
{
if (preg_match('/^[a-z_][^:]/i', $filename) )
{
$filename = $this->root.'/'.$filename;
}

if (!file_exists($filename))
{
die("Template->make_filename(): Error - file $filename does not exist");
}

return $filename;
}

с това

function make_filename($filename)
{
if (preg_match('/^[a-z_][^:]/i', $filename) )
{
$filename = $this->root.''.$filename;
}

if (!file_exists($filename))
{
die("Template->make_filename(): Error - file $filename does not exist");
}

return $filename;
}
1