SPIP-Contrib

SPIP-Contrib

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

288 Plugins, 197 contribuciones sur SPIP-Zone, 207 visitantes en este momento

Portada del sitio > Documentation > Tutoriaux pour le code de SPIP > Notas sobre las junturas entre tablas

Notas sobre las junturas entre tablas

18 de junio de 2011 – por severo

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

1 voto

Ceci est une « contribution pédagogique », qui montre par l’exemple comment développer une nouvelle fonctionnalité pour SPIP.

Después de una búsqueda de información en varios lugares sobre las junturas entre tablas en SPIP, aquí centralizo unas notas...

Criterios: junturas automáticas

Como está bien explicado en el artículo de Programar

Lorsque dans une boucle il est demandé un critère qui n’appartient pas à la table de la boucle, SPIP essaie automatiquement de trouver une table liée qui contient le champ demandé.

o sea

Cuando, en un bucle, está especificado un criterio que no pertenece a la tabla del bucle, SPIP prueba automáticamente de encontrar una tabla relacionada que contiene el campo pedido.

En el ejemplo dado, la juntura se hace automáticamente entre las tablas spip_documents y spip_documents_liens que contiene el campo “vu”:

  1. <BOUCLE_doc(DOCUMENTS){0,10}{vu=oui}>
  2. - #FICHIER<br />
  3. </BOUCLE_doc>

Descargar

OjO: la juntura automática solo concierne los criterios, no las balizas: en el ejemplo de arriba, no se podría utilizar #VU en el cuerpo del bucle!

Criterios: forzar una juntura

En el ejemplo de arriba, se hubiera podido forzar la juntura especificando la tabla a utilizar, de la manera siguiente:

  1. <BOUCLE_doc(DOCUMENTS){0,10}{documents_liens.vu=oui}>
  2. - #FICHIER<br />
  3. </BOUCLE_doc>

Descargar

Una otra manera de hacer, menos recomendable (menos general, y necesita una declaración), es de utilizar una excepción de juntura. Se declara por ejemplo en el pipeline declarer_tables_interfaces por:

  1. $interface['exceptions_des_jointures']['vu_documents'] = array('spip_documents_liens', 'vu');

y luego se utiliza en el bucle

  1. <BOUCLE_doc(DOCUMENTS){0,10}{vu_documents=oui}>
  2. - #FICHIER<br />
  3. </BOUCLE_doc>

Descargar

OjO: en este caso también, la juntura solo funciona para los criterios, y no sirve para las balizas! Ver por ejemplo http://permalink.gmane.org/gmane.comp.web.spip.devel/60476.

Balizas: forzar la juntura

Para utilizar las balizas de una otra tabla que la tabla del bucle, se necesita si o si forzar la juntura en el esqueleto de manera explicita. Por ejemplo, para mostrar el valor del campo vu utilizando la baliza #VU:

  1. <BOUCLE_doc(DOCUMENTS spip_documents_liens){0,10}{vu=oui}>
  2. - #FICHIER (#VU)<br />
  3. </BOUCLE_doc>

Descargar

Está manera de forzar explícitamente la juntura permite también de hacer funcionar el criterio {vu=oui}.

OjO: la declaración de excepción de juntura descrita más arriba no permite de declarar nuevas balizas. En el ejemplo asociado “vu_documents” solo es un alias para los criterios!

Balizas: campos homónimos

En el caso particular donde se quiere mostrar un campo de la tabla junta que tiene el mismo nombre de un campo de la tabla del bucle, es necesario utilizar dos bucles. Por ejemplo, las dos tablas spip_documents y spip_articles tienen un campo titre. En un bucle de documentos, para mostrar el nombre de un archivo y el título del artículo asociado, hay que hacer:

  1. <BOUCLE_image(DOCUMENTS){id_article}>
  2. <BOUCLE_article(ARTICLES){id_article}>
  3. #_image:FICHIER - #_article:TITRE
  4. </BOUCLE_article>
  5. </BOUCLE_image>

Descargar

