Utilizar diferentes plantillas de páginas en función de la carpeta, de un tag, o de un campo personalizado

Movable type Añadir comentario

Solució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.

  1. Copy the contents of the Page archive template into a template module called “Default Page”.
  2. 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)
  3. Create a folder corresponding to each Page template: News, Industry, Products, Services, etc.
  4. 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>
  5. 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.

¿Tienes dudas, preguntas o comentarios?.

WP Theme & Icons by N.Design Studio
Entries RSS Comments RSS Iniciar sesión