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, ….
  • Todas sabemos que los colores de un sitio web no pueden ser como los del parchís.

    Color Scheme Designer es un generador de combinaciones de colores que puede ayudar a nuestros clientes a elegir una paleta.

    Y para nuestro trabajo tenemos ColorZilla, un complemento Firefox para analizar los colores.

    1 Comment
  • Curso taller:

    20, 21 y 22 de julio de 2010

    Dirigido a gente que tiene que plantear una web y no sabe por dónde empezar.

    + información

    No Comments
  • Según la configuración del navegador, los ficheros mp3 se desacargan o se abren y empiezan a sonar.

    Si se desea forzar la descarga, es decir, que independientemente
    de la configuración del cliente
    el fichero mp3 o ogg se descargue,
    hay que añadir esta línea en el fichero

    .htaccess:
    AddType application/octet-stream .mp3 .ogg
    No Comments
  • WordPress daba un error al subir ficheros de 10 Megas a pesar de tener en el php.ini:

    upload_max_filesize = 60M

    El problema se corrigió añadiendo al php.ini:

    post_max_size = 60M
    No Comments
  • 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… ;-)

    No Comments
  • 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