Какой самый простой способ перенести globalnav в нижний колонтитул, только на первой странице - PullRequest
5 голосов
/ 02 сентября 2011

Я скрыл различные элементы обычной главной страницы Plone с помощью:

.section-front-page #portal-globalnav {
    display: none;
}

Теперь я хочу добавить globalnav внизу возле нижнего колонтитула. Я рассмотрел различные подходы:

  • Вид браузера / шаблон, выбранный в меню «Дисплей»
  • Другой просмотр
  • Javascript (ОК, я не учел это, потому что я не очень хорошо знаю Javascript, но это кажется возможным.)

Каков наилучший подход?

Ответы [ 4 ]

7 голосов
/ 02 сентября 2011

В Plone 4 и выше вы можете зарегистрировать глобальный viewlet в качестве поставщика контента:

<adapter
    name="globalnav"
    for="*
         zope.publisher.interfaces.browser.IDefaultBrowserLayer
         *"
    factory="plone.app.layout.viewlets.common.GlobalSectionsViewlet"
    provides="zope.contentprovider.interfaces.IContentProvider"
    />

и затем включить его в шаблон домашней страницы или main_template, используя:

<tal:block tal:replace="structure provider:globalnav"/>
3 голосов
/ 02 сентября 2011

Единственный бит на первой странице - это сложная часть.Вы можете использовать свой профиль GS, чтобы пометить главную страницу специальным одноразовым интерфейсом, а затем использовать ZCML, чтобы зарегистрировать plone.global_sections представление для менеджера IPortalFooter для этого контекста и только этого контекста:

<browser:viewlet
    name="plone.global_sections"
    for="my.special.IFrontPage"
    manager="plone.app.layout.viewlets.interfaces.IPortalFooter"
    class="plone.app.layout.viewlets.common.GlobalSectionsViewlet"
    permission="zope2.View"
    />

Вы также можете использовать это, чтобы зарегистрировать пустой фиктивный plone.global_sections просмотр для IPortalHead вместо display: none;

<browser:viewlet
    name="plone.global_sections"
    for="my.special.IFrontPage"
    manager="plone.app.layout.viewlets.interfaces.IPortalHeader"
    class="my.special.EmptyViewlet"
    permission="zope2.View"
    />
2 голосов
/ 09 сентября 2011

Мне понравились оба предложения, но я закончил тем, что сделал следующее (потому что я не мог видеть, как сделать все, что я хотел с другими предложениями):

<browser:viewlet
        name="trueblade.phoenix.footer2"
        manager="plone.app.layout.viewlets.interfaces.IPortalFooter"
        class=".footer2.MyGlobalSectionsViewlet"
        template="footer2.pt"
        permission="zope2.View"
        />

С footer2.py вот так (на подкласс и ничего больше):

from plone.app.layout.viewlets.common import GlobalSectionsViewlet

class MyGlobalSectionsViewlet(GlobalSectionsViewlet):
    pass

И footer2.pt вот так (все то же самое, кроме идентификатора CSS):

<tal:sections tal:define="portal_tabs view/portal_tabs"
 tal:condition="portal_tabs"
 i18n:domain="plone">
<h5 class="hiddenStructure" i18n:translate="heading_sections">Sections</h5>

<ul id="footer2"
    tal:define="selected_tab python:view.selected_portal_tab"
    ><tal:tabs tal:repeat="tab portal_tabs"
    ><li tal:define="tid tab/id"
         tal:attributes="id string:portaltab-${tid};
                        class python:selected_tab==tid and 'selected' or 'plain'"
        ><a href=""
           tal:content="tab/name"
           tal:attributes="href tab/url;
                           title tab/description|nothing;">
        Tab Name
        </a></li></tal:tabs></ul>
</tal:sections>

И CSS вот так (для отображения footer2 натолько на первой странице):

#footer2 {
    display: none;
}

.section-front-page #footer2 {
    display: block;
    margin: 1em;
}

И, конечно же, копия стилей нижнего колонтитула по умолчанию для нижнего колонтитула2:

#footer2 {
    clear: both;
    font-size: 80%;
    background: #ddd;
    /* ensure top navigation dont touches portlets, content etc.. #10491 */
    margin: 0 0 1em 0;
    text-align: center;
}
#footer2 li {
}
#footer2 li a {
    display: inline-block;
    padding: 0.5em 1em 2em 1em;
    background: #ddd;
    min-width: 6em;
    white-space: normal;
    /*TODO: Once we have removed the whitespace from the nav template, this can be put back*/
    /*border-bottom: 0.1em solid White;*/
    border-right: 0.1em solid white;
}

#footer2 .selected a,
#footer2 a:hover {
    background: #205c90;
    color: White;
}
#footer2 .selected a:hover {
    background: #ddd;
    color: #205c90;
}
1 голос
/ 06 июня 2015

Существует гораздо менее трудоемкий и ненавязчивый подход, при котором используются не окна просмотра, а портлеты.

Products.ContentWellPortlets позволяет размещать портлеты выше и ниже содержимого.

Я написал аддон, в котором говорится: adi.dropdownmenu. Вы можете использовать его, отменить присвоение портлета «Расширенная навигация» (поставляется на сайте colle.portlet.sitemap) над содержимым и назначить один под содержимым, установить целевую глубину на 1, вот и все.

...