Персональные инструменты
Вы здесь: Главная / Статьи / К вопросу понимания методов кастомизации современного Plone

К вопросу понимания методов кастомизации современного Plone

Краткое резюме навеянное невнятным переводом статьи Мартина Аспели (Martin Aspeli) о кастомизации в Plone третьей версии (Customization for developers)

Сначала договоримся о терминологии - например слово КАСТОМИЗАЦИЯ мне не нравится - для русскоговорящего человека оно ничего не значит (если он не поварился уже в среде разработчиков, в особенности Plone-разработчиков). Предлагаю использовать термин НАСТРОЙКА - с одной стороны он напоминает надстройку, а здесь имеется ввиду модификация, но с другой стороны он устойчиво используется в русском языке для обозначения именно пользовательской модификации свойств изделия при помощи предусмотренных разработчиком механизмов и параметров. Другие моменты не столь бросаются в глаза и о них я буду говорить в тексте статьи.

Итак, в упомянутой статье говорится о двух способах (и соответствующих группах механизмов) настроек Плона - о чисто пользовательском (экспериментальном для разработчика) и используемом в серьезной разработке. Первый предполагает использование механизмов настройки через ZMI (Панель Управления Зоп - ПУЗ) и иные способы настройки через вэб-интерфейс (вэб-морда мне нравится больше :) , но правильнее говорить вэб-панель, если считать термин вэб устоявшимся и обозначающим контент (наполнение) сети Интернет и совокупность методов и способов предоставления и получения доступа к этому мультимедийному информационному наполнению т.е. сетевые технологии доступа к наполнению). Второй способ это совокупность методик и механизмов настройки Плон непосредственно в файловой системе, в репозитарии (хранилище) дистрибутивов продуктов-объектов из которого и формируется структура базы Зоп (фактически, совокупность базовых компонентов-дистрибутивов хранилища, HTTP-сервера с доступом к серверу приложений Зоп и самого сервера приложений Зоп и называется Плоном), которая через механизм сервера приложений в дальнейшем обеспечивает доступ к наполнению Плон-сайта. Совокупность экземпляров приложений-объектов (по крайней мере базовая) скомпилированных и хранимых в базе Зоп с доступом через сервер приложений Зоп (аналог СУБД, только вместо голых данных в базе хранятся экземпляры объектов, т.е. данные разных типов со специфическими для каждого типа механизмами доступа-обработки этих данных) называется Plone instance (экземпляр Плона). В статье рассматривается два основных метода настройки Плона в файловой системе - через слои инструмента Скины (Темы) - дополнительной надстройки в Плон которая специфична для настройки именно темы (стиля) Плон-сайта; и через слои инструмента Браузер (Обозреватель) который в старых версиях Плон (до 3.0) работал в вырожденном режиме - с единственным базовым не явным слоем (поэтому в старых версиях Плона такого механизма настройки практически не было). Браузер (Обозреватель) - это фактически сервер приложений-объектов, точнее его основной компонент - отвечающий за работу со стороны базы приложений-объектов (в терминологии Зоп приложения называются объектами - это и не удивительно ведь Зоп это сервер и приложений и данных, т.е. экземпляров объектов) - теперь он также настраивается как и компоненты-объекты Плон которые раньше только отдавались им в ответ на запросы Вэб-сервера (который в свою очередь получил их от пользователя сайта). Любой способ настройки Плон использует механизм замещения (или заимствования) одной реализации объекта другой реализацией.

При использовании настройки через слои Тем - в список текущей (или иной, указанной при регистрации) темы встраивается дополнительный настроечный слой. Поскольку механизм инструмента Темы предполагает регистрацию в базе нескольких продуктов-тем каждый со своим набором слоев, то настройка сайта через Темы делается встраиванием слоя на вершине списка слоев. Просмотр при поиске ресурса для ответа на запрос сервер Зоп делает в следующем порядке - сначала просматривается текущая папка в иерархии объектов в базе Зоп, затем поиск идет вверх по иерархии до корневой папки и если объект не найден - включается механизм поиска в надстройке-инструменте Темы, здесь просмотр идет по списку слоев (слои представляют папки-хранилища ссылок на ресурсы (типизированных данных для объектов) в файловой системе, или объекты-папки введенных в базу ресурсов, представляющих собой экземпляры объектов для исходного типа данных). Поиск по слоям происходит сверху вниз по списку зарегистрированных для текущей темы слоев. Вверху (как правило) списка (который можно менять) находится объект-папка Custom которая предназначена для хранения настроенных копий (это полноценные экземпляры объектов тех ресурсов которые были скопированы в целях модификации-настройки) объектов-ресурсов темы (сами ресурсы находятся, как правило, в файловой системе, в базе же регистрируются только ссылки на них). Затем идут слои зарегистрированных в текущей теме (для каждой темы свои слои). Хотя папку Custom можно поместить и ниже по списку - это не будет иметь большого смысла, т.к. она предназначена именно для обеспечения наибольшего приоритета при поиске ресурса.  Тема, по сути, представляет собой как-раз упорядоченный набор слоев с хранящимися в них экземплярами объектов типичных для настройки представления наполнения сайта. Типов таких объектов пять - это шаблон страницы отдаваемой пользователю на запрос, это ява- и питон-скрипты, таблицы стилей и картинки. Конечно и в Темах можно хранить другие типы данных и типы, традиционно используемые темой можно хранить вне инструмента-папки Темы, но именно такая совокупность типов традиционно там хранится. Этот механизм генерирует представление окончательной странички выдаваемой пользователю, формируемой из данных предоставленных экземплярами объектов базы которые были запрошены пользователем. Т.е. это окончательный фильтр-преобразователь после прохождения которого данные выдаются пользователю.

