О том что такое джем можно почитать на официальном сайте (да-да, я знаю как это звучит), поэтому тут я не буду акцентировать внимание на описании самой CMS.
В рамках этой заметки я хочу на примерах показать что происходит в момент публикации документа.
Предположим, что мы уже знаем что такое djemserver, как работать с клиентом, что такое "тип документа", дизайн- и контент-шаблоны.
Мы создали дизайн-шаблон "Текстовая страница", в который записали вот такой код:
Вы открыли документ по адресу http://<['main.system.php.config'].httpHost><#_url#>.
Создали контент-шаблон "Текстовая страница", в котором создали некие поля и тип документа "Статья", которому присвоили созданные дизайн- и контент-шаблоны.
Что произойдет при публикации документа указанного типа?
Серверу будет отправлена
команда на публикацию документа с заданным ID. Сервер, получая подобную
команду, извлекает документ из базы, интерпритирует инструкции
djemscript в его дизайн-шаблоне и записывает
результат в файл, имя которого указано в свойствах документа в поле "_file".
Таким образом результатом публикации является текст, который записывается
в файл. Многие посчитают, что это максимально неудобно, многим эта
идея покажется рациональной, но речь сейчас не об этом . Скажу только что у
данного подхода есть свои плюсы и минусы.
Применительно к коду выше в файл будет записан такой контент (например):
Вы открыли документ по адресу http://digitorum.ru/rus/test/
Важно помнить, что djemscript выполняется только в момент публикации, а весь остальной код, написанный на других языках программирования, при обращении к созданному файлу по http.
Рассмотрим пару примеров.
Если мы в дизайн-шаблоне напишем такой код
<?php <set myVar = 'RVE'> include($_SE<var[myVar]>R['DOCUMENT_ROOT'] . '<['main.system.php.config']._file>'); print R('DJEM')->Load(<['main.rus']._id>)->_name; ?>
В файл будет записан вот такой контент
<?php include($_SERVER['DOCUMENT_ROOT'] . '/system/php/config.php'); print R('DJEM')->Load(14)->_name; ?>
Все инструкции выполнились и был получен валидный php-код. При обращении к файлу по http, в который этот код был записан, будет выведено название документа с ID равным 14.
Теперь рассмотрим вот такой пример:
<?php $id = 14; <['$id']._name> ?>
Этот код (если не обращать внимания на то, что не сможет опубликоваться) не имеет никакого смысла. В момент публикации djemserver понятия не имеет что такое '$id' и не знает что с ним делать, так как в момент публикации никакие инструкции других языков программирования не выполняются. То есть с помощью djemscript можно "собирать" php-код (или код другого языка программирования), но php-код внедрять в операторы и методы djemscript нельзя.
Собственно вот и все.