Blog de Dabne Tecnologías de la Información

Hablamos de las cosas que nos interesan: tecnologías web, formación, software libre, Ruby on Rails, Spip, ….
  • Bucles condicionales en SPIP (tipo IF)

    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… ;-)

    Published on septiembre 2, 2008 · Filed under: SPIP, Sitio web;
    No Comments

Leave a Reply