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, ….
  • El problema era el siguiente:

    En un esqueleto de RUBRIQUE, una opción habitual es mostrar una lista con el título de los artículos de la sección seguido de un breve texto con las primeras líneas del artículo y un enlace a “Continuar”. El problema es que en el sitio multilingüe de International Netwok for Peace algunos artículos no están traducidos, por lo que el texto del artículo es algo así como “Este artículo todavía no está traducido”. En ese caso, no tiene sentido mostrar el enlace “Continuar”, puesto que ya se está viendo todo el texto del artículo.

    Para solucionar este problema se planteó la siguiente condición:

    Si el texto del artículo tiene más de 300 caracteres se muestran los primeros 300 caracteres del texto y el enlace “Continuar”. En otro caso se muestra el texto completo y no se muestra el enlace “Continuar”.

    Para calcular esta condición se necesita código PHP:

    <BOUCLE_articles_rubrique(ARTICLES) {branche} {par num titre} {!par date}>
      <?php
    /* determination de la longitud del texto */
    /* observemos que strlen es un función PHP */
        $A=[(#TEXTE|textebrut|strlen)];
    /* eleccion de la longitud maxima para no cortar */
        $b=300;
        if ($A>$b){
      ?>
    /* salimos de PHP para no tener que escapar todos los caracteres
    especiales y así simplificar mucho la notación */
    /* observemos la notación "if" en SPIP: si hay #DESCRIPTIF mostrarlo,
    y si no mostrar el #TEXTE */
    (#DESCRIPTIF|sinon{[(#CHAPO|sinon{[(#TEXTE|couper{300})]})]})
    &nbsp;<b class="separateur">& &nbspgt;</b>&nbsp;<a  class="suite"
    href="#URL_SITE_SPIP/#URL_ARTICLE" title="...<:suite:>" ><:suite:></a>
    /* volvemos a entrar en PHP */
      <?php
        }else{
      ?>
      #TEXTE
      <?php
      }
      ?>
    </BOUCLE_articles_rubrique>

    El resultado puede verse en la siguiente imagen:

    Y también en International Network for Peace.

    Si este caso resulta demasiado complicado, puede verse un caso mucho más sencillo en Variables PHP en SPIP, caso sencillo

    2 Comments
  • Veamos un caso muy sencillo de cómo usar variables PHP en SPIP.

    En un sitio multilingüe queríamos mostrar una lista con las últimas noticias en todos los idiomas del sitio, pero destacando en azul las noticias del idioma en el que se está viendo la página y atenuando en gris las noticias en el resto de los idiomas.

    Para ello necesitamos manejar dos variables de idioma: la del sitio y la del artículo. Ambas las ofrece SPIP con la baliza #LANG, dependiendo de dónde se coloque la baliza. Si es dentro de un bucle ARTICLES la baliza #LANG se refiere al idioma del artículo y si es fuera de cualquier bucle se refiere al idioma de la página. Es por ello que necesitamos una variable PHP para almacenar el valor del idioma de la página.

    Empezamos.

    Al inicio del esqueleto, dentro de <body>, creamos la variable SPIP $lang y almacenamos el valor del idioma de la página (#LANG):

    <?php
      $lang="#LANG";
    ?>

    Ya dentro del bucle ARTICLES, la utilizamos:

    <BOUCLE_news_art(ARTICLES) {par date} {inverse} {titre_mot=News}>
    <?php
    if ($lang!=="#LANG") {$color="gray";} else {$color="";}
    ?>
    <?php
    echo "<a href=\"#URL_ARTICLE\" title=\"#DESCRIPTIF\"
    style=\"color: $color\">#TITRE</a>";
    ?>
    </BOUCLE_news_art>

    Observemos cómo dentro del echo hay que escapar las comillas con la barra antiinclinada (\).

    El color azul se toma de la hoja de estilo. De ahí que hagamos:

    else {$color="";

    El resultado puede verse en la columna derecha de  International Network for Peace

    Como este caso es muy sencillo, en Código PHP en SPIP mostramos otro caso de uso de código PHP en SPIP más complicado.

    No Comments