Content Management Framework. Easy. Convenient. Free.
Навигация
Новости
Новая версия PHPC!
Очередной стабильный релиз с новыми возможностями.
12 декабря 2010 | Подробнее...
Документация!
Солидное пополнение.
28 октября 2010 | Подробнее...
Обновление документации
Онлайн-руководство начинает потихонечку обновляться.
15 октября 2010 | Подробнее...
Новая версия PHPC!
Вышла новая версия, 2.5.1, с набором полезных изменений.
12 октября 2010 | Подробнее...
DLTFM!
Отныне документация доступна и в формате для скачивания.
30 января 2010 | Подробнее...
Новая документация
Первые разделы Руководства уже на сайте.
20 января 2010 | Подробнее...
Онлайн-поддержка
Теперь вы можете задать свои вопросы через ICQ.
11 января 2010 | Подробнее...

Порядок обработки запроса

Рассмотрим процесс обработки запроса в PHP Compiler на простом примере. Пример будет разобран весьма подробно, по шагам, начиная со строки HTTP-запроса, пришедшего на сервер, и заканчивая готовой HTML-страницей.

Исходные данные

Предположим, что на наш сервер пришел следующий HTTP-запрос:

GET /gallery/space/page1

В базе данных при этом имеются следующие данные:

1. Страница gallery:

idnametemplatebundlestitle
5gallerygallerygalleryФотогалерея

2. Правило представления ссылки, связанное со страницей gallery:

pageidpattern
5gallery/$name/page$page

3. Таблица photos со следующими данными:

idgalleryfilenametitle
1animalscat.jpgКошка
2animalsdog.jpgСобака
3animalsowl.jpgСова
4spaceearth.jpgЗемля
5spacemoon.jpgЛуна
6spacesun.jpgСолнце
7spacestars.jpgЗвезды

4. Пакет gallery со следующим содержимым:

$name=acceptAlphaParameter("name");
$page=acceptIntParameter("page",1,10);
$offset=($page-1)*20;
$photos=$database->getLinesRange("photos",$offset,20,"gallery=".slashes($name));

5. Шаблон gallery со следующим текстом:

<title><var:currentPage:title></title>

<table border="1">
  <tr align="center">

<logic:iterator property=photos item="photo">
    <td>
      <img src="/photos/<var:photo:gallery>/<var:photo:filename>"><br>
      <var:photo:title><br>
    </td>
</logic:iterator>

  </tr>
</table>

Приступим.

Шаг 1. Поиск PHPC-страницы

Первым делом PHP Compiler определяет, какой из страниц адресован пришедший GET-запрос. В простейшем случае строка запроса совпадает с названием одной из PHPC-страниц в таблице pages (учтите только, что все запросы и все ссылки начинаются со слеша, тогда как названия страниц с этого символа никогда не начинаются). Но в нашем случае было использовано одно из правил "красивых ссылок", и для этого правила есть запись в таблице linkstyles:

pageidpattern
5gallery/$name/page$page

Путем несложной проверки движок определяет, что этот паттерн и пришедший GET-запрос (/gallery/space/page1) соответствуют друг другу и странице с ID=5:

  • gallery/$name/page$page
  • gallery/space/page1

При этом два дополнительных параметра были переданы неявно:

ПараметрЗначение
name"space"
page1

Кроме неявных дополнительных параметров, правило представления ссылки может генерировать и явные параметры. Они должны быть перечислены в поле "Набор умолчаний" в форме создания нового представления ссылок в панели управления.

Все дополнительные параметры, а в нашем случае их два, name и page, добавляются в массив $_REQUEST:

$_REQUEST=array(
  "name"=>"space",
  "page"=>1
)

Движок же получает подсказку, что была запрошена страница gallery (поскольку у этой страницы ID=5).

Вообще, запрос "/gallery/space/page1" эквивалентен запросу:

GET /gallery?name=space&page=1

Используя правила представления ссылок (таблица linkstyles), движок автоматически приводит все "красивые" запросы к обыкновенным.

Наконец, зная, что была запрошена страница с ID=5, движок выбирает данные об этой странице:

idnametemplatebundlestitle
5gallerygallerygalleryФотогалерея

Эти данные будут доступны в пакете и в шаблоне, в переменной $currentPage. Кроме того, движок теперь знает, как этот пакет и шаблон называются (gallery и там, и там). Можно приступать к следующему шагу.

Шаг 2. Выполнение пакета

Поскольку в свойствах страницы указан пакет gallery, движок запускает этот пакет на выполнение. Как мы помним, текст пакета состоит из четырех несложных PHP-команд:

$name=acceptAlphaParameter("name");
$page=acceptIntParameter("page",1,10);
$offset=($page-1)*20;
$photos=$database->getLinesRange("photos",$offset,20,"gallery=".slashes($name));

Первые две команды, используя массив $_REQUEST, принимают два внешних параметра − "name" и "page". Внешние параметры − это параметры, присланные посетителем, их надо всегда тщательно проверять. Поэтому пакет не использует массив $_REQUEST, а использует стандартные функции acceptAlphaParameter и acceptIntParameter. Это гарантирует, что посетитель не сможет передать нам заведомо неверные или проблемные значения.

Третья строка, используя номер страницы, определяет начало диапазона выборки данных. Подробнее об этом можно почитать в описании к методу getLinesRange. Поскольку посетитель запросил первую страницу галереи, диапазон выборки начинается с 0. Таким образом, наш пакет можно мысленно свести к таким командам:

$name="space";
$page=1;
$offset=0;
$photos=$database->getLinesRange("photos",0,20,"gallery='space'");

Последняя команда делает выборку из таблицы photos, ограниченную условием и диапазоном из 20 записей. Но в нашем примере подходящих записей и того меньше − всего 4, поэтому результат выборки будет иметь вид:

idgalleryfilenametitle
4spaceearth.jpgЗемля
5spacemoon.jpgЛуна
6spacesun.jpgСолнце
7spacestars.jpgЗвезды

Этот двухмерный массив будет сохранен в переменной $photos, и будет автоматически доступен к шаблоне.

Шаг 3. Выполнение шаблона

Последний этап работы PHP Compiler − это выполнение шаблона gallery. В нем будут автоматически доступны все переменные, которые мы создали в пакете − в частности, переменная $photos с данными фотогалереи, а также переменная $currentPage с данными текущей страницы, которая понадобится нам для вывода заголовка.

После подстановки переменных и отработки циклических тегов <logic:iterator>, результат будет иметь вид:

<title>Фотогалерея</title>

<table border="1">
  <tr align="center">
    <td>
      <img src="/photos/space/earth.jpg"><br>
      Земля<br>
    </td>
    <td>
      <img src="/photos/space/moon.jpg"><br>
      Луна<br>
    </td>
    <td>
      <img src="/photos/space/sun.jpg"><br>
      Солнце<br>
    </td>
    <td>
      <img src="/photos/space/stars.jpg"><br>
      Звезды<br>
    </td>
  </tr>
</table>

Полученный текст HTML-страницы уже не содержит никаких специальных тегов. Он отправляется посетителю.

Готовый результат

Посетитель, получив готовую HTML-страницу, увидит у себя на экране что-нибудь наподобие:

Документация
Лучшие сайты на PHPC
Наши друзья
Другие интересные CMF
Помогите проекту!
WMZ: Z829076217306
WMR: R735042680488
Онлайн-поддержка
Техподдержка сайтов,
Разработка модулей
ICQ: 564226396