SPIP-Contrib

SPIP-Contrib

عربي | Deutsch | English | Español | français | italiano | Nederlands

289 Plugins, 197 contribuciones sur SPIP-Zone, 85 visitantes en este momento

Portada del sitio > Squelettes > Tutoriels pour squelettes > Técnicas para extender las posibilidades de los bucles

Técnicas para extender las posibilidades de los bucles

25 de agosto de 2009 – por Martin Gaitan – commentaire

Todas las versiones de este artículo: [English] [Español] [français]

1 voto

Aquí se dan varias técnicas para ampliar las posibilidades ofrecidas por los bucles de SPIP estándar:

En primer lugar una técnica para poner a prueba en el criterio IN de un bucle con SPIP 1.9.2 o 2.0.x, y también ofrecer la posibilidad de escribir bucles que parecían imposibles de hacer. Luego, una segunda técnica disponible para SPIP 2.0.x, para hacer nuevos bucles de juntura «automática» o «forzada». Pídeles la luna a tus bucles:)!

La idea

Digamos que a menudo utilizas la misma lista de valores en el criterio IN de un bucle. Por ejemplo, el siguiente:

  1. <BOUCLE_art(ARTICLES){id_article IN 12,13,14,25}>
  2. <h1>#TITRE</h1>
  3. </BOUCLE_art>

Descargar

El bucle precedente lista los artículos con ID 12, 13, 14 o 25.

Una solución para compartir tu lista en un mismo esqueleto

