2011-09-02 15 views
5

mam ukryte różne elementy normalnej stronie przedniej Plone poprzez:Co jest najprostszym sposobem, aby przesunąć globalnav do stopki, tylko na pierwszej stronie

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

Teraz chcę dodać globalnav do dno przy stopce. Mam rozważyć różne podejścia:

  • Widok przeglądarka/szablon wybrany poprzez menu wyświetlane
  • Innym viewlet
  • Javascript (OK I nie uznały tego powodu nie wiem Javascript bardzo cóż, ale wydaje się to możliwe.)

Jakie jest najlepsze podejście?

Odpowiedz

2

lubiłem obie propozycje, ale skończyło się w następujący sposób (bo nie mogłem zobaczyć, jak to zrobić wszystko, co chciałem z inne propozycje):

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

Z footer2.py tak (do podklasy i nic więcej):

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

class MyGlobalSectionsViewlet(GlobalSectionsViewlet): 
    pass 

I footer2.pt tak (wszystko to samo, ale id 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> 

i CSS tak (wyświetlanie footer2 tylko na pierwszej stronie):

#footer2 { 
    display: none; 
} 

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

i Oczywiście, kopia domyślnych stylów stopki dla footer2:

#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; 
} 
3

Jedynym bitem na stronie głównej jest trudna część. Można użyć swój profil GS oznaczyć stronę przednią ze specjalnym, interfejs jednorazowo, a następnie użyć ZCML zarejestrować plone.global_sections viewlet dla menedżera IPortalFooter w tym kontekście i tylko tym kontekście:

<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" 
    /> 

Można też to wykorzystać, aby następnie zarejestrować manekina, pusty plone.global_sections viewlet dla IPortalHead zamiast korzystania 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" 
    /> 
7

w Plone 4 i więcej, można zarejestrować viewlet globalnav jako dostawcy treści:

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

a następnie umieścić go na swojej stronie głównej za pomocą szablonu lub main_template:

<tal:block tal:replace="structure provider:globalnav"/> 
+1

Podoba mi się ten, ale już ukrywam # portal-globalnav z CSS, co oznacza, że ​​teraz ukrywam dwa # portal-globalnavs :-). Jestem otwarty na upuszczenie bitów CSS, jeśli to pomaga. Podejrzewam, że odpowiedź może zawierać mieszankę twojej odpowiedzi i Ross'a "poniżej. – aclark

1

jest to znacznie mniej czasochłonne i nieinwazyjne podejście, nie używając Viewlets, ale portletów.

Products.ContentWellPortlets umożliwia umieszczanie portletów powyżej i poniżej zawartości.

Napisałem dodatek, który zajmuje się tym: adi.dropdownmenu. Możesz go użyć, cofnij przypisanie portletu "Rozszerzona nawigacja" (dostarczonego pliku collective.portlet.sitemap) nad treścią i przypisz jeden pod treścią, ustaw głębokość celu na 1, to wszystko.

+0

Fajne dzięki Ida – aclark

Powiązane problemy