digitorum.ru

Как меня найти

Профиль

icq: 4415944

Что такое djem и с чем его едят: публикация.

DJEM, DJEM 2.0, djemscript

О том что такое джем можно почитать на официальном сайте (да-да, я знаю как это звучит), поэтому тут я не буду акцентировать внимание на описании самой 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 нельзя

Собственно вот и все.