Una opción para comparti rsta lista es cargarla en un arreglo estático (mira este artículo. Podemos usarlo varias veces sobre el mismo esqueleto (lo que facilita el mantenimiento). Por ejemplo:

  1. [(#SET{miarreglo,#ARRAY{0,12,1,13,2,14,3,25}})]
  2.  
  3. <BOUCLE_art1(ARTICLES){id_article IN #GET{miarreglo}|sinon{0}}{par hasard}>
  4. <h1>#TITRE</h1>
  5. </BOUCLE_art1>
  6.  
  7. <BOUCLE_art2(ARTICLES){id_article IN #GET{miarreglo}|sinon{0}}{par titre}>
  8. <h1>#TITRE</h1>
  9. </BOUCLE_art2>

Descargar

Una solución para todos los esqueletos

Ahora imaginemos que usas esa lista en varios esqueletos. Aquí hay una manera de compartirla:

Puedes crear un simple esqueleto que sólo contiene una cadena formada con la lista de valores separados por un caracter raramente usado (la barra vertical ’|’ es una buena idea).

Por ejemplo, yo creé el esqueleto milista.html con este contenido:

  1. 12 | 13 | 14 | 25

y el esqueleto miprueba.html

  1. #CACHE{0}
  2. <BOUCLE_art(ARTICLES){id_article IN #INCLURE{fond=milista}|explode{'|'}}>
  3. <h1>#TITRE</h1>
  4. </BOUCLE_art>

Descargar

El filtro "explode es una función php que separa la cadena pasada como parámetro y llena una matriz con valores. La función toma como primer parámetro el carácter utilizado para la separación ... y ¡voilá! Es como si el esqueleto incluído pasara una matriz como parámetro.

Cómo lograr bucles “imposibles”

Aquí hay un ejemplo para hacer un bucle normalmente imposible con SPIP 1.9.2: obtener la lista de artículos en la secciones marcadas con la palabra clave con ID 15.

Una de las posibilidades de los arreglos dinámicos sería hacer el siguiente esqueleto (mira también el plugin SPIP Bonux para construir arreglos dinámicos):

  1. #CACHE{0}
  2.  
  3. #SET{miarreglo, #ARRAY{}}
  4. <BOUCLE_rub(RUBRIQUES){id_mot=15}>
  5. [(#SET{miarreglo,
  6. #GET{miarreglo}|push{#ID_RUBRIQUE}
  7. })]
  8. </BOUCLE_rub>
  9.  
  10. <BOUCLE_art(ARTICLES){id_rubrique IN #GET{miarreglo}|sinon{0}}{par titre}>
  11. <h1>#TITRE</h1>
  12. </BOUCLE_art>

Descargar

Esta solución funciona perfectamente, pero requiere reescribir parte del código en cada esqueleto donde se usa.

Aquí está la solución donde compartimos la primer parte:
Creamos un archivo list-rubriques.html que genera la lista de identificadores separados por barras verticales

  1. <BOUCLE_rub(RUBRIQUES){id_mot?}{id_groupe?}{'|'}>#ID_RUBRIQUE</BOUCLE_rub>

Puedes usar este «sub-bucle» en todos los otros esqueletos. Por ejemplo, puede usar para el siguiente bucle en otro esqueleto:

  1. <BOUCLE_art(ARTICLES){id_rubrique IN #INCLURE{fond=list-rubriques}{id_mot=15}|explode{'|'}|sinon{0}}{par titre}>
  2. <h1>#TITRE</h1>
  3. </BOUCLE_art>

Descargar

Compatibilidad :
Probado con SPIP 2.0.9, pero también debería funcionar con SPIP 1.9.2.

Una técnica (mucho) más eficiente con SPIP 2.0.x

Con la versión 2.0 llegaron las composiciónes automáticas (ver este artículo en el sitio programmer.spip.org). Podemos usar el siguiente bucle para obtener el mismo resultado:

  1. <BOUCLE_art(ARTICLES mots_rubriques){id_mot=15}{par titre}>
  2. <h1>#TITRE</h1>
  3. </BOUCLE_art>

Descargar

Las ventajas:
-  No hay inclusiones
-  Todo el trabajo de composición lo realiza la base de datos, lo que implica mayor eficiencia.

Para mayor evidencia, aquí está la consulta provista por el modo debug (?var_mode=debug):

  1. SELECT articles.titre, articles.lang
  2. FROM `mabase`.spip_articles
  3. AS `articles`
  4. INNER JOIN `mabase`.spip_mots_rubriques
  5. AS L1 ON ( L1.id_rubrique = articles.id_rubrique )
  6. WHERE (articles.statut = 'publie')
  7. AND (articles.date < '9999-12-31')
  8. AND (L1.id_mot = 15)
  9. GROUP BY articles.id_article
  10. ORDER BY articles.titre

Descargar

P.-S.

Para utilizar las nuevas posibilidades ofrecidas por SPIP 2.0.x, no dudes en valerte una herramienta como PhpMyAdmin que están ofrecidas, en general, por todos los alojamientos, para descubrir las tablas y su estructura (¡que es muy clara!). Así podrás encontrar las tablas que intermedian la composición.

A continuación, comprueba qué tipo de composición genera SPIP examinando tu esqueleto con en modo debug y mostrando el «cálculo» generado por el bucle en cuestión. Para esto, quizás quieras aprender algunos conceptos básicos de SQL

Dernière modification de cette page le 25 de agosto de 2009

Volver arriba

Sus comentarios

Comentar este artículo

¿Quién es usted?
  • [Conectarse]

Para mostrar su avatar con su mensaje, guárdelo en gravatar.com (gratuit et indolore) y no olvide indicar su dirección de correo electrónico aquí.

Añada aquí su comentario Les choses à faire avant de poser une question (Prolégomènes aux rapports de bugs. )
Añadir un documento

Volver arriba

Hablando de eso...

  • (fr) Squelette d’Agenda grâce au plugin Agenda

    2 janvier 2011 – 39 commentaires

    Comment faire un agenda « qui fonctionne » dans la partie publique de son site, avec un affichage par mois, semaine et Jour un défilement de calendrier qui fonctionne la possibilité de modifier les événements et de les créer. avec ou sans (...)

  • (fr) oEmbed

    4 décembre 2013 – 139 commentaires

    C’est quoi ce truc ? oEmbed est un protocole ouvert qui permet d’insérer le contenu d’une page web dans une autre page. Le contenu inséré peut être de plusieurs types : photo, vidéo, URL ou extrait HTML. L’échange d’information a lieu entre un site (...)

  • (fr) ScolaSPIP 4

    19 janvier 2016 – 290 commentaires

    ScolaSPIP est plugin-squelette responsive personnalisable pour sites Web d’établissements scolaires basé sur SPIPr Présentation de ScolaSPIP Ce plugin pour SPIP 3 est développé par la Dane de l’académie de Versailles pour les webmestres de cette (...)

  • (fr) Nettoyer la médiathèque

    28 mai 2014 – 65 commentaires

    Ce plugin est intéressant dans l’un des cas suivants : Vous avez un site SPIP avec une version inférieure à la 1.9.2 et vous voulez le monter de version ; Vous avez un site depuis une version inférieure à SPIP 1.9.2 ; Vous voulez faire le ménage des (...)

  • (fr) Mises en exposant

    28 décembre 2006 – 110 commentaires

    Cet outil du Couteau Suisse améliore le rendu typographique des abréviations courantes, en mettant en exposant les éléments nécessaires (ainsi, Mme devient Mme) et en corrigeant les erreurs courantes (2ème ou 2me, par exemple, deviennent 2e, seule (...)