$ SKIN
Было у одного человека две жены: красивая и некрасивая. Некрасивую он любил, а красивую — не любил. Не всё, что хорошо на глаз, хорошо на ощупь.
Неизвестный китайский автор, «Нравоучительная сказка».
Понятие презентационного модуля ($_SKIN) сейчас весьма распространено, и особенно глубоких разъяснений по этому поводу не требуется. $_SKIN — это модуль, реализующий определённый интерфейс и генерирующий HTTP-ответ (как правило, HTML), непосредственно передаваемый клиенту. Правда, в отличие от многих систем программирования, использующих аналогичное понятие, $_SKIN в Eludia может не только реализовать определённый дизайн кнопок и меню, но, к примеру, использоваться для отладочной распечатки "сырых" данных, быть частью механизма XML RPC и выполнять ещё множество разнообразных функций.
$_SKIN в Eludia работает так: каждая процедура Presentation API сначала уточняет значения своих аргументов (главным образом, подставляя умолчания), а затем передаёт обновлённый список параметров одноимённой процедуре из пакета текущего $_SKIN'а. Например, процедура draw_form сначала проверяет, не установлен ли режим read_only и если да, то подменяет определения полей ввода всех типов на static-поля с соответствующими значениями, а потом вызывает процедуру $_SKIN -> draw_form со своим же (но подправленным) списком аргументов.
Собственно выбор конкретного $_SKIN'а определяется несколькими факторами:
- по умолчанию используется $_SKIN с именем Classic;
- для текущей инсталляции эта установка может быть переопределена значением параметра $preconf -> {core_skin} в Eludia.pm и $GLOBALS [preconf] [core_skin] в Eludia.php;
- для текущего запроса имя презентационного модуля может быть изменено специальными парметрами.
HTML-$_SKIN'ы
Classic
Наш первый и долгое время бывший единственным дизайн. В Eludia.php это до сих пор единственный стандартный $_SKIN. Интерфейс одноэкранный (при каждом запросе страница перегружается полностью). Заголовки имеют минимальную высоту, чтобы по возможности разгородить рабочее пространство. Стиль меню максимально приближен к Win2k. Вообще дизайн подобран из соображений минимизации зрительного напряжения оператора, вследствие чего на презентациях производит впечатление "скучного".
WinCE
Сильно видоизменённый Classic, предназначенный для отображения WEB-интерфейсов на экранах карманных устройств под управлением Windows Mobile. Многие $_SKIN'ы подходят практически ко всем Eludia-приложениям, однако под WinCE необходимо отлаживаться особо: всё-таки функциональность браузера там сильно ограничена. Тем не менее, API Eludia остаётся неизменным, а ограничения носят количественный характер (сколько влезает строк и столбцов на экран и т. п.)
GazOil
Клон Classic с изменённой цветовой гаммой и рабочим полем, заметно уменьшенным за счёт корпоративного креатива.
TurboMilk
Глубоко переработанный Classic, существенно более похожий по дизайну на WEB-сайты и с дополнительными AJAX-механимами. На сегодня это наш базовый $_SKIN.
В отличие от Classic, здесь имеется постоянная часть (авторизационная шапка с меню), загружаемая единственный раз за сессию. Формы ввода и таблицы загружаются в нижний iframe. При каждом запросе на клиент передаётся не полный HTML главного меню, а только контрольная сумма (md5) от него: если она отличается от текущей (например, текущему пользователю изменили права доступа), следует специальный запрос на обновление меню.
IsUp
Отпочковавшийся от TurboMilk, этот дизайн окончательно утерял сходство с Win-интерфейсами. Здесь полностью отсутствует понятие о меню, однако принципиальное значение имеют "главная страница" и путь (path) до текущего экрана. Это единственный (пока) наш $_SKIN, где имитируется не только браузерная кнопка Back, но и Forward, причём обе присутствуют на каждой странице.
Специальные $_SKIN'ы
Dumper
Этот $_SKIN распечатывает древовидную структуру данных, извлечённую для отображения на текущем экране. Активизируется приписыванием &__dump=1 к url страницы, но доступен только при установленной опции $preconf -> {core_show_dump} (обычно это делается на тестовых инсталляциях). Из-под Classic и TurboMilk вызывается по Ctrl-RightClick.
XL
Генерирует HTML специального вида и сопровождает его такими HTTP-заголовками, что на клиенте для просмотра страницы запускается MS Excel. Изначально предназначался для распечатки страниц с единственной таблицей, однако в текущей версии адекватно отображает и содержимое форм. Активизируется приписыванием &xls=1 к url страницы.
XMLDumper
Распечатывает описания элементов дизайна (полей ввода и т. п.) вместе с данными в формате XML. Применяется для интеграции с внешними приложениями.
STDERR
Реализует прогресс-индикатор, сообщения котрого не отсылаются клиенту, а печатаются в error.log. Используется offline-скриптами, которые задействуют процедуры, изначально спроектированные для интерактивного использования.