o de manera más simple (en la escritura, porque una segunda pedida SQL estará creada de toda manera):

  1. <BOUCLE_image(DOCUMENTS){id_article}>
  2. #FICHIER - #INFO_TITRE{article, #ID_ARTICLE}
  3. </BOUCLE_image>

Descargar

Para información, el bucle siguiente mostraría el título del documento, no del artículo:

  1. <BOUCLE_image(DOCUMENTS){id_article}>
  2. #FICHIER - #TITRE
  3. </BOUCLE_image>

Descargar

En efecto, SPIP calcula una baliza :

  • en un primer tiempo buscando el campo que corresponde en la tabla principal del bucle donde se encuentra,
  • luego, si ningún campo fue encontrado, en las tablas juntas.

A notar: en SPIP, para las balizas, no existe una notación del tipo #articles.TITRE como se podría ver en SQL, o como se puede hacer para los criterios (ver más arriba).

Declaración de junturas

Para declarar una juntura en la declaración de una tabla, los campos de la juntura tienen que estar insertados:

  • en 'key', que lista las llaves (primaria y otras),
  • o en 'join', que lista los campos para las junturas.

Por ejemplo, en el pipeline trucs_declarer_tables_principales de un objeto llamado truc, el código siguiente declara id_truc como llave primaria, lo que permitirá las junturas sobre este campo:

  1. $tables_principales['spip_trucs']['key'] = array("PRIMARY KEY" => "id_truc");

y el código siguiente declara que los dos campos id_auteur y id_traducteur de la tabla utilizaran el campo id_auteur de la otra tabla en caso de juntura:

  1. $tables_principales['spip_trucs']['join'] = array("id_auteur" => "id_auteur", "id_traducteur" => "id_auteur");

A notar: estas mismas declaraciones pueden estar hechas en el archivo mes_options.php por:

  1. $GLOBALS['tables_principales']['spip_trucs']['key'] = array("PRIMARY KEY" => "id_truc");
  2. $GLOBALS['tables_principales']['spip_trucs']['join'] = array("id_auteur" => "id_auteur", "id_traducteur" => "id_auteur");

Descargar

Algunos vínculos

Dernière modification de cette page le 18 de junio de 2011

Volver arriba

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) Le Squelette Zpip

    11 novembre 2009 – 361 commentaires

    Ce squelette n’est plus maintenu, il est remplacé par SPIPr-dist Zpip est un modèle de squelette réutilisable, modulaire et disposant d’une galerie de thèmes. Ce modèle de squelette rend l’installation d’un site avec son thème plus facile, et la (...)

  • (fr) Calendrier Mini 2.0

    19 mai 2012 – 243 commentaires

    Ce plugin ajoute la balise #CALENDRIER_MINI qui insère un petit widget de navigation par mois dans les dates des évènements. Fonctionnement du mini calendrier Le mini calendrier présente un mois à la fois. Les jours du mois comportant des (...)

  • (fr) Galleria (fr)

    16 novembre 2011 – 183 commentaires

    Une galerie d’image qui utilise la librairie javascript Galleria. Description Ce plugin vous permet d’ajouter des galeries d’images à vos articles. La galerie créée utilise la librairie javascript Galleria. Le plugin propose un modèle nommé (...)

  • (fr) PortePlume Equation

    10 juin 2012 – commentaires

    Version pour spip 2.1 et 3.0 du plugin Spip Equation Ce plugin rend plus simple l’intégration dans un texte de formules mathématiques et d’équations. Dans ce but il ajoute un groupe de boutons dans la barre typographique qui permet d’intégrer les (...)

  • (fr) Agenda 2.0

    3 novembre 2008 – 1101 commentaires

    Voici la version pour SPIP 2.0 du Plugin Agenda pour SPIP 1.9.2, avec une interface remaniée pour encore plus de plaisir. Pour une documentation concernant l’utilisation d’Agenda 3 pour SPIP 3, veuillez pour l’instant vous référer à SPIP 3, Agenda (...)