Eludia.php

Материал из Eludia
(Различия между версиями)
Перейти к: навигация, поиск
(Структура директорий)
(Обработчики)
Строка 51: Строка 51:
 
   handler ('public_site');
 
   handler ('public_site');
 
  ?>
 
  ?>
 +
 +
Таким образом, содержимое любой динамической страницы Eludia-приложения всегда формируется одной функцией: [[handler]], вызывающей различные callback-процедуры в зависимости от [[тип]]а экрана ($_REQUEST [type]) и [[действие|действия]] ($_REQUEST [action]).
  
 
=== Локальная конфигурация ===
 
=== Локальная конфигурация ===

Версия 15:13, 14 февраля 2008

Содержание

Изначально Eludia-проекты реализовались на платформе Linux / Apache / Perl. Это обеспечивало большую эффективность разработки и простоту поддержки. Однако на определённом этапе нам пришлось отказаться от ряда заказов в связи с ограниченным распространением нашей излюбленной платформы. Тогда возникла идея перевести Eludia на PHP и при этом расширить круг потенциальных заказчиков сразу двумя способами:

  1. снизить стоимость внедрения, позволив размещать системы на дешёвом PHP-хостинге;
  2. преодолеть неадекватность портации mod_perl под Windows, используя родной ISAPI PHP модуль под IIS.

Технически задача портации решена до стадии гамма-версии. Во всяком случае, титульная часть нашего сайта http://eludia.ru (и front-, и back-end) использует Eludia.php.

Тем не менее, коммерческого использования Eludia.php пока не нашла по ряду объективных причин:

    1. серьёзные заказчики не рассматривают дешёвый публичный хостинг как вариант размешения своих корпоративных информационных систем;
    2. для простых стандартных публичных сайтов существует большое число хорошо известных конкурирующих открытых продуктов (сами мы, например, используем MediaWiki);
  1. в 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'.

Персональные инструменты
Пространства имён

Варианты
Действия
Навигация
Разработчику
Администратору
Инструменты