Eludia.php
Do (обсуждение | вклад) (→Обработчики) |
Do (обсуждение | вклад) |
||
(не показаны 8 промежуточных версий 1 участника) | |||
Строка 1: | Строка 1: | ||
+ | {{PHP}} | ||
+ | {{RightTOC}} | ||
Изначально Eludia-проекты реализовались на платформе Linux / Apache / Perl. Это обеспечивало большую эффективность разработки и простоту поддержки. Однако на определённом этапе нам пришлось отказаться от ряда заказов в связи с ограниченным распространением нашей излюбленной платформы. Тогда возникла идея перевести Eludia на PHP и при этом расширить круг потенциальных заказчиков сразу двумя способами: | Изначально Eludia-проекты реализовались на платформе Linux / Apache / Perl. Это обеспечивало большую эффективность разработки и простоту поддержки. Однако на определённом этапе нам пришлось отказаться от ряда заказов в связи с ограниченным распространением нашей излюбленной платформы. Тогда возникла идея перевести Eludia на PHP и при этом расширить круг потенциальных заказчиков сразу двумя способами: | ||
Строка 43: | Строка 45: | ||
* загрузить библиотеки; | * загрузить библиотеки; | ||
* запустить обработчик-функцию с фиксированным именем приложения (по нему определяется, в частности, пришёл ли запрос на back или front). | * запустить обработчик-функцию с фиксированным именем приложения (по нему определяется, в частности, пришёл ли запрос на back или front). | ||
+ | |||
+ | <?php | ||
+ | require 'site_config.php'; | ||
+ | require $GLOBALS [preconf] [core_location]; | ||
+ | handler ('public_site'); | ||
+ | ?> | ||
+ | |||
+ | Таким образом, содержимое любой динамической страницы Eludia-приложения всегда формируется одной функцией: [[handler]], вызывающей различные callback-процедуры в зависимости от [[тип]]а экрана ($_REQUEST [type]) и [[действие|действия]] ($_REQUEST [action]). | ||
+ | |||
+ | === Локальная конфигурация === | ||
+ | |||
+ | Параметры подключения к БД и прочие константы, специфические для текущей установки, доступны в качестве компонент хэша $GLOBALS [preconf]. Он должен устанавливаться в файле /site_config.php: | ||
+ | |||
+ | $GLOBALS [preconf] = array ( | ||
+ | |||
+ | core_location => 'eludia/core/eludia.php', | ||
+ | app_location => 'eludia', | ||
+ | db => array ( | ||
+ | driver => 'mysql', | ||
+ | host => 'localhost', | ||
+ | name => 'db', | ||
+ | user => 'user', | ||
+ | password => 'pass', | ||
+ | |||
+ | ), | ||
+ | |||
+ | ... | ||
+ | |||
+ | ), | ||
+ | |||
+ | == Структура директорий == | ||
+ | |||
+ | Кроме вышеупомянутых /index.php и /site_config.php, все файлы, относящиеся к ядру и приложениям Eludia, располагаются в директории $GLOBALS [preconf] [app_location] (в нашем примере — /eludia). Это позволяет поддерживать на том же хосте директории иных PHP-приложений: wiki, forum и т. п. | ||
+ | |||
+ | Параметр $GLOBALS [preconf] [core_location] указывает местоположение файла eludia.php в текущей установке. В норме это должен быть путь $GLOBALS [preconf] [app_location] . '/core/eludia.php'. Он используется в директииве require каждого файла-обработчика. При обновлении версии ядра Eludia.php в эту директорию записываются новые файлы, приложения при этом не затрагиваются. | ||
+ | |||
+ | Ниже все пути указаны относительно $GLOBALS [preconf] [app_location]. | ||
+ | |||
+ | Директория '''/model/''' содержит [[описание схемы данных]] приложения. Каждый файл соответсвует отдельной таблице, синтаксис — подмножество Perl5 (только вложенные массивы и хэши). | ||
+ | |||
+ | В директории '''/lib/''' располагается код приложений. В отличие от [[Eludia.pm]], здесь мы предполагем, что минимальная инсталляция содержит 2 приложения (front- и back-end), что обуславливает разделение директории по именам приложений (они используются при вызове функции handler) и вынесение /model/ уровнем выше (поскольку front- и back-end работают с одной и той же схемой данных). | ||
+ | |||
+ | Каждая поддиректория /lib/, например, '''/lib/cms''', состоит из 3 частей: | ||
+ | * файл конфигурации config.php (он является пусковым для [[StEludio]]); | ||
+ | * директория content с процедурами обработки содержимого, сгруппированными по [[тип]]ам экранов; | ||
+ | * директория presentation с процедурами формирования HTML, сгруппированными по [[тип]]ам экранов. | ||
+ | |||
+ | === Презентационные модули === | ||
+ | |||
+ | Процедуры из presentation формируют HTML не напрямую, а посредством абстрактного API. С его точки зрения, и публичный сайт, и CMS стоятся из одних и тех же типовых блоков: меню, таблиц, [[draw_form|форм]]. Отрисовкой же этих элементов в конкретном дизайне занимается объект, доступный в скрипте как $GLOBALS [_SKIN]. Например, процедура draw_news, определённая в /lib/public_site/presentation/news.php (лента новостей на публичной части сайта) использует для генерации таблицы ту же функцию API draw_table, что, скажем, процедура draw_users из /lib/cms/presentation/users.php (список администраторов сайта). draw_table осуществляет предварительную обработку данных и вызывает $GLOBALS [_SKIN] -> draw_table, которая непосредственно генерирует HTML. Класс же этого объекта определяется значением $GLOBALS [conf] [skin]. Таким образом достигается разделение содержимого и представления, что позволяет переиспользовать content-часть WEB-приложений. | ||
+ | |||
+ | Сами [[$_SKIN]]ы приложения располагаются в директории '''/skins/'''. Каждый из них является PHP-классом, определённым в одноимённом файле и наследующим класс generic_skin. | ||
+ | |||
+ | Последний является одним из [[$_SKIN]]ов ядра, чьи исходные тексты можно обнаружить в $GLOBALS [preconf] [app_location] . '/core/lib/skins'. |
Текущая версия на 09:01, 23 апреля 2009
![]() |
На этой странице упоминается Eludia.php: порт Eludia.pm на PHP. Данный проект был доведён до рабочей бета-версии, однако впоследствии заморожен и в настоящее время не поддерживается. |
Содержание |
Изначально Eludia-проекты реализовались на платформе Linux / Apache / Perl. Это обеспечивало большую эффективность разработки и простоту поддержки. Однако на определённом этапе нам пришлось отказаться от ряда заказов в связи с ограниченным распространением нашей излюбленной платформы. Тогда возникла идея перевести Eludia на PHP и при этом расширить круг потенциальных заказчиков сразу двумя способами:
- снизить стоимость внедрения, позволив размещать системы на дешёвом PHP-хостинге;
- преодолеть неадекватность портации mod_perl под Windows, используя родной ISAPI PHP модуль под IIS.
Технически задача портации решена до стадии гамма-версии. Во всяком случае, титульная часть нашего сайта http://eludia.ru (и front-, и back-end) использует Eludia.php.
Тем не менее, коммерческого использования Eludia.php пока не нашла по ряду объективных причин:
- серьёзные заказчики не рассматривают дешёвый публичный хостинг как вариант размешения своих корпоративных информационных систем;
- для простых стандартных публичных сайтов существует большое число хорошо известных конкурирующих открытых продуктов (сами мы, например, используем MediaWiki);
- в 2007 году по инициативе Microsoft был разработан FastCGI-модуль для IIS. Основное его предназначение — запуск PHP-скриптов, однако он вполне может использоваться с интерпретатором любого другого динамического языка программирования, в частности, Perl5. Что позволило нам использовать Eludia.pm в комбинации с IIS.
Таким образом, в настоящее время проект активно не развивается, хотя определённые перспективы у него, возможно, имеются. Мы приглашаем всех желающих ознакомиться с описанием дистрибутива Eludia.php, использовать любые его составляющие по своему разумению и обращаться к нам с любыми вопросами на эту тему.
[править] Системные требования
Eludia.php может использоваться совместно с любым WEB-сервером, который так или иначе поддерживает формирование ответов при помощи языка PHP, будь то встраивание интерпретатора в сам сервер или использование внешнего процесса через интерфейс fastCGI или хотя бы CGI (что не рекомендуется по соображениям эффективности).
Для функционирования приложения на базе Eludia.php необходима реляционная СУБД. В настоящее время поддерживается только MySQL версии 4.0 и выше. Если вам необходимо использовать иную реляционную СУБД, доступную из PHP, то разработка соответствующего переходника для Eludia.php — дело одного рабочего дня.
Текущая версия Eludia.php функционирует на базе PHP 5.2.4 и 5.2.10. Ядро должно быть совместимо со всеми релизами 4.х и 5.х, хотя презентационный модуль для front-end сайта, входящий в дистрибутив, требует PHP 5.
Требования к операционной системе сервера ограничиваются возможностью установить вышеперечисленное ПО: WEB-сервер и Perl5 с доступом к выбранной СУБД. Таким образом, можно использовать любую UNIX-подобную ОС или Windows семейства NT.
[править] Устройство
[править] Обработчики
В Eludia.php воспроизводится понятие "обработчика запроса", обеспечиваемое в Apache / mod_perl командами SetHandler / PerlHandler и недоступное на PHP-хостинге, в особенности без права редактирования httpd.conf. Достигается это прописыванием
DirectoryIndex index.php ErrorDocument 404 /index.php
в файл .htaccess корневой директории. Таким образом, все HTTP-запросы, приходящие на хост, обрабатываются в index.php. Это позволяет реализовать внятные человекочитаемые URL (типа /about/portfolio/higher_technologies вместо /index.php?rub1=13&rub2=66&pageid=6545), однако вызывает необходимость самостоятельно разбираться с некорректными запросами, в частности, на несущеаствующие файлы.
Если требуется переопределить обработчик для какой-либо поддиректории, достаточно разместить там локальный .htaccess со строкой
DirectoryIndex index.php
Смысл обработчика-файла заключается только в том, чтобы:
- загрузить конфигурацию;
- загрузить библиотеки;
- запустить обработчик-функцию с фиксированным именем приложения (по нему определяется, в частности, пришёл ли запрос на back или front).
<?php require 'site_config.php'; require $GLOBALS [preconf] [core_location]; handler ('public_site'); ?>
Таким образом, содержимое любой динамической страницы Eludia-приложения всегда формируется одной функцией: handler, вызывающей различные callback-процедуры в зависимости от типа экрана ($_REQUEST [type]) и действия ($_REQUEST [action]).
[править] Локальная конфигурация
Параметры подключения к БД и прочие константы, специфические для текущей установки, доступны в качестве компонент хэша $GLOBALS [preconf]. Он должен устанавливаться в файле /site_config.php:
$GLOBALS [preconf] = array ( core_location => 'eludia/core/eludia.php', app_location => 'eludia', db => array ( driver => 'mysql', host => 'localhost', name => 'db', user => 'user', password => 'pass', ), ... ),
[править] Структура директорий
Кроме вышеупомянутых /index.php и /site_config.php, все файлы, относящиеся к ядру и приложениям Eludia, располагаются в директории $GLOBALS [preconf] [app_location] (в нашем примере — /eludia). Это позволяет поддерживать на том же хосте директории иных PHP-приложений: wiki, forum и т. п.
Параметр $GLOBALS [preconf] [core_location] указывает местоположение файла eludia.php в текущей установке. В норме это должен быть путь $GLOBALS [preconf] [app_location] . '/core/eludia.php'. Он используется в директииве require каждого файла-обработчика. При обновлении версии ядра Eludia.php в эту директорию записываются новые файлы, приложения при этом не затрагиваются.
Ниже все пути указаны относительно $GLOBALS [preconf] [app_location].
Директория /model/ содержит описание схемы данных приложения. Каждый файл соответсвует отдельной таблице, синтаксис — подмножество Perl5 (только вложенные массивы и хэши).
В директории /lib/ располагается код приложений. В отличие от Eludia.pm, здесь мы предполагем, что минимальная инсталляция содержит 2 приложения (front- и back-end), что обуславливает разделение директории по именам приложений (они используются при вызове функции handler) и вынесение /model/ уровнем выше (поскольку front- и back-end работают с одной и той же схемой данных).
Каждая поддиректория /lib/, например, /lib/cms, состоит из 3 частей:
- файл конфигурации config.php (он является пусковым для StEludio);
- директория content с процедурами обработки содержимого, сгруппированными по типам экранов;
- директория presentation с процедурами формирования HTML, сгруппированными по типам экранов.
[править] Презентационные модули
Процедуры из presentation формируют HTML не напрямую, а посредством абстрактного API. С его точки зрения, и публичный сайт, и CMS стоятся из одних и тех же типовых блоков: меню, таблиц, форм. Отрисовкой же этих элементов в конкретном дизайне занимается объект, доступный в скрипте как $GLOBALS [_SKIN]. Например, процедура draw_news, определённая в /lib/public_site/presentation/news.php (лента новостей на публичной части сайта) использует для генерации таблицы ту же функцию API draw_table, что, скажем, процедура draw_users из /lib/cms/presentation/users.php (список администраторов сайта). draw_table осуществляет предварительную обработку данных и вызывает $GLOBALS [_SKIN] -> draw_table, которая непосредственно генерирует HTML. Класс же этого объекта определяется значением $GLOBALS [conf] [skin]. Таким образом достигается разделение содержимого и представления, что позволяет переиспользовать content-часть WEB-приложений.
Сами $_SKINы приложения располагаются в директории /skins/. Каждый из них является PHP-классом, определённым в одноимённом файле и наследующим класс generic_skin.
Последний является одним из $_SKINов ядра, чьи исходные тексты можно обнаружить в $GLOBALS [preconf] [app_location] . '/core/lib/skins'.