2011-09-02 2 views
5

ho nascosto vari elementi della normale pagina di Plone attraverso:Qual è il modo più semplice per spostare la globalnav al piè di pagina, solo sulla prima pagina

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

Ora, voglio aggiungere un globalnav a il fondo vicino al piè di pagina. Ho considerato una varietà di approcci:

  • Una vista del browser/modello selezionato dal menu delle indicazioni
  • Un'altra viewlet
  • Javascript (OK non ho considerato questo perché non so molto Javascript bene, ma sembra possibile.)

Qual è l'approccio migliore?

risposta

2

mi è piaciuto entrambe le proposte, ma ho finito per fare la seguente (perché non riuscivo a vedere come fare tutto quello che volevo con gli altri suggerimenti):

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

Con footer2.py come questo (sottoclasse e nient'altro):

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

class MyGlobalSectionsViewlet(GlobalSectionsViewlet): 
    pass 

E footer2.pt come questo (tutto lo stesso, ma l'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> 

e CSS come questo (per visualizzare footer2 solo sulla prima pagina):

#footer2 { 
    display: none; 
} 

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

E Naturalmente, una copia degli stili piè di pagina di default per 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

L'unico nel bit della pagina anteriore è la parte difficile. Si potrebbe utilizzare il proprio profilo GS per segnare la prima pagina con uno speciale, l'interfaccia one-off e quindi utilizzare ZCML per registrare il plone.global_sections viewlet per la IPortalFooter responsabile per quel contesto e solo quel contesto:

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

Si potrebbe anche usare questo per poi registrare un manichino, vuoto plone.global_sections viewlet per IPortalHead invece di utilizzare 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

In Plone 4 e versioni successive, è possibile registrare il viewlet globalnav come fornitore di contenuti:

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

e quindi includere nel vostro template homepage o main_template utilizzando:

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

Mi piace questo, ma sto già nascondendo # portal-globalnav con CSS, il che significa che ora sto nascondendo due # portal-globalnavs :-). Sono aperto a rilasciare i bit CSS, se questo aiuta. Sospetto che la risposta potrebbe implicare un mix tra la tua risposta e quella di Ross. – aclark

1

C'è un molto meno in termini di tempo e non intrusivo approccio, non usando viewlet, ma portlet.

Products.ContentWellPortlets consente di posizionare i portlet sopra e sotto il contenuto.

Avevo scritto un addon, che si sta occupando di questo: adi.dropdownmenu. Puoi usarlo, annullare l'assegnazione del -portlet "Navigazione estesa" (fornito da collective.portlet.sitemap) sopra il contenuto e assegnarne uno sotto il contenuto, impostare target-depth su 1, il gioco è fatto.

+0

Cool grazie Ida – aclark