Шаблоны HTML для турниров

From EjudgeWiki
Revision as of 07:45, 20 August 2017 by Cher (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Навигация: Главная страница/Система ejudge/Использование/Шаблоны HTML для турниров

Генерация HTML-страниц в ejudge реализована с помощью шаблонов HTML, хранящихся в файлах с суффиксом .csp. Шаблоны обрабатываются программой ej-page-gen, которая генерирует код на языке Си, который компилируется в разделяемую библиотеку (.so-файл), динамически подгружающуюся при работе ejudge.

Во время работы ejudge отслеживаются изменения в .csp-файл, и при необходимости файл перекомпилируется, и разделяемая библиотека переподгружается в память. При инсталляции ejudge шаблоны HTML-страниц помещаются в каталог PREFIX/share/ejudge/csp, то есть, если ejudge проинсталлирован в /opt/ejudge, полный путь к каталогу шаблонов будет /opt/ejudge/share/ejudge/csp. Содержимое этого каталога перезаписывается при каждом обновлении ejudge. Локальные копии шаблонов HTML, которые сохранятся при переинсталляции, могут находиться в каталоге CONTESTS_DIR/csp, то есть, если каталог турниров расположен в /home/judges, полный путь будет равен /home/judges/csp. Локальные копии шаблонов замещают собой оригинальные шаблоны. Если в локальной копии шаблона допущена ошибка, из-за которой генерация си-кода, или его компиляция, или загрузка в память завершаются с ошибкой, оригинальные шаблоны, находящиеся в каталоге инсталляции ejudge, не используются, и генерируется HTML-страница с сообщением об ошибке.

Файлы шаблонов, и оригинальные в PREFIX/share/ejudge/csp, и копии в CONTESTS_DIR/csp, являются глобальными для ejudge, то есть используются для генерации HTML-страниц всех турниров. Начиная с версии 3.7.0 поддерживаются шаблоны генерации HTML локальные для турнира. Каждый турнир может иметь свои шаблоны HTML страниц для генерации таблицы текущих результатов, интерфейса регистрации на турнир и пользовательского интерфейса участия в турнире. Модификация под конкретный турнир HTML-страниц административного интерфейса, интерфейса настройки турнира и редактирования базы пользователей не поддерживается.

Чтобы включить поддержку локальных для турнира шаблонов HTML-страниц в конфигурационном файле турнира contest.xml у элемента contest нужно установить атрибут contest.xml:enable_local_pages в значение "yes". Локальные варианты HTML-шаблонов должны размещаться в каталоге csp каталога турнира. Например, если турниры размещаются в каталоге /home/judges, то для турнира 1 шаблоны HTML-страниц должны размещаться в каталоге /home/judges/000001/csp. В частности, чтобы модифицировать отображение таблицы текущих результатов турнира в каталог /home/judges/000001/csp/contest из каталога /opt/ejudge/share/ejudge/csp/contest нужно скопировать файлы I_int_standings.c, int_standings_cell.csp, int_standings.csp и модифицировать их как требуется.

Если локальный для турнира шаблон не может быть скомпилирован или загружен, будет использоваться глобальный шаблон. При этом локальный для турнира шаблон будет отмечен как ошибочный и не будет перекомпилироваться даже в случае изменения. Чтобы сбросить закешированные локальные для турнира страницы в административном интерфейсе турнира (master) в меню "Actions" добавлен пункт "Reload Contest-Specific Pages" и "Reload ALL Contest-Specific Pages". Второй пункт сбрасывает закешированные шаблоны HTML всех турниров.

Шаблоны для турниров поддерживаются с версии 3.7.0.