2011-09-02 10 views
5

he ocultado varios elementos de la normal de la página frontal Plone a través de:Cuál es la forma más directa para mover el globalnav al pie de página, sólo en la primera página

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

Ahora, quiero añadir un globalnav a la parte inferior cerca del pie de página. He pensado en una variedad de enfoques:

  • Una vista del navegador/plantilla seleccionada a través del menú de pantalla
  • Otra viewlet
  • Javascript (OK No he considerado esto porque no sé muy Javascript bueno, pero parece posible.)

¿Cuál es el mejor enfoque?

Respuesta

2

me gustó ambas sugerencias, pero terminamos haciendo lo siguiente (porque no podía ver cómo se hace todo lo que quería con las otras sugerencias):

<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 como esto (subclase y nada más):

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

class MyGlobalSectionsViewlet(GlobalSectionsViewlet): 
    pass 

Y footer2.pt como esto (todo igual, pero la identificación 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> 

y CSS como esto (para visualizar footer2 en la primera página solamente):

#footer2 { 
    display: none; 
} 

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

Y de por supuesto, una copia de los estilos de pie de página por defecto para 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

El único bit de la página principal es la parte difícil. Se podría utilizar su perfil de GS para marcar la primera plana con una interfaz especial, de una sola vez y luego usar ZCML para registrar el viewlet plone.global_sections para el gerente IPortalFooter para ese contexto y sólo ese contexto:

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

También podría usar esto para luego registrar un maniquí, vacío plone.global_sections viewlet para IPortalHead en lugar de utilizar 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

En Plone 4 y mayor, se puede registrar el viewlet globalnav como proveedor de contenidos:

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

y luego incluirlo en su plantilla de página web o main_template usando:

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

Me gusta este, pero ya estoy ocultando # portal-globalnav con CSS, lo que significa que ahora estoy ocultando dos # portal-globalnavs :-). Estoy dispuesto a dejar caer los bits CSS, si eso ayuda. Sospecho que la respuesta podría incluir una mezcla de tu respuesta y la de Ross a continuación. – aclark

1

Hay una mucho menos tiempo y el enfoque no intrusivo, al no utilizar viewlets, pero portlets.

Products.ContentWellPortlets le permite colocar portlets encima y debajo del contenido.

Había escrito un complemento, que se dirige a eso: adi.dropdownmenu. Puede usarlo, anule la asignación del marcador "Navegación extendida" (entregado de collective.portlet.mapa del sitio) sobre el contenido y asigne uno debajo del contenido, establezca target-depth en 1, eso es todo.

+0

Enfriar gracias Ida – aclark

Cuestiones relacionadas