Автор: Александр Шабаршин
01 ноября 2005 - 28 июня 2006
1. Цели
Webitable это система с открытыми исходниками, предназначенная для управления веб-контентом, которая разрешает вам быстро строить веб-сайты и веб-приложения простым кликом мыши (высокий уровень) или с помощью программирования на серверной стороное (низкий уровень) или что-то между. Будучи написаным на Java, система пригодня для любого Java-хостинга. Кроме того система может быть переписана на другой серверный язык для веба например Python, Perl или PHP. Сейчас Webitable - это набор классов, пригодных для любой платформы где есть Java, однако основной целевой платформой для реализации в настоящий момент будет считаться только Linux+Apache+TomCat+MySQL (я уже имею такой хостинг и планирую использовать библиотеку Webitable в качестве основы для нескольких своих онлайн-проектов).
Главной идеей системы Webitable можно считать то, что на сайтах построенных с помощью нее НЕТ АДМИНСКИХ СТРАНИЦ. Почти все изменения могут быть сделаны внутри каждой веб-страницы не выходя из нее. Это должно быть похоже на сервис Personalize на google.com или live.com, но это будет определённо не AJAX т.к. мы не используем и никогда не будем использовать XML. Также вместо ограниченного списка предопределенных блоков для размещения на пользовательской странице этих сервисов, наша система предлагает возможность строить обычные веб-сайты из блоков, полностью определяемых пользователями. Любой пользователь может перестроить или подстроить веб-сайт на движке Webitable. Если пользователь является обычным пользователем или гостем, то все модификации будут сохранены только для него, но если он вебмастер - то у него есть права на редактирование контента для всех. Высокий уровень редактирования контента должен быть проще Wiki и будет более комфортабельным чем форумы или доски объявлений. API для написания модулей Webitable должен дать возможность написания массы дополнительных модулей для нашей платформы на низком уровне.
2. Структура
Webitable имеет 3 уровня:
- Низкий уровень - java классы и Webitable модули, написанные на Java (или в будущем на любом другом объектно-ориентированном серверном языке);
- Средний уровень - платформенно-независимые Webitable скрипты с HTML-кодом внутри (что-то типа SSI или ASP) которые интерпретируются специальными модулями Webitable;
- Высокий уровень - дружественные пользователю онлайн средства редактирования контента, встроенные в каждую веб-старницу.
Со стороны пользователя, каждая веб-страница, построенная на технологии Webitable, будет состоять из набора блоков, упорядоченных в таблицу (с видимой или невидимой рамкой). Каждый блок может быть HTML-кодом (результат работы модуля Webitable) или таблицей, также в свою очередь поделенной на блоки. Если пользователь имеет права что-то делать со страницей или блоком, то он увидит небольшую звездочку в правом-верхнем углу соответствующего блока. По нажатию правой кнопки мыши над звездочкой может раскрытся попап-меню со списком допустимых действий (таких как Edit, Move или Add).
Сожержимое каждого блока является результатом работы некоторого действия определенного модуля Webitable. Каждая Webitable страница имеет список разрешенных модулей, каждый из которых имеет набор действий, генерирующих некоторый HTML-код. Один и тот же самый модуль (точнее одна и та же реализация модуля) может генерировать содержимое разных блоков на одной странице (разными действиями или одним и тем же действием). Это позволяет нам покрыть почти все потребности веб-дизайнеров для построения сайтов, подстраиваемых под пользователя.
3. Классы
Самый важный класс библиотеки Webitable это класс WebContext который дает модулям Webitable доступ к набору подсистем, а именно:
- WebPrint - подсистема печати для формирования HTML-кода как результата работы модуля (сейчас это реализовано как Java-интерфейс);
- WebParam - подсистема для сохранения параметров веб-сессии;
- WebDir - подсистема для доступа к файлам в определенном каталоге;
- WebSql - подсистема для работы с базами данных MySQL.
Каждый Webitable модуль должен реализовывать интерфейс WebModule. Этот интерфейс имеет два метода:
- boolean init(WebContext w) используемый для инициализации модуля путем передачи ему объекта WebContext с набором активных подсистем текущего контекста;
- boolean act(String s) вызываемый каждый раз когда модуль должен сгенерировать HTML-код (конкретное действие определяется строковым аргументом).
4. Модули
4.1 WebModuleSet
Этот модуль используется для манипуляций с параметрами сессии (WinParam). Действие этого модуля задается строкой в форме "имя=значение" которе добавляет новую запись в список параметров текущей веб-сессии (или редактирует существующую запись, если параметр с таким именем уже был определен). Модуль не генерирует никакого HTML-кода и пользуется только одной подсистемой WebParam из контекста WebContext.
4.2 WebModuleScript
Этот модуль используется для загрузки и исполнения простых скрипитов для формирования динамического HTML-наполнения. Действие этого модуля задается именем файла со скриптом (в будущем модуль сможет брать скрипты для исполнения не только из файлов, но также и из базы данных). Синтаксис поддерживаемых скриптов прост:
- \MODULE объект класс создает объект класса classname, который должен реализовывать интерфейс WebModule;
- \ACT объект строка инициирует действие, определяемой параметром строка для модуля объект;
- \VAL строка печатет значение параметра сессии с именем строка;
- \IF выражение начинает IF-блок в скрипте по результатам выполнения логического выражения (см.далее);
- \ENDIF заканчивает IF-блок скрипта;
- \ELSE определяет ELSE-часть IF-блока скрипта (между \IF и \ENDIF);
- \ELIF выражение определяет ELSE-IF-часть IF-блока скрипта (между \IF и \ENDIF).