Категории раздела
Статьи по html [7]
Статьи по php [8]
Раскрутка сайта [9]
Базы данных [3]
Поисковые системы [6]
Статьи по css [9]
Мини-чат
Наш опрос
Общая оценка сайта
Всего ответов: 34
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Суббота, 27.04.2024, 04:02
Приветствую Вас Гость
Поиск
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Мой сайт
    Главная » Статьи » Статьи по php

    Web разработка с помощью FastTemplate

    Если Вы работали с PHP, JSP, ASP или любым другим языком скриптования, Вы уже знаете, что одна из самых замечательных особенностей этих языков - возможность совмещать обычный HTML код с выражениями, присущими этим языкам, такими как переменные и вызовы функций. Заменяя переменные значениями в HTML странице, с помощью этих языков легко создавать динамические Web страницы: просто измените значения переменных, вставленных в HTML код, и содержание страницы автоматически поменяется соответствующим образом.

    Любой Web программист скажет Вам, что за эти возможности приходится платить - большинство приложений, написанных на PHP, так тесно связаны с HTML кодом, что поддержка их становится кошмаром. Поскольку и элементы пользовательского интерфейса языка HTML, и программный код находятся в одном файле, для пользователей, не имеющих опыта в программировании, становится трудно внести изменения в одну часть, не задев другой. Самый частый пример - дизайнеры пытаются изменить вид какого-либо Web приложения. Обычно те изменения, которые они вносят в HTML код, должны отслеживаться разработчиком приложения, чтобы убедиться в целостности измененного скрипта.

    Как Вы можете себе представить, такое "тесное" сотрудничество программиста и дизайнера может оказаться достаточно нервным процессом для обоих, не говоря уже о стоимости такого решения для компании. Более простое решение - разделить интерфейс (HTML) и программный код (PHP, Perl и т. д.) так, чтобы их можно было модифицировать независимо друг от друга; это позволит дизайнерам сверстать страницу наилучшим образом, а разработчикам - спать ночами, не заботясь о том, что их программа "сломается".

    Здесь и возникает необходимость пользоваться FastTemplate…

    Когда время - деньги
    FastTemplate - PHP версия - это портированный код хорошо-известного Perl модуля. Он разработан, по словам автора, чтобы "управлять шаблонами и выполнять замену переменных" и составляет один пакет в виде PHP класса, который легко можно интегрировать с Вашим приложением.

    FastTemplate использует "шаблоны" для упрощения поддержки PHP кода и для разделения данных и элементов страницы. Предполагается, что Web приложение состоит из нескольких мелких составляющих, которые называются "шаблонами". Чтобы связать "шаблоны" и данные вместе, FastTemplate обеспечивает функции API.

    В терминологии FastTemplate, "шаблон" -- это просто текстовый файл, обычно состоящий из статических элементов (HTML код, обычный текст) и переменных FastTemplate. Когда FastTemplate читает файл-шаблон, он автоматически заменяет переменные в нем их значениями. Эти значения могут быть определены разработчиком во время работы приложения, могут быть прочитаны из другого файла или извлечены из базы данных.

    Как Вы заметили, FastTemplate также дает возможность помещать один шаблон внутри другого, что делает всю систему очень гибкой. Позволяя разбить пользовательский интерфейс на несколько более мелких частей, FastTemplate делает возможным повторное использование Вашего Web приложения (шаблон может использоваться снова и снова, даже в нескольких разных проектах) и более легким внесение изменений в программу.

    Перед тем как продолжить, нужно сходить на домашнюю страничку FastTemplate http://www.thewebmasters.net и скачать копию последней версии (1.1.0 на время написания этой статьи). Архив состоит из главного файла, содержащего класс FastTemplate, документа, описывающего методы и переменные и нескольких скриптов-примеров.

    Первоначально FastTemplate был написан для PHP3; если Вы используете PHP4, Вам нужно будет внести небольшие изменения в файл классов. Список изменений можно найти на сайте FastTemplate.

    Что это такое?
    Начнем с простого примера использования FastTemplate. Возьмем простую HTML страницу, которая называется "mypage.tpl", которая содержит персональную информацию о пользователе.


    <!-- begin: mypage.tpl -->
    <html>
    <head>
    </head>

    <body>

    <b>Name</b>: {FNAME} {LNAME}
    <p>
    <b>Age</b>: {AGE}
    <p>
    <b>Email address</b>: {EMAIL_ADDRESS}
    <p>
    <b>Tel</b>: {TEL}


    </body>
    </html>
    <!-- end: mypage.tpl -->

    Как Вы заметили, на этой странице, собственно, нет данных; вместо этого, переменные FastTemplate (в фигурных скобках) используются там, где необходимо добавить данные. После того как FastTemplate пропарсит этот документ, эти переменные будут содержать значения.

    После этого нам нужно сообщить FastTemplate о созданном шаблоне, дать значения переменным, и все это связать вместе. Вот пример:

    <?
    // mypage.php - generate output using FastTemplate

    // include class file
    include("class.FastTemplate.php3");

    // instantiate new object
    $obj = new FastTemplate(".");

    // assign names for template files
    // "index" now references the template "./mypage.tpl"
    $obj->define(array("index" => "mypage.tpl"));

    // assign values to FT variables within the template
    // this may also be set up as an associative array of key-value pairs
    $obj->assign("FNAME", "John");
    $obj->assign("LNAME", "Doe");
    $obj->assign("AGE", "36");
    $obj->assign("TEL", "(12)-34-567 8912");
    $obj->assign("EMAIL_ADDRESS", "jdoe@anonymous.com");

    // parse template "index" and store in handler "result"
    $obj->parse(result, "index");

    // print contents of handler "result"
    $obj->FastPrint(result);
    ?>

    Объяснение:

    1. Первый шаг при использовании класса FastTemplate - это создание нового объекта, и передача ему размещения файлов-шаблонов.

    <?
    include("class.FastTemplate.php3");

    $obj = new FastTemplate(".");
    ?>

    В данном случае есть только один шаблон и он находится в текущей директории.

    2. Затем мы используем метод define() для присвоения имен шаблонам, которые мы будем использовать в скрипте - эти имена определяются в ассоциативном массиве, и будут использоваться на протяжении всей работы скрипта для обращения к соответствующим файлам-шаблонам. В данном случае используется имя "index", соответствующее шаблону "mypage.tpl".

    <?
    $obj->define(array("index" => "mypage.tpl"));
    ?>

    3. Как только мы сообщили FastTemplate какие шаблоны мы используем и присвоили им всем имена, мы должны присвоить значения переменным в шаблонах. Как Вы заметили, шаблон "mypage.tpl" содержит пять переменных; мы используем метод assign(), чтобы присвоить им значения.

    <?
    $obj->assign("FNAME", "John");
    $obj->assign("LNAME", "Doe");
    $obj->assign("AGE", "36");
    $obj->assign("TEL", "(12)-34-567 8912");
    $obj->assign("EMAIL_ADDRESS", "jdoe@anonymous.com");
    ?>

    Переменным также можно присвоить значения через ассоциативный массив, содержащий пары "имя-значение", мы покажем как это делать в следующем примере.

    4. После присвоения значений переменным наступает время их использовать. Это достигается с помощью метода parse(), который является самым главным методом в коллекции объектов.

    Метод parse() принимает два аргумента - имя переменной и имя шаблона. В данном примере переменная называется RESULT, а шаблон называется "index" (который ссылается на шаблон "mypage.tpl").

    <?
    $obj->parse(result, "index");
    ?>

    Если перевести это на нормальный язык, то эта строка значит: "прочитать шаблон по имени "index", присвоить значения переменным в нем, а затем присвоить результат с уже указанными значениями переменной "result"." Вот так!

    5. Теперь переменная "result" содержит содержимое страницы, показываемой пользователю с помощью броузера.

    <?
    $obj->FastPrint(result);
    ?>

    Функция FastPrint() выводит результат последнего вызова функции parse() или имя указанной переменной, как показано выше.

    Вот как это выглядит:
    (здесь рисунок)


    Поскольку код HTML находится в отдельном файле-шаблоне, дизайнерам без опыта программирования становится легко менять пользовательский интерфейс, не затрагивая программный код. В качестве примера, вот полностью измененная версия шаблона "mypage.tpl".

    <!-- begin: mypage.tpl -->
    <html>
    <head>
    </head>

    <body>

    <table border="1" cellpadding="5">
    <tr>
    <td bgcolor=black><i><font color=white>First name</font></i></td>
    <td bgcolor=black><i><font color=white>Last name</font></i></td>
    <td bgcolor=black><i><font color=white>Tel</font></i></td>
    <td bgcolor=black><i><font color=white>Email address</font></i></td>
    <td bgcolor=black><i><font color=white>Age</font></i></td>
    </tr>
    <tr>
    <td>{FNAME}</td>
    <td>{LNAME}</td>
    <td>{TEL}</td>
    <td><a href="mailto:{EMAIL_ADDRESS}">{EMAIL_ADDRESS}</a></td>
    <td>{AGE}</td>
    </tr>
    </table>

    </body>
    </html>
    <!-- end: mypage.tpl -->

    выглядит это так:
    (здесь рисунок)


    Как видно, при использовании FastTemplate меняется только файл-шаблон, а программный код остается нетронутым.

    Вам почта
    Сила FastTemplate заключается в том, что с его помощью можно управлять сразу несколькими шаблонами. Допустим, имеется такая HTML страница:
    (здесь рисунок)


    Предположим, что ее нужно разбить на несколько частей,
    (здесь рисунок)


    и поместить каждую часть в шаблон. Это будет означать, что заголовок, главная часть и низ страницы можно менять независимо друг от друга, что является очень кстати.

    Вот шаблоны:

    <!-- begin: header.tpl -->
    <html>
    <head>
    <basefont face=Verdana>
    </head>
    <body>
    <table width=100% cellpadding=10 bgcolor="Black">
    <tr><td height=30><b><font color=white>Web разработка с помощью FastTemplate</font></b></td></tr>
    </table>
    <!-- end: header.tpl -->

    <!-- begin: form.tpl -->
    <p>
    <i>{INSTRUCTIONS}</i>
    <p>
    <div align=center>
    <table border="0" cellspacing="5" cellpadding="5">
    <form action="mailer.php" method="post">
    <tr>
    <td>Name</td>
    <td><input type="Text" name="name" size="15"></td>
    </tr>
    <tr>
    <td>Email address</td>
    <td><input type="Text" name="email" size="25"></td>
    </tr>
    <tr>
    <td>Subject</td>
    <td><input type="Text" name="subj" size="25"></td>
    </tr>
    <tr>
    <td>Comments</td>
    <td><textarea name="comments" cols="35" rows="8"></textarea></td>
    </tr>
    <tr>
    <td colspan=2 align=center><input type="Submit" value="Send Feedback"></td>
    </tr>
    </form>
    </table>
    </div>
    <!-- end: form.tpl -->


    <!-- begin: footer.tpl -->
    <div align=center><font size=-2>
    Everything here is © <a
    href="http://www.melonfire.com/">Melonfire</a>, 2001. All rights
    reserved.<br>
    Read our <a href="tac.html">legal notices</a>, and our <a
    href="privacy.html">privacy policy</a>
    </font></div>
    <br>
    <table width=100% align=center cellpadding=0 bgcolor="Black">
    <tr><td> </td></tr>
    </table>
    </body>
    </html>
    <!-- end: footer.tpl -->

    А вот скрипт, который их соединяет с помощью FastTemplate:

    <?
    // feedback.php - generate a feedback form using multiple templates

    // include class file
    include("class.FastTemplate.php3");

    // instantiate new object
    $obj = new FastTemplate("./tmpl/");

    // assign names for template files
    $obj->define(array(
    "header" => "header.tpl",
    "form" => "form.tpl",
    "footer" => "footer.tpl"
    ));

    // assign values to FT variables within the template
    // as an associative array of key-value pairs
    $obj->assign(array(
    "TITLE" => "Feedback Form",
    "INSTRUCTIONS" => "Please use the following form to send us your feedback
    on this Web site"
    ));

    // parse template "feedback" and store in handler "result"
    $obj->parse(ft_header, "header");
    $obj->parse(ft_form, "form");
    $obj->parse(ft_footer, "footer");

    // print contents of handler "result"
    $obj->FastPrint(ft_header);
    $obj->FastPrint(ft_form);
    $obj->FastPrint(ft_footer);
    ?>

    Заметьте, что в этом случае FastTemplate парсит и выводит уже несколько шаблонов для создания одной HTML страницы. Каждый шаблон можно менять независимо от других, что позволяет, например, изменить только верхнюю часть страницы.

    Несколько клиентов
    Еще одно полезная особенность FastTemplate - это способность вставлять один шаблон внутрь другого. Например, здесь представлен шаблон-приветствие вставленный внутрь главного шаблона.

    <!-- begin: message.tpl -->
    <div align=center style="font-family: Verdana; font-size: 10pt">
    {MESSAGE}
    </div>
    <p>
    <!-- end: message.tpl -->

    <!-- begin: welcome.tpl -->
    <html>
    <head>
    </head>
    <body>
    {CONTENT}
    <hr>
    </body>
    </html>
    <!-- end: welcome.tpl -->

    А вот скрипт, который связывает их:

    <?
    // index.php - welcome page

    // include class file
    include("class.FastTemplate.php3");

    // instantiate new object
    $obj = new FastTemplate("./tmpl/");

    // assign names for template files
    $obj->define(array(
    "welcome" => "welcome.tpl",
    "message" => "message.tpl"
    ));

    // normally, this variable might be set from a cookie
    // uncomment this to see how the message changes
    // $repeat_visitor = 1;

    // assign values to FT variable within the template
    if ($repeat_visitor == 1)
    {
    $obj->assign("MESSAGE", "Welcome back! We've updated our catalog since
    your last visit - click here to see the new arrivals.");
    }
    else
    {
    $obj->assign("MESSAGE", "You're visiting our site for the very first time,
    so you might like to take our New User Tour.");
    }

    // parse templates
    // in this case, "message" is parsed first
    // the resulting output is assigned to the FT variable CONTENT
    // the next template "welcome" is parsed
    $obj->parse(CONTENT, array("message", "welcome"));

    // and print
    $obj->FastPrint(CONTENT);
    ?>

    Когда метод parse() получает задание пропарсить несколько шаблонов из массива, FastTemplate последовательно перебирает весь массив, присваивая результат каждого прохода указанной переменной.

    В этом случае FastTemplate сначала пропарсит шаблон "message", присвоит значение переменной "MESSAGE", а затем присвоит результат переменной "CONTENT". На данном этапе переменная "CONTENT" содержит:

    <!-- begin: message.tpl -->
    <div align=center style="font-family: Verdana; font-size: 10pt">
    You're visiting our site for the very first time, so you might like to take
    our New User Tour.
    </div>
    <p>
    <!-- end: message.tpl -->

    Затем FastTemplate пропарсит "welcome", присвоит значение только что созданной переменной "CONTENT" шаблону и сохранит результат в "CONTENT". Теперь переменная "CONTENT" содержит:

    <!-- begin: welcome.tpl -->
    <html>
    <head>
    </head>
    <body>
    <!-- begin: message.tpl -->
    <div align=center style="font-family: Verdana; font-size: 10pt">
    You're visiting our site for the very first time, so you might like to take
    our New User Tour.
    </div>
    <p>
    <!-- end: message.tpl -->
    <hr>
    </body>
    </html>
    <!-- end: welcome.tpl -->

    Вот что видит пользователь в своем броузере и что выводится функцией FastPrint().

    Заметим, что Вы можете присваивать значения переменным FastTemplate на основании результатов условных операций. Как показано выше, сообщение меняется в зависимости от того, был ли пользователь уже на этой страничке.

    Новинка месяца
    Еще одна полезная особенность FastTemplate - создание последовательного ряда значений, присваиваемых одной переменной; это особенно полезно при создании таких элементов HTML, как списки или ряды таблиц. Вот пример:

    <!-- begin: list.tpl -->
    <html>
    <head>
    </head>
    <body>
    <ul>
    {LISTCONTENT}
    </ul>
    </body>
    </html>
    <!-- end: list.tpl -->

    <!-- begin: list_item.tpl -->
    <li>{ITEM}
    <!-- end: list_item.tpl -->

    В данном случае планируется создание списка (из базы данных) повторными вызовами шаблона "list_item.tpl"; затем этот список присваивается переменной "LISTCONTENT" и заменяется на главной странице, "list.tpl". Вот скрипт:

    <?
    // list.php - item list

    // include class file
    include("class.FastTemplate.php3");

    // instantiate new object
    $obj = new FastTemplate("./tmpl/");

    // assign names for template files
    $obj->define(array(
    "list" => "list.tpl",
    "list_item" => "list_item.tpl"
    ));

    // get item list
    /*
    // open connection to database
    $connection = mysql_connect($hostname, $user, $pass) or die ("Unable to
    connect!");

    // query
    $query = "SELECT item from itemtable";
    $result = mysql_db_query($database, $query, $connection);

    // build $items array
    $items = array();
    while(list($item) = mysql_fetch_row($result))
    {
    $items[$count] = $item;
    $count++;
    }
    */
    // assume it looks like this..
    $items = array("vanilla", "pineapple", "strawberry", "chocolate chip",
    "peach", "banana", "grape");

    // build LISTCONTENT variable by concatenation of multiple instances of
    "list_item" template
    for ($x=0; $x<sizeof($items); $x++)
    {
    $obj->assign("ITEM", $items[$x]);

    // append the result of parsing the template to LISTCONTENT
    $obj->parse(LISTCONTENT, ".list_item");
    }

    // parse templates
    $obj->parse(RESULT, "list");

    // and print
    $obj->FastPrint(RESULT);
    ?>

    Каждый раз при прохождении массива $items переменной "ITEM" присваивается новое значение. Затем FastTemplate парсит шаблон "list_item" и заменяет переменные значениями. Оператор "." используется для присоединения результата каждой итерации переменной "LISTCONTENT".

    Этот метод очень удобен при построении повторяющихся последовательностей: все, что нужно - это создать шаблон, содержащий один элемент последовательности, и FastTemplate создаст столько копий, сколько нужно.
    (здесь рисунок)

    Метод Strict()
    Описанные выше методы достаточны для большинства применений FastTemplate, но существуют также и дополнительные возможности.

    Метод strict() используется для вывода сообщений об ошибках, если FastTemplate обнаруживает переменные шаблонов, не содержащие никаких значений; эти пустые переменные будут выводиться "как есть".

    <?
    // strict error checking
    $obj->strict();
    ?>

    Противоположный метод - no_strict(). Он заменяет эти неопределенные переменные пустыми строками.

    <?
    // turn off error checking
    $obj->no_strict();
    ?>

    Метод fetch() возвращает необработанные данные, полученные методом parse(). Взгляните на следующий пример:

    <?
    // parse templates
    $obj->parse(RESULT, "list");

    // print
    echo $obj->fetch("RESULT");
    ?>

    Метод clear() очищает значения переменных.

    <?
    // parse templates
    $obj->parse(RESULT, "list");

    // clear
    $obj->clear("RESULT");

    // prints nothing
    $obj->FastPrint("RESULT");
    ?>

    Метод get_assigned() используется для получения значения любой переменной FastTemplate.

    <?
    $obj->assign("EMAIL", "jdoe@somewhere.com");

    // returns "jdoe@somewhere.com"
    echo $obj->get_assigned("EMAIL");
    ?>

    И наконец функция utime() - удобна при измерении времени выполнения скрипта.

    <?
    // list.php - item list

    // include class file
    include("class.FastTemplate.php3");

    // instantiate new object
    $obj = new FastTemplate("./tmpl/");

    // get start time
    $begin = $obj->utime();

    // assign names for template files
    $obj->define(array(
    "list" => "list.tpl",
    "list_item" => "list_item.tpl"
    ));

    // get item list
    // assume it looks like this..
    $items = array("vanilla", "pineapple", "strawberry", "chocolate chip",
    "peach", "banana", "grape");

    // build LISTCONTENT variable by concatenation of multiple instances of
    "list_item" template
    for ($x=0; $x<sizeof($items); $x++)
    {
    $obj->assign("ITEM", $items[$x]);
    $obj->parse(LISTCONTENT, ".list_item");
    }

    // parse templates
    $obj->parse(RESULT, "list");

    // and print
    $obj->FastPrint(RESULT);

    // get end time
    $end = $obj->utime();

    // print script execution time
    echo "Done in " . sprintf("%01.3f ", ($end - $begin)) ." seconds.";
    ?>


    Музыкальные Стулья
    А теперь мы приводим пример использования FastTemplate при построении различных типов страниц.

    Предположим, что нужно сгенерировать Web страницу, содержащую музыкальные новости и она должна выглядеть вот так:
    (здесь рисунок)


    Используемые шаблоны:

    <!-- begin: main.tpl -->
    <html>
    <head>
    <basefont face="Verdana">
    </head>

    <body link="Navy" vlink="Navy" alink="Navy">

    <!-- standard header -->
    <table width="100%">
    <tr>
    <td bgcolor=navy height=50> </td>
    </tr>
    </table>

    <!-- table for quick links -->
    <table width="100%" border="0" cellspacing="10" cellpadding="10">
    <tr>
    {LINKS}
    </tr>
    </table>

    <p>

    <!-- main story -->
    {ARTICLE}

    <!-- standard footer -->
    <hr>
    <center><font size=-2>All content copyright and proprietary Melonfire,
    2001. All rights reserved.</font></center>

    </body>
    </html>
    <!-- end: main.tpl -->

    <!-- begin: list.tpl -->
    <!-- this generates the quick link boxes -->
    <td valign=top>
    <table border=1 cellspacing=0 cellpadding=5>
    <tr><td align=center bgcolor="black">
    <font color=white><b>{SECTION_TITLE}</b></font>
    </td></tr>
    <tr><td>
    <ul>
    {LIST}
    </ul>
    </td></tr>
    </table>
    </td>
    <!-- end: list.tpl -->

    <!-- begin: listitem.tpl -->
    <!-- individual list items -->
    <li><a href="story.php?id={ID}"><font size=-1>{ITEM}</font></a>
    <!-- end: listitem.tpl -->

    <!-- begin: article.tpl -->
    <!-- story area -->
    <table border="0" cellspacing="0" cellpadding="0">
    <tr><td valign=top>
    <img src="{IMAGE}" height=100 width=100 align="left" border=0 hspace=5
    alt="">
    <h3>{SLUG}</h3>
    <p>
    {STORY}
    </td></tr>
    </table>
    <!-- end: article.tpl -->

    Эти четыре шаблона будут использоваться для генерации страницы, представленной выше.

    <?

    /*** this entire section would come from a database ***/

    // article details - title, content, poster
    $slug = "Yellow Gold";
    $story = "Coldplay's debut album, <i>Parachutes</i>, has won them a bunch
    of awards, and the first single, <i>Yellow</i>, has been receiving a fair
    amount of airplay in both Europe and America. But if you want to understand
    why this band is regarded as one of best new acts to have emerged from
    England, you need to dig a little deeper...<p> Let's repeat that once
    again, shall we? <p> Coldplay's debut album, <i>Parachutes</i>, has won
    them a bunch of awards, and the first single, <i>Yellow</i>, has been
    receiving a fair amount of airplay in both Europe and America. But if you
    want to understand why this band is regarded as one of best new acts to
    have emerged from England, you need to dig a little deeper...<p>";
    $image = "poster.gif";

    // list of sections
    $sections = array("Pop", "Rock", "Dance");

    // list of titles for quick links
    // set as a 2D array
    $items = array();
    // pop links
    $items[0][0] = "All For You - Janet Jackson";
    $items[0][1] = "Room Service - Roxette";
    $items[0][2] = "No Strings Attached - N-Sync";

    // rock links
    $items[1][0] = "Jaded - Aerosmith";
    $items[1][1] = "All That You Can't Leave Behind - U2";
    $items[1][2] = "Parachutes - Coldplay";
    $items[1][3] = "Everything You Want - Vertical Horizon";

    // dance links
    $items[2][0] = "Spin - Collection";
    $items[2][1] = "Buddha Bar - Collection";

    // corresponding story ids
    $ids = array();
    $ids[0][0] = 23;
    $ids[0][1] = 124;
    $ids[0][2] = 65;

    $ids[1][0] = 63;
    $ids[1][1] = 234;
    $ids[1][2] = 43;
    $ids[1][3] = 533;

    $ids[2][0] = 12;
    $ids[2][1] = 239;

    /*** database action ends **/

    // include class file
    include("class.FastTemplate.php3");

    // instantiate new object
    $obj = new FastTemplate("./tmpl/");

    // assign names for template files
    $obj->define(array(
    "main" => "main.tpl",
    "list" => "list.tpl",
    "listitem" => "listitem.tpl",
    "article" => "article.tpl"
    ));

    // assign variables
    $obj->assign(array(
    "SLUG" => $slug,
    "STORY" => $story,
    "IMAGE" => $image
    ));

    // this section builds the list items, and then the different list boxes
    for ($x=0; $x<sizeof($sections); $x++)
    {
    // first loop through section list
    // get the name of this section
    $obj->assign("SECTION_TITLE", $sections[$x]);

    // this loop is to build the <li> items
    for ($y=0; $y<sizeof($items[$x]); $y++)
    {
    $obj->assign(array(
    "ITEM" => $items[$x][$y],
    "ID" => $ids[$x][$y]
    ));

    // each item is added to the previous
    $obj->parse("LIST", ".listitem");
    }

    // at this stage, the list is complete
    // the complete list is assigned (appended) to the end of a new variable
    $obj->parse("LINKS", ".list");

    // clear the LIST variable for the next series
    $obj->clear("LIST");
    }

    // parse templates
    $obj->parse(ARTICLE, "article");
    $obj->parse(RESULT, "main");

    // and print
    $obj->FastPrint(RESULT);
    ?>

    Первая часть этого скрипта извлекает информацию из базы данных - в данном случае значения заданы жестко для демонстрационных целей. Как только переменные заданы, скрипт инициализирует объект FastTemplate и определяет имена для четырех шаблонов.

    Поскольку шаблон "article.tpl" самый простой, скрипт сначала присваивает значения переменным "STORY", "SLUG" и "IMAGE". После этого создаются различные ссылки, которые присваиваются переменной "LINKS" с помощью оператора "."

    В конце этого процесса переменная "LINKS" хранит весь HTML код, необходимый для генерации трех участков вверху страницы. Затем просматривается шаблон "article.tpl" и его переменным присваиваются значения; результат сохраняется в переменной "ARTICLE". Наконец, значения переменных "ARTICLE" и "LINKS" переносятся в шаблон "main.tpl" и результат выводится в броузер.

    Так выглядит вывод:
    (здесь рисунок)


    А по-другому это называется…
    Это один вид, а теперь поменяем дизайн так, чтобы ссылки находились в левой колонке, а сам текст новости занимал остальную часть страницы.

    С помощью FastTemplate очень быстро и легко можно поменять расположение элементов на странице - нужно всего лишь отредактировать шаблоны "main.tpl" и "list.tpl".

    <!-- begin: main.tpl -->
    <html>
    <head>
    <basefont face="Verdana">
    </head>

    <body link="Navy" vlink="Navy" alink="Navy">

    <!-- standard header -->
    <table width="100%">
    <tr>
    <td bgcolor=navy height=50> </td>
    </tr>
    </table>

    <table width="100%" border="0" cellspacing="10" cellpadding="10">
    <tr>
    <td valign=top>
    {LINKS}
    </td>
    <td valign=top>
    {ARTICLE}
    </td>
    </tr>
    </table>

    <!-- standard footer -->
    <hr>
    <center><font size=-2>All content copyright and proprietary Melonfire,
    2001. All rights reserved.</font></center>

    </body>
    </html>
    <!-- end: main.tpl -->

    <!-- begin: list.tpl -->
    <table border=1 cellspacing=0 cellpadding=5>
    <tr><td align=center bgcolor="black">
    <font color=white><b>{SECTION_TITLE}</b></font>
    </td></tr>
    <tr><td>
    <ul>
    {LIST}
    </ul>
    </td></tr>
    </table>
    <p>
    <!-- end: list.tpl -->

    В данном случае изменена только структура таблицы. И при запуске PHP скрипта (не меняя ни единой строчки кода), вот что получается:
    (здесь рисунок)


    Не будем останавливаться! Сделаем так, чтобы ссылки располагались внизу…

    <!-- begin: main.tpl -->
    <html>
    <head>
    <basefont face="Verdana">
    </head>

    <body link="Navy" vlink="Navy" alink="Navy">

    <!-- standard header -->
    <table width="100%">
    <tr>
    <td bgcolor=navy height=50> </td>
    </tr>
    </table>

    <p>

    {ARTICLE}

    <p>

    {LINKS}

    <!-- standard footer -->
    <hr>
    <center><font size=-2>All content copyright and proprietary Melonfire,
    2001. All rights reserved.</font></center>

    </body>
    </html>
    <!-- end: main.tpl -->


    <!-- begin: list.tpl -->
    <font size=-1>
    New in <b>{SECTION_TITLE}</b>...
    <br>
    {LIST}
    </font>
    <p>
    <!-- end: list.tpl -->

    <!-- begin: listitem.tpl -->
    <a href="story.php?id={ID}"><font
    size=-1>{ITEM}</font></a>
    <!-- end: listitem.tpl -->

    Теперь меняем три шаблона: убираем таблицы и списки, и получается очень простой и симпатичный дизайн.
    (здесь рисунок)


    Как Вы заметили, с помощью FastTemplate можно легко отделить пользовательский интерфейс от самой программы, что позволяет дизайнерам, не имеющим опыта программирования, легко и быстро изменять вид Web страниц. Более того, возможность повторения и вставки HTML кода заметно может уменьшить время разработки и поддержки Web приложения.

    Более подробную информацию можно получить из следующих источников:

    Домашняя страница FastTemplate: http://www.thewebmasters.net/

    Статья на сайте PHPBuilder: http://www.phpbuilder.com/columns/sascha19990316.php3

    Perl модуль FastTemplate: http://www.sober.com/

    Категория: Статьи по php | Добавил: stazis (14.05.2009)
    Просмотров: 3423 | Рейтинг: 0.0/0
    Всего комментариев: 0
    Copyright MyCorp © 2024

    Сделать бесплатный сайт с uCoz