Bucles condicionales en SPIP (tipo IF)

Septiembre 2nd, 2008 | by Marga |

Como es sabido, SPIP permite asociar un esqueleto específico a una sección específica. Esto permite tener diferentes vistas para distintas secciones. Hasta ahí todo va bien. Pero el problema surge cuando:

  • Se crea una nueva sección: hay que crear (aunque sea copiando) un esqueleto específico para ella.
  • Se realiza mantenimiento: hay que tener en mente el número de cada sección (y su significado en la estructura de contenidos).

Para evitar estos inconvenientes, una opción es tener un solo esqueleto rubrique.html y en él un estructura condicional (tipo if) controlada por palabras clave, de manera que asociando una determinada palabra clave a una sección se ejecute una parte del esqueleto u otra.

La sintaxis básica de un if de este tipo sería esta:

<BOUCLE_a(MOTS){id_rubrique}{titre=palabra_a}>
  [(#REM) - Código que se ejecuta
  si la sección tiene asociada la palabra "palabra_a"]
</BOUCLE_a>
</B_a>
  [(#REM) - Código que se ejecuta en cualquir otro caso ]
<//B_a>

A continuación un ejemplo de la vida real, por partes.

Primero, un bucle que lista las subsecciones de una sección, poniendo un código HTML <ul> y </ul> antes y después de los <li>:

  <B_lista_secciones>
    <h2>Art&iacute;culos en esta secci&oacute;n:</h2>
    <ul>
    <BOUCLE_lista_secciones(RUBRIQUES){id_parent}{par date}{inverse}>
      <li><a href="#URL_RUBRIQUE">[(#TITRE|supprimer_numero)]</a></li>
    </BOUCLE_lista_secciones>
    </ul>
  <//B_lista_secciones>

Segundo, un bucle similar que lista los artículos de una sección:

  <B_lista_articulos>
    <h2>Art&iacute;culos en esta secci&oacute;n:</h2>
    <ul>
    <BOUCLE_lista_articulos(ARTICLES){id_rubrique}{exclus}{par date}{inverse}>
      <li><a href="#URL_ARTICLE">[(#TITRE|supprimer_numero)]</a></li>
    </BOUCLE_lista_articulos>
    </ul>
  <//B_lista_articulos>

Tercero, todo junto en una estructura if controlada por palabras clave. Si la sección tiene asociada la palabra clave “tipo_artículo” se listan sus subsecciones (como si fueran artículos) y si no, se listan sus artículos propiamente dichos:

[(#REM) - Lista las subsecciones como si fueran articulos si la palabra clave de la rubrique es = tipo_articulo ]
<BOUCLE_tipo_articulo(MOTS){id_rubrique}{titre=tipo_articulo}>
  <B_lista_secciones>
    <h2>Art&iacute;culos en esta secci&oacute;n:</h2>
    <ul>
    <BOUCLE_lista_secciones(RUBRIQUES){id_parent}{par date}{inverse}>
      <li><a href="#URL_RUBRIQUE">[(#TITRE|supprimer_numero)]</a></li>
    </BOUCLE_lista_secciones>
    </ul>
  <//B_lista_secciones>
</BOUCLE_tipo_articulo>
</B_tipo_articulo>

[(#REM) - Sino, lista los articulos de la sección]
  <B_lista_articulos>
    <h2>Art&iacute;culos en esta secci&oacute;n:</h2>
    <ul>
    <BOUCLE_lista_articulos(ARTICLES){id_rubrique}{exclus}{par date}{inverse}>
      <li><a href="#URL_ARTICLE">[(#TITRE|supprimer_numero)]</a></li>
    </BOUCLE_lista_articulos>
    </ul>
  <//B_lista_articulos>
<//B_tipo_articulo>

En otro artículo vamos a pner un ejemplo más complejo, con dos if anidados:

if
else
  if
  else
  fin
fin

Si, mientras lo ponemos, quieren ir haciendo sus propias conjeturas… ;-)

Post a Comment