Utilizar diferentes plantillas de páginas en función de la carpeta, de un tag, o de un campo personalizado
Movable type Añadir comentarioSolución aportada en el wiki de movable type
Here’s a solution to use a different page template based upon the “Folder” each page is in.
- Copy the contents of the Page archive template into a template module called “Default Page”.
- Create additional template modules for each page template as necessary: News Page, Industry Page, Product/Service Page etc. (assuming that the same page template is used for Product and Service pages in this example)
- Create a folder corresponding to each Page template: News, Industry, Products, Services, etc.
- Update the Page archive template to use the following code:
<mt:setvarblock name="page_folder"><mt:PageFolder><$mt:FolderLabel$></mt:PageFolder></mt:setvarblock> <mt:if name="page_folder" eq="News"> <$mt:include module="News Page"$> <mt:else name="page_folder" eq="Industry"> <$mt:include module="Industry Page"$> <mt:else name="page_folder" like="(Products|Services)"> <$mt:include module="Products/Services Page"$> <mt:else> <$mt:include module="Default Page"$> </mt:if>
- Publish and View
Mi solución #1
Personalmente no me ha gustado mucho la solución aportada en el wiki, ya que si tenemos subcarpetas nos seria imposible, ésto lo he solucionado creando una variable page_folder que contenga la ruta completa separada por ‘/’:
<mt:setvarblock name="page_folder"><mt:ParentFolders glue='/'><$mt:FolderLabel$></mt:ParentFolders></mt:setvarblock>
<mt:if name="page_folder" eq="Noticias/Economía">
<$mt:include module="Detalle de la página - Página de noticias de economía"$>
<mt:else name="page_folder" eq="Noticias/Industria">
<$mt:include module="Detalle de la página - Página de noticias de industria"$>
<mt:else>
<$mt:include module="Detalle de la página - Página estándar"$>
</mt:if>
De ésta forma podemos utilizar la ruta completa de la carpeta para asignar su plantilla correspondiente.
Mi solución #2
Otra posible solución es utilizar una plantilla u otra en función del tag de la página:
<mt:PageIfTagged tag="noticias-economia">
<$mt:include module="Detalle de la página - Página de noticias de economía"$>
<mt:else>
<mt:PageIfTagged tag="noticias-industria">
<$mt:include module="Detalle de la página - Página de noticias de industria"$>
<mt:else>
<$mt:include module="Detalle de la página - Página estándar"$>
</mt:PageIfTagged>
</mt:PageIfTagged>
El único problema de ésto es que no soporta tags privados (con @), ya que para la página (o para la entrada), sólo tenemos disponibles los tags públicos.
Mi solución #3
Otra posible solución es utilizar una plantilla u otra en función del un campo personalizado tipo Select (pagedatatipo_de_pagina).
<mt:Ignore>Almacenamos el tipo de página en page_type</mt:Ignore>
<mt:SetVarBlock name="page_type"><mt:IfNonEmpty tag="pagedatatipo_de_pagina"><mt:pagedatatipo_de_pagina></mt:IfNonEmpty></mt:setvarblock>
<mt:if name="page_type" eq="Noticias de Economía">
<$mt:include module="Detalle de la página - Página de noticias de economía"$>
<mt:else name="page_type" eq="Noticias de Industria">
<$mt:include module="Detalle de la página - Página de noticias de industria"$>
<mt:else>
<$mt:include module="Detalle de la página - Página estándar"$>
</mt:if>
De ésta forma podemos dar nuevas opciones al campo personalizado para gestionar distintos tipos de páginas.
Comentarios recientes