Что такое DCC::QuickSite?

Основные возможности

DCC::QuickSite - это бэк-энд движка сайта, пригодный для построения сайтов практически любой сложности на основе технологии преобразования шаблонов. Кроме того благодаря встроенному механизму кеширования страниц на сервере обеспечивается значительное снижение нагрузки на сервер. Поддерживается так же сжатие gZip и ведение логов посещений. Шаблон структуры позволяет определять внутреннюю структуру ссылок практически любой сложности и уровня вложенности. Причём для каждого раздела, страницы или группы страниц возможно назначение собственного обработчика, что позволяет включить в общую структуру как статический так и динамический контент без каких-либо дополнительных сложностей, связанных с разнородным контентом. В состав DCC включен так же модуль поддержки СУБД MySQL.

Лицензия

Данное программное обеспечение распространяется под лицензией LGPL.

Инсталляция и настройка

Структура каталогов при размещении DCC::QuickSite на сервере:
/					- корневой каталог
.htaccess				- файл .htaccess
/dcc/
    /index.php				- вызывающий скрипт
    /cache/				- каталог кеша
    /data/				- каталог данных
    /img/				- каталог картинок
    /lib/				- каталог классов
        /class.index.inc		- враппер статического контента по умолчанию
        /class.doc.inc		- враппер дoкументации и другие врапперы
        /dcc/
            /class.dcc.inc		- DCC::QuickSite Pro
            /class.engine.inc	- класс определяемых пользователем функций
            /class.mysql.inc		- класс поддержки MySQL
            /class.parser.inc	- парсер виртуальных URI
            /class.root.inc		- класс настроек
    /logs/				- каталог логов
    /templates/			- каталог шаблонов

Константы

- файл /dcc/index.php

PATH

- Абсолютный путь к корню сайта. Вычисляется автоматически.

CACHE

- Управление кешированием. Default=TRUE

LOGGING

- Ведение логов. Default=FALSE

FLOCKING

- Файловый семафор. Default=TRUE

CLEAR

- Очистка выходного HTML от паразитных символов. Default=TRUE

GZIP

- Компрессия gZip. Default=FALSE

MYSQL

- Использование MySQL. Default=FALSE

Основные переменные

- файл /dcc/lib/dcc/class.root.inc

expireTime

- Время "жизни" кешированных страниц. Default: 86400 сек. (1 сутки)

depth

- Глубина рекурсии пресетов. При depth=1 пресеты отрабатываются только в пределах корневого шаблона. Default: 1. Значительное увеличение depth может негативно сказаться на производительности.

SITE

- Идентификатор сайта. Определяет имя корневого шаблона. Default: "site". Идентификатор позволяет, например, быстро переключиться на новую версию дизайна, или даже выбирать версию дизайна в зависимости от каких-либо внешних условий.

DBName, DBHost, DBPass, DBUser

- Параиетры доступа к базе данных MySQL.

Шаблон структуры

( structure pattern ) Хранится в переменной _ROOT_ в файле /lib/dcc/class.root.inc. Описывает внутреннюю структуру виртуальных URI сайта. Пример 1:
$_ROOT_ = array (
	""	=> "index",
	"test"	=> array (
		""	=> "test_index",
		"*"	=> "test_page",
		),
	);
В данной версии определено 3 вида узлов (node): 1. Пустой узел ("") - эквивалент DirectoryIndex.
2. Узел по умолчанию ("*") - данный узел работает при обращении к внутренним страницам раздела по умолчанию, если не определены другие узлы, соответствующие запрашиваемой странице.
3. Предопределённый узел ("[value]") - этот узел обрабатывается только при обращении к виртуальному URI, совпадающему с value. Данный пример описывает следующую структуру:
	/				- корневой каталог (index)
	/test/				- раздел test
	/test/page_name[.htm[l]]	- страница в разделе test с произвольным именем
В примере для корневого раздела сайта по умолчанию вызывается обработчик (враппер) index, для раздела test - по умолчанию обработчик test_index или (при обращении к внутренней странице раздела test) - test_page. В данном случае обработка ошибки 404 в разделе test возлагается на враппер test_page. В остальных случаях ошибка 404 будет сгенерирована автоматически, на уровне разбора виртуального URI. Например, при попытке обратиться к странице /qwert/ будет сгенерирована ошибка 404. В то время как для страницы /test/qwert.htm ошибка 404 может быть сгенерирована только враппером test_page, если этого не происходит, то страница считается валидной. Однако же для страницы /test/qwert/page_1.htm ошибка 404 вновь будет сгенерирована на стадии разбора виртуального URI, так как узел "*" в разделе test шаблона структуры определён как скаляр, а не как массив (если только для узла "qwert" не определён отдельный враппер). В противном случае, шаблон структуры должен иметь такой вид: Пример 2:
$_ROOT_ = array (
	""	=> "index",
	"test"	=> array (
		""	=> "test_index",
		"*"	=> array (
			""	=> "test_page",
			"*"	=> "test_page",
			),
		),
	);
При этом все элементы виртуального URI, следующие за элементом /test/ будут помещены во внутреннюю переменную класса $ARGS в виде массива. Вполне допустимо использование одного и того же враппера для обслуживания различных узлов. Ссылки вида /page, /page.htm и /page.html эквивалентны. Ссылка вида /page/ (а так же /page/other_page[.htm[l]]) означает, что узел шаблона структуры (SPaN - Structure Pattern Node) "page" не является скаляром и для него определены как минимум узлы "" и "*" (или "other_page") соответственно. В противном случае будет сгенерирована ошибка 404.

