Читаем без скачивания Курс "Язык программирования PHP" - Нина Савельева
Шрифт:
Интервал:
Закладка:
<?
$li_tmpl = file_get_contents("tmpl.html");
// считываем шаблон строки из файла
// устанавливаем соединение и выбираем
// базу данных
$conn = mysql_connect("localhost",
"nina","123")
or die("Cant connect");
mysql_select_db("book");
$sql = "SELECT * FROM Articles";
$q = mysql_query($sql,$conn);
// отправляем запрос
$num = mysql_num_rows($q);
for($i=0; $i<$num; $i++){
$tmpl .= $li_tmpl;
$tmpl = str_replace("<!title>",
mysql_result($q,$i,"title"),$tmpl);
$tmpl = str_replace("<!author>",
mysql_result($q,$i,"author"),$tmpl);
$tmpl = str_replace("<!abstract>",
mysql_result($q,$i,"abstract"),$tmpl);
$tmpl = str_replace("<!fulltext>",
mysql_result($q,$i,"fulltext"),$tmpl);
}
echo $tmpl;
?>
Если шаблон был такой, как приведен выше, то получим примерно следующее.
Введение в PHP (Савельева Н.В.)
Лекция дает представление о том, что такое язык PHP, для чего он создавался изначально и как используется теперь, какими возможностями обладает.
Установка и настройка ПО (Иванов Иван)
Рекомендации по установке и настройке web-сервера и интерпретатора PHP
В принципе метод достаточно прост и удобен, но требует дополнительных усилий программиста при возникновении задач более сложных, чем простая подстановка значений. Для решения задач, где требуется делать подстановку целых блоков или даже проверять условия, создают классы шаблонов, такие как FastTemplate и Smarty. Обсудим их подробнее.
Шаблоны FastTemplate
FastTemplate - это набор классов, позволяющих реализовать работу с шаблонами. Логику добавить в шаблон FastTemplate нельзя, вся она должна находиться в коде программы. Идея работы шаблонов FastTemplate заключается в том, что любая большая страница состоит из множества кусочков, самые маленькие из которых - обычные строки текста, и они получают имя и значение.
Что представляет собой файл шаблона FastTemplate? Это обычный html-файл, в котором могут встречаться переменные особого вида, впоследствии обрабатываемые методами класса FastTemplate.
Синтаксис переменных в шаблонах FastTemplate описывается следующим выражением: {([A-Z0-9_]+)}
Это значит, что переменная должна начинаться с фигурной скобки "{". Второй и последующие символы должны быть буквами верхнего регистра от A до Z, цифрами или символами подчеркивания. Переменная вычисляется с помощью закрывающей фигурной скобки "}".
{title}
{AUTH20}
{TOP_OF_PAGE}
Как уже было сказано, основная идея FastTemplate - создание страницы с помощью вложенных шаблонов. Например, для решения нашей задачи можно создать три файла шаблона:
<html>
<head><title>{title_}</title>
</head>
<body>
{MAIN}
</body>
</html>
<ul>
{LIST_ELEMENT}
</ul>
<li><a href="{FULLTEXT}">{title}</a>
({AUTHOR})
<br> <p> {ABSTRACT}
Шаблоны мы создали - работу дизайнера выполнили. Теперь нужно научиться их обрабатывать, т.е. выполнить работу программиста. Сейчас создадим программу для обработки приведенных выше шаблонов.
Перед началом работы с шаблонами FastTemplate нужно подключить этот набор классов к нашей программе. В реальной жизни набор классов FastTemplate записан в один файл, как правило, с названием class.FastTemplate.php3, поэтому подключить его можно, например, с помощью команды:
include("class.FastTemplate.php3");
Следующий важный шаг - это создание объекта класса FastTemplate, с которым впоследствии мы будем работать:
$tpl = new FastTemplate(
"/path/to/templates");
В качестве параметра передается путь к месту, где находятся наши шаблоны.
Методы FastTemplate
Далее необходимо изучить методы, которые можно применять к созданному объекту класса FastTemplate. Параллельно обратим внимание, как их можно использовать для решения нашей задачи.
Для работы с FastTemplate нужно знать четыре основных метода: define, assign, parse и FastPrint.
Метод define
Синтаксис:
define( array ( ключ => значение,
ключ1 => значение1, ... ))
Метод define() связывает имя файла шаблона с более коротким именем, которое можно будет использовать в программе. То есть "ключ" - это имя, которое мы будем использовать в программе для ссылки на файл шаблона, имя которого записано в строке "значение". Реальные имена файлов шаблонов не рекомендуется использовать нигде, кроме метода define. При вызове метода define() происходит загрузка всех определенных в нем шаблонов.
$tpl->define( array (main => "main.tpl",
list_f => "list.tpl",
list_el=> "list_element.tpl" ));
Здесь мы задаем псевдонимы именам файлов шаблонов. Эти псевдонимы, т.е. переменные main, list_f и list_el, будут использоваться в программе вместо соответствующих имен файлов main.tpl, list.tpl и list_element.tpl.
Метод assign
Синтаксис:
assign( (пары ключ/значение) или
( array(пары ключ/значение) )
Метод assign() присваивает переменным значения, "ключ" - это имя переменной, а "значение" - значение, которое ей нужно присвоить. Чтобы переменная в шаблоне была заменена значением, это значение нужно задать ей с помощью метода assign(). Согласно синтаксису этот метод можно использовать в двух различных формах. В FastTemplate есть только один массив, поэтому, если вы повторно задаете значение одному и тому же ключу, оно будет перезаписано.
$tpl->assign(array(
TITLE => "Установка и настройка ПО",
TITLE => "Введение в PHP" ));
Здесь мы дважды устанавливаем значение переменной, доступной в файлах шаблона по имени TITLE. Эта переменная будет иметь последнее присвоенное ей значение, т.е. она равна строке "Введение в PHP".
Метод parse
Синтаксис:
parse (возвращаемая переменная,
источники шаблонов)
Метод parse() - самый основной в FastTemplate. Он устанавливает значение возвращаемой переменной равным обработанным шаблонам из указанных источников. Метод может использоваться в трех формах: простой, составной и присоединяющей.
$tpl->parse(MAIN, "main");
// простая форма
$tpl->parse(MAIN, array ("list_f", "main"));
// составная форма
$tpl->parse(MAIN, ".list_el");
// присоединяющая форма
В простой форме шаблон с псевдонимом "main" загружается (если еще не был загружен), все его переменные подставляются, и результат сохраняется как значение переменной MAIN. Если переменная {MAIN} появится в более поздних шаблонах, то вместо нее будет подставлено значение, полученное в результате обработки шаблона "main". Это позволяет создавать вложенные шаблоны.
Составная форма метода parse() создана для того, чтобы упростить вложение шаблонов друг в друга. Следующие записи эквивалентны:
$tpl->parse(MAIN, "list_f");
$tpl->parse(MAIN, ".main");
это то же самое что и
$tpl->parse(MAIN, array("list_f", "main"));
Когда используется составная форма, важно, чтобы каждый шаблон, идущий в списке после первого, содержал ту переменную, в которую передаются результаты обработки шаблона. В примере выше main должен содержать переменную {MAIN}, поскольку именно в нее передаются результаты обработки шаблона list_f. Если main не содержит переменной {MAIN}, то результаты обработки шаблона list_f будут потеряны.
Присоединяющий стиль позволяет добавлять результаты обработки шаблона к переменной результата. Точка перед псевдонимом файла шаблона говорит FastTemplate о том, что нужно присоединить результат обработки этого шаблона к возвращенным результатам, а не перезаписывать его. Такой стиль наиболее часто используется при построении таблиц с переменным числом рядов, получаемых, например, в результате запроса к базе данных.
Метод FastPrint
Синтаксис:
FastPrint(обработанная переменная)
Метод FastPrint() печатает содержимое переданной в него обработанной переменной. Если он вызван без параметров, то печатается последняя использованная методом parse() переменная.
$tpl->FastPrint();
/* если продолжать предыдущий пример,
то эта функция напечатает значение
переменной MAIN */
$tpl->FastPrint("MAIN");
// эта функция сделает тоже самое
Если нужно печатать не на экран, а, например, в файл, то получить ссылку на данные можно с помощью метода fetch().