ng.content.article
2008-01-07 01:29Коллекция интерфейсов и объектов, служащая для хранения текстового наполнения сайта.
Продукт
| Название: | |
| ng.content.article | |
| Выложен на PyPI | |
| Репозиторий |
Краткое описание пакета ng.content.article
Пакет ng.content.article это базовый пакет контент-типов, моделирующих "коллекцию статей" (откуда, собственно, и название). Контент-типы базового пакета могут быть расширены установкой дополнительных пакетов контент-типов (например, ng.content.remotearticle, либо установкой пакета ng.content.annotation, позволяющего модифицировать контент-объекты, динамически связывая их с аннотациями (что, упрощенно говоря, приводит к появлению новых полей описания контента и дополнительных элементов отображения на странице).
В базовый набор контент-типов входят
- maincontainer
- Головной контейнер сайта, может быть сайт-менеджером и содержит ряд свойств, позволяющих разместить общий контент сайта (например, меню ссылок);
- division
- Раздел сайта, используется как контейнер с материалами, с которыми рекомендовано связывать статистику, rss и аналогичные сервисы;
- article
- Собственно статья, содержащая основной (текстовый) контент, как и раздел, может быть использована в качестве контейнера с материалами (обычно вложенные статьи, приложения и рисунки).
Интерфейсы контент-типов
- IDocShort
Интерфейс, содержащий краткое описание контента, используемое преимущественно при выводе в поиске и списке содержимого. Реализуется контент-типами division, maincontainer.
Содержит поля:
- title : TextLine
- Название статьи.
- created : DateTime
- Дата создания.
- author : TextLine
- Автор статьи.
- isdivision : Bool
- Объект используется как раздел (при отображении вложенных материалов в виде одной страницы, эта статья не войдет в общую страницу, а останется вложенным материалом).
- ishidden : Bool
- Объект скрывается из общего списка вложенных материалов.
- IDocShortLogo
Содержит все поля интерфейса IDocShort и, дополнительно к ним, поле лого. Реализуется контент-типом article.
- logo : SmartImage
- Логотип, управляемый посредством продукта SmartImageCache, который позволяет настроить размер логотипа в зависимости от места его отображения в пользовательском интерфейсе.
- IDocBody
Содержит поля, позволяющие разместить основное содержимое статьи. Реализуется контент-типом article.
- body : Text
- Текстовое содержимое, обычно содержит текст в различных форматах, преобразование которого производится адаптерами продукта ng.app.converter или аналогичными.
- iscontent : Bool
- Собирать содержание страницы статьи из вложенных объектов. В этом случае объекты не показываются в списке вложенных.
- interface : Interface
- Интерфейс-маркер, обуславливающий выбор адаптера для форматирования содержимого атрибутов статьи (в частности, атрибута body), адаптер предоставляется продуктом ng.app.converter или аналогичным.
- IMainPage
Содержит поля, используемые главной страницей сайта:
- title, abstract, created, author
- Аналогично интерфейсу IDocShort (от составных частей которого он их и наследует)
- mainiface
- Интерфейс-маркер для выбора вида главной страницы;
- logo
- Логотип, используемый на главной странце (используется тиражируемыми скинами);
- IUrlPage
Список ссылок, отображаемых обычно в одном из главных меню страницы. Каждый элемент списка имеет поля:
- URL : URI
- Ссылка
- title : TextLine
- Текст под ссылкой
- alternative : Text
- Комментарий к ссылке
- IArticle
- Специальный интерфейс контент-типа статья.
- IDivision
- Специальный интерфейс контент-типа раздел.
- IMainContainer
- Специальный интерфейс контент-типа "корневая папка сайта".
Интерфейсы, используемые для настройки продукта
Для настройки продукта используется концепция "интерфейсов-настройки", в которой любой класс может быть объявлен директивой ZCML, реализующей интерфейс настройки, после чего класс получает свойства этого интерфейса. Пример такого объявления:
<!- Для класса раздел --> <class class="ng.content.article.division.division.Division"> <!-- разрешить вхождение в статью --> <implements interface="ng.content.article.article.interfaces.IArticleContent"/> <!-- разрешить вхождение в раздел --> <implements interface="ng.content.article.division.interfaces.IDivisionContent"/> <!-- раздел будет появляться в списке содержимого раздела --> <implements interface="ng.content.article.interfaces.IContentShowable"/> <!-- разрешить вхождение в корневой контейнер --> <implements interface="ng.content.article.maincontainer.interfaces.IMainContent" /> </class>
Такое объявление должно быть размещено либо в специально созданном продукте-сайте, как описано в статье Структура Zope3 сайта.txt, или в настройках инсталляции экземпляра Zope3: решение зависит от способа поставки вашего продукта. Приведем список настроечных интерфейсов:
- IMainContent
- Компонент с таким интерфейсом может быть содержимым корневой папки сайта;
- IDivisionContent
- Компонент с таким интерфейсом может быть содержимым раздела;
- IArticleContent
- Компонент с таким интерфейсом может быть содержимым статьи;
- IContentShowable
- Компонент с таким интерфейсом будет отображаться в списке содержимого статьи или раздела, интерфейс имеет два дочерних интерфейса, IAbstractShowable и IIconShowable, позволяющих провести тонкую настройку способа отображения: некоторые реализации скинов содержат два списка содержимого, список аннотаций и список превью, которые используются для разных объектов.
- IIconShowable
- Компонент с таким интерфейсом будет отображаться в списке превью вложенных объектов, обычно его использование характерно для мультимедийных контент-объектов (например, фотографий).
- IContentShowable
- Компонент с таким интерфейсом будет отображаться в списке аннотаций вложенных объектов, обычно его использование характерно для текстовых контент-объектов.
- ICommonContainer
- Во избежание появления наших контент-компонентов вне настроенной иерархии типов контента, заведен этот интерфейс: наши компоненты, как правило, могут быть вложены только в контейнер с таким интерфейсом. Реализованность этого интерфейса должна быть задекларирована для класса, который будет использоваться вместо MainContainer (например, Folder).
Адаптеры-селекторы
Контейнер содержит объекты разного сорта, и для получения списка объектов одного сорта предусмотрены специальные адаптеры-селекторы.
- IShowContainer
- Адаптер позволяет получить списко всех отображаемых вложенных объектов (т.е. тех объектов, которые имеют интерфейс IContentShowable или производный от него и для которых не установлен атрибут hidden).
- IPageContainer
- Адаптер позволяет получить список всех объектов, отдаваемых IShowContainer, за исключением объектов, у которых установлен атрибут isdivide, используется при одностраничном отображении содержимого контейнера.
- IContentContainer
- Адаптер позволяет получить список всех объектов, отдаваемых IShowContainer. В случае одностраничного отображения в список войдут только объекты, у которых установлен атрибут isdivide.
- IIconContainer
- Адаптер позволяет получить список всех объектов, отдаваемых IContentContainer, снабженных интефейсом IIconShowable. Этот адаптер используется для построения строки превью вложенных объектов.
- IAbstractContainer
- Адаптер позволяет получить список всех объектов, отдаваемых IContentContainer, снабженных интефейсом IAbstratShowable. Этот адаптер используется для построения списка аннотаций вложенных объектов.
Все адаптеры подготовлены для использования вместе с пейджером ng.adapter.pager
Специальные адаптеры
Статью можно зарегистрировать как именованную утилиту IArticle, в этом случае, доступ к ней можно получить при помощи специального адаптера article:
<a href="" tal:attributes="context/@@article/name/@@absolute_url" >Article Name</a>
Такой подход позволяет ссылатся в скине на статью расположенную в любом месте иерархии объектов.
Заключение
Использовании контент-классов ng.content.article особенно полезно в комбинации с ng.content.abstract (позволяющим неограниченно расширять функциональность классов) и рядом других продуктов, но и их индивидуальное использование также обладает определенной ценностью.
Ссылки на эту статью:
CMS DreamBot ng.content.comment Аннотации и аннотирование Старое описание и черновики документации ng.content.remotearticle ng.content.annotation Наши продукты используются Вышел ng.content.article-1.0.7Вложено:
...