Front-end

Модуль DСС::dcc

Все параметры, передаваемые методами POST и GET, а так же COOKIE, SESSION и FILES, возвращаются во внутренние переменные класса, а не в глобальные переменные.

assign

- Инициализация шаблона (плейсходера)
assign (string [.]template_name [, string value ]);
Если перед template_name стоит точка, то вычисленное значение будет добавлено к текущему. Параметр Value может так же быть именем шаблона, тогда происходит кросс-инициализация (подмена) одного шаблона другим.

wrap

- массовая инициализация группы плейсхолдеров.
wrap (array template_list);
template_list - хэш вида 'template_name' => 'value';

purge

- обнуление шаблона или всех шаблонов
purge ([string template_name]);
Если параметр template_name не задан, обнуляется корневой шаблон по умолчанию.

summon

- Чтение файла с именем file_name в строковую переменную.
&string = summon (string file_name);
Работает быстрее, чем implode("", file($name));
Возвращает указатель на строку.

Модуль DСС::db

Documentation coming soon

Модуль DCC::engine

Модуль определяемых пользователем функций, доступных всем врапперам.

Обработчики (врапперы)

CACHE

- Разрешает кеширование данного враппера.

TEMPL

- Шаблон. По умолчанию равен значению глобального идентификатора $SITE. Каждый враппер состоит из двух частей - обязательной (obligatory) и определяемой пользователем (user-defined).

_init

- Обязательная функция возвращающает last_modified данного враппера, или FALSE, в случае "внутренней ошибки 404" враппера. Пример 5 .
 function _init() {
	$this->SELF = $this->DataDir."/".($this->ARGS[0] ? $this->ARGS[0] : 'index').".htm";
	return file_exists($this->SELF) ? filemtime($this->SELF) : FALSE;
 }
Данная функция проверяет, существует ли файл с именем, определённым в массиве $ARGS, И если да, то выдаёт время последней модификации. Если такого файла нет - то FALSE. Рассмотренная в примере 5 функция пригодна для выдачи статического контента в конструкциях вида /test/page_1.htm

_execute

- Обязательная функция Отвечает за собственно исполнение враппера. Во время рендеринга страниц запускается враппером DCC в контексте функции main().

Шаблоны документов

Синтаксис

Щаблоны документов хранятся в директории /dcc/templates/ и имеют расширение по умолчанию .tpl. Корневой шаблон имеет имя по умолчанию, совпадающее с идентификатором сайта (site.tpl).

Общие правила

Пример 3 - простейший шаблон.


	
	<tpl:title />
	

	
	
	


Данный шаблон содержит описание корневого шаблона сайта с идентификатором "site", в котором определены 2 плейсхолдера (placeholders) - title и content.

Шаблоны

Пример 4.1


	
	:: 
Рассмотрим создание меню ссылок на примере 4. Здесь определён шаблон menu_item, представляющий один пункт меню, а так же 2 плейсхолдера menu_href (ссылка) и menu_link (текст ссылки). Инициализация плэйсхолдеров и шаблонов осуществляется функциями assign и wrap. В нашем случае это будет выглядеть так: Пример 4.2
$link = array (
	"menu_href" => "http://gregory.pp.ru",
	"menu_link" => "Gregory's home page",
	);

$this->wrap($link);
Шаблон menu_item будет вычислен автоматически, при вычисление шаблона site, то есть корневого шаблона, который вычисляется всегда последним. Результатом выполнения примера 4.2 будет следующее: :: Gregory's home page Пример 4.3
$menu = array (
	"Index"			=> "/",
	"Gregory's home page"	=> "http://gregory.pp.ru",
	"LGPL License"		=> "/doc/license.htm",
	);

foreach ($menu as $name => $link) {
	$this->assign("menu_href", $name);
	$this->assign("menu_link", $link);
	$this->assign(".menu_item");
}
В примере 4.3 шаблон menu_item вычисляется на каждой итерации цикла с новыми значениями, при этом точка (.) перед именем шаблона в функции assign означает, что результат вычисления шаблона на каждой новой итерации будет добавлен (append) к предыдущему состоянию. В противном случае шаблон будет переинициализирован. В результате выполнения этого скрипта мы получим на выходе следующее: :: Index
:: Gregory's home page
:: LGPL License

Пресеты

include

- Включение файла шаблона.



Параметр file определяет имя файла. При наличии параметра used_by шаблон будет подключен только при вызове из соответствующего враппера. Если этот параметр не определён, то шаблон будет подключаться всегда. Такое решение позволяет уменьшить количество обрабатываемых шаблонов. Параметр self автоматически подключает шаблон, имя которого совпадает с именем вызывающего враппера, то есть данный параметр является обратным комбинации параметров file и used_by, позволяющих подключать несколько шаблонов для данного враппера. Параметр self обслуживает наиболее часто встречающуюся ситуацию, когда в едином для всего сайта шаблоне изменяется, скажем, только контентная часть (например для гостевой книги, форума, галереи и проч.), а всё остальное оформление остаётся неизменным.

last_modified

- Время последнего изменения виртуальной страницы в ISO-формате.

timestamp

- Текущее время и дата.