Инструмент Обозреватель работает раньше (на более глубоких первичных уровнях отклика на запрос) инструмента Темы. Он формирует представление каждого отдельного объекта (странички) который был запрошен пользователем (или запрошен, в последствии, парсером Зоп, как дочерний по отношению к объекту запрошенному пользователем в порядке разбора и выполнения запроса пользователя). В контексте базы Зоп под объектами следует понимать экземпляры объектов содержащие в т.ч. и данные, а не в обычном смысле понятия объект, как тип-структура данных. Благодаря иной специфике работы Обозревателя (отличной от Тем) эта настройка предполагает манипуляции с другими типами ресурсов (которые также как и в Темах, обычно хранятся в файловой системе и представлены в базе ссылками). Слой Обозревателя это (как и папка-слой Тем) экземпляр объекта (потомка zope.interface.Interface) хранящего в себе ссылки на специфические (для Обозревателя) ресурсы (хотя и здесь не обязательно только специфические для Обозревателя). Типов таких ресурсов три - это представления (для наполнения запрошенного экземпляра объекта), вьюлеты (представления для специальных областей в теле наполнения запрошенного экземпляра объекта)  и портлеты (представления, да еще и с дополнительным механизмом обработки, для специальных областей вне тела основного запрошенного экземпляра объекта - обычно выводимые в боковые створки сайта). Такой слой Обозревателя сработает (вместо других слоев включая базовый) если он реализует экземпляры объектов предоставляющих более специфичные данные для обрабатываемого, запрошенного, экземпляра объекта, чем все остальные слои. Можно сказать, что формально, при настройке Плон через Темы используется замещение одного объекта-ресурса другим, имеющим другой идентификатор. В то время как при использовании Обозревателя имя объекта-ресурса сохраняется (может быть множество объектов-ресурсов с одним именем в разных слоях Обозревателя), но меняется область его применения (и для использования в каждом конкретном случае выбирается тот слой который предоставляет наиболее узко-специфичный экземпляр объекта-ресурса для обрабатываемого в запросе экземпляра объекта данных). Кроме этого отличия (которое указывает на большую упорядоченность и читабельность настройки слоями Обозревателя) можно говорить, что настройка которая требует изменения только таблиц стилей удобнее выполняется слоями Тем, в то время как настройка требующая изменения кода представлений объектов базы (реализованных как куски на языке TAL из которых на основе более общего шаблона собирается страничка) удобнее выполняется слоями Обозревателя. Представления Обозревателя аналогичны шаблонам страниц в Темах, только у них есть дополнительное свойство определяющее их область применения, так же и для остальных ресурсов Обозревателя есть не специфицированные аналоге в слоях Тем. Надо также заметить, что слои Обозревателя можно использовать посредством дух продуктов (один из которых реализует частный случай методики, другой более общий) - оба включены в версии Плон больше 3.2. Один из продуктов - plone.theme - метит расположенные в его слое ресурсы темой (установленной в Плоне (в portal_skins) и включает свои ресурсы когда активизируется его тема). Другой, более общий, plone.browserlayer - метит свое содержимое любым объектом экземпляр которого может вызываться (например этот слой для оформления вызываемых страничек, другой для оформления папок и т.д.). Слои Обозревателя называют объектами-маркерами (именно они устанавливают связь между областью применения указанной для объекта-ресурса и объектом данных который был запрошен пользователем и будет оформляться теми ресурсами которые хранятся в объекте-маркере-слое - они собой маркируют объекты-ресурсы на которые ссылаются (которые порождают)). Еще более специальное название слоя Обозревателя - интерфейс-маркер - в том смысле, что сам объект реализующий слой не содержит никаких модификаций (относительно zope.interface.Interface) стандартного интерфейса (т.е. адаптера структуры данных (собственно объекта) для размещения в базе Зоп - некоего расширения исходного объекта данных для размещения в базе Зоп), за исключением дополнительного связывания своих потомков (т.е. объектов-ресурсов которые содержатся в слое, точнее сказать на которые ссылается слой как объект-родитель) с определенными типами объектов данных (кроме общей адаптации объекта-ресурса к базе Зоп). Точнее сказать происходит не прямое связывание, а лишь указание в качестве области применения для объекта-ресурса (потомка слоя Обозревателя) в виде некоего типа объекта данных. Связывание же происходит уже на этапе обработки полученного от пользователя запроса объекта данных и применение к нему для оформления наиболее специфичного слоя Обозревателя. В качестве примера формального различия между двумя типами настройки можно привести примеры запросов формируемых для ресурсов Обозревателя - http://yoursite.com/++resource++wibble.gif (для зарегистрированного в Обозревателе ресурса wibble.gif) и для ресурсов Тем - http://yoursite.com/wibble.gif или http://yoursite.com/1/wibble.gif или http://yoursite.com/1/2/wibble.gif. Отсюда четко видно, что в Обозревателе используется отдельное пространство имен, тогда как в Темах (как и в традиционном Зоп-Плон) используется глобальное поле имен для ссылки на экземпляр объекта (уникальный идентификатор). Для слоев Обозревателя уникальность требуется только в пределах одного слоя. В базе Зоп ресурсы Обозревателя обычно регистрируются в таких реестрах, как portal_css, portal_javascripts, или portal_kss.

©(22.08.2012)CIV.Che

Добавить комментарий

You can add a comment by filling out the form below. Plain text formatting. Comments are moderated.