Как внедрить шаблон кода в Plone? - PullRequest
1 голос
/ 28 июня 2011

Моя цель - добавить HTML-код перед каждой Plone-статьей (между заголовком страницы и первым абзацем)?Я использую Plone 4. У кого-нибудь есть подсказка, как это реализовать?

Другой вопрос: можно ли произвольно размещать HTML-код в каждой статье Plone?

Ответы [ 2 ]

11 голосов
/ 28 июня 2011

Используйте viewlets для обоих вариантов использования.Представление может быть вставлено в разные части отображаемой страницы, в зависимости от того, к какому администратору вейвлета вы зарегистрировали его, и к каким интерфейсам применяется это представление.

Диспетчер вейвлета определяет местоположение, в которое вставлен вьюлет,и интерфейс, для которого вы регистрируете представление, определяет, по какому типу URL будет отображаться представление.Регистрация для "*" означает показ везде, а регистрация для "Products.ATContentTypes.interfaces.IATDocument" означает, что он будет виден только при просмотре страницы.

Чтобы увидеть, какие менеджеры вейвлетов доступны и какие тамплеты зарегистрированы, для любогоданный URL, просто добавьте "/ @@ manage-viewlets" к URL.Там вы можете увидеть, что есть менеджер plone.abovecontent и plone.abovecontenttitle, который позволит вам вставлять туда HTML.Большинство из них определены в пакете plone.app.layout, и вам нужно найти там интерфейс, зарегистрированный с этим именем (найдите его в папке с яйцами в buildout).

Вы регистрируете представлениеиспользуя ZCML, поэтому у вас уже должен быть пакет Python, загруженный для вашего сайта.Чтобы вставить произвольный шаблон, просто зарегистрируйте его с директивой browser:viewlet:

<browser:viewlet
    name="your.html.snippet"
    for="Products.ATContentTypes.interfaces.IATDocument"
    manager="plone.app.layout.viewlet.interfaces.IAboveContent"
    template="htmlsnippet.pt"
    permission="zope.Public"
    />

Теперь для менеджера представлений plone.abovecontent зарегистрирован виджет, основанный на шаблоне htmlsnippet.pt.Этот шаблон является полным шаблоном страницы zope, так что вы можете использовать такие вещи, как интернационализация:

<div i18n:domain="your">
    <h3 i18:translate="html_snippet_header">This is a snippet of HTML that'll be injected into all Pages!</h3>
</div>

Вы также можете добавить класс полного представления браузера для резервного копирования представления, и шаблон может получить доступ к этому классу.через пространство имен «view /», чтобы вы могли добавить туда метод для возврата произвольного текста, который нужно вставить.

Вы можете вручную включить просмотр через URL-адрес вышеупомянутого «/ @@ manage-viewlets» или выможно использовать профиль GenericSetup, где viewlets.xml позволяет вам управлять регистрациями и порядком просмотра:

<?xml version="1.0"?>
<object>
  <order manager="plone.abovecontent" skinname="My Theme"
         based-on="Plone Default">
    <viewlet name="your.html.snippet" insert-before="*"/>
  </order>
</object>

Для получения дополнительной информации я отсылаю вас к учебнику по на Plone.org..

0 голосов
/ 28 июня 2011

Возможно, вы могли бы подойти к этому с помощью Javascript? Многие приложения имеют глобальный js-файл, который включен во все страницы. Начав с этого, вы можете легко изменить DOM.

...