Utilitzar els models

Què és un model? Un model és, segons la noció introduïda amb SPIP 1.9.1, un petit esquelet SPIP que descriu un fragment d’HTML fàcil d’inserir a dins d’un altre esquelet o -i aquesta és la principal novetat- a dins del text d’un article.

Inspirat en els models de la Wikipèdia, el sistema de models ofereix noves capacitats als webmestres i als redactors.

Els models són una extensió de les clàssiques dreceres <img1> i <doc1>. Aquests corresponen a partir d’ara als models dist/modeles/img.html i dist/modeles/doc.html (a partir d’SPIP 2.0, els models de base es posen a prive/modeles/)..

La seva sintaxi s’ha estès, i és possible especificar, a més de l’alineació (<img1|left>, <img1|right> o <img1|center>), una classe més genèrica, que o bé correspongui a un esquelet precís, si existeix, o bé a una classe CSS (<img1|classe> que anirà a buscar el model modeles/img_classe.html, si aquest fitxer existeix, sinó utilitzarà el model modeles/img.html, però amb un paràmetre class="classe").

Però els models no es limiten a les imatges i documents; també es possible crear noves dreceres del tipus <modele1>, afegint simplement un esquelet a dins del directori modeles/ de la seva carpeta esquelets!
Tindrem cura d’anomenar el nostre fitxer en lletres minúscules («bas de casse»). Per evitar les diferències en certs sistemes de servidors entre le_fichier01.html et Le_Fichier01.html, SPIP només cercarà els fitxers escrits en minúscules.

En absència de qualsevol model corresponent a la drecera indicada (per exemple, <breve1>), l’administrador de plantilla d’SPIP mira si coneix l’objecte demanat (aquí, breve), i si aquest darrer té un URL.

<breve1> En aquest cas (verificat aquí, ja que les breus són conegudes del sistema i disposen d’una funció d’URL), SPIP substitueix la drecera <breve1> per un petit marc flotant, amb un enllaç cap a la breu, i la publicació del seu títol, com si s’hagués indicat [->breve1].

Si l’objecte no és conegut, SPIP deixa la drecera intacte, per a que sigui tractada eventualment més endavant (per un plugin o un filtre suplementari), o simplement ignorada.

Per altra banda, és possible passar paràmetres suplementaris als models (com es feia pels documents flash « embed », amb la drecera <emb1|autostart=true>). La sintaxi està generalitzada i accepta també HTML, com en aquest exemple:

<son19|couleur=#ff0000
   |legende=Le grand <i>Count Basie</i>
   |photo=12>

que podria cridar un model modeles/son.html, el qual explotaria els paràmetres, per mostrar la foto número 12, en un quadre de color #ff0000, amb una llegenda que tingui paraules en cursiva.

Molts usos

Estem lluny d’haver explorat totes les possibles aplicacions dels models. Aquí en trobeu uns quants amb els que hem pensat. Si vosaltres en trobeu altres, no dubteu a compartir-los tot proposant els vostres models a SPIP Zone/SPIP Contrib’, on a partir d’ara hi han destinat una secció en concret.

-  Canviar l’aspecte dels de les dreceres de documents. Fins ara, aquesta funcionalitat era difícil situar-la ja que s’havia d’editar codi PHP del nucli d’SPIP. A partir d’ara, en tindreu prou tornant a copiar dist/modeles/img.html a dins d’una subcarpeta modeles/ del vostre directori esquelets, i modificar aquest fitxer. El mateix podrem fer per les dreceres <doc1> i <emb1>, encara que aquest darrer sigui d’una complexitat que pot refusar...
Atenció: no us poseu a modificar models per modificacions menors de renderització d’aquestes dreceres —sovint és més fàcil modificar els estils spip_documents_xx a partir dels fitxers CSS del vostre lloc Web.

-  Tocar un so amb player flash. Un model modeles/son_player.html podria donar una drecera <son12|player>.

-  Associar un lloc Web a un article. Afegint als seus esquelets un model modeles/site_box.html, es crea immediatament una nova drecera <site1|box>. Es descriu llavors el model (amb bucles clàssics) fent-li mostrar el nom del lloc, seguit de l’enllaç cap els 3 darrers articles sindicats, a dins d’un requadre flotant a la dreta, i heus aquí un requadre informatiu fàcil de situar en un article. Un paràmetre podria indicar el número d’articles a mostrar, la presència o no de resums, etc.

-  Mostrar una imatge com si fos un segell. Un cop sabem fer un esquelet que mostri una foto en forma de segell de correus (veure Un site dûment timbré), en tindrem prou anomenant-lo modeles/timbre.html per a crear la drecera <timbre12>. I, perquè no, amb paràmetres de mida, color, tria de tampó, etc. [1].

Evidentment, podem imaginar de la mateixa manera modes que mostrin imatges en sèpia, en versió reduïda, etc. Apostem que tot això estarà ben aviat disponible en forma de plugins.

-  Crear un article compost. Imaginem que tenim necessitat d’un article que es compongui amb l’«encapçalament» de l’article 1 i el text de l’article 2. Res més senzill: hem de crear dos models, que retornin simplement, per l’un, l’encapçalament de l’article demanat, per l’altre el seu text, i a dins del nostre article compost hem d’indicar, en el camp encapçalament: <article1|chapo>, i en el camp text: <article2|texte>. S’hi poden afegir filtres, etiquetes i altres petites coses segons les nostres necessitats...

-  Instal·lar un article en diverses seccions. Programant models <article1|chapo>, <article1|texte> etc, esdevé imaginable posar una còpia d’un article a dins d’un altre article, sense duplicar les dades. S’obté d’aquesta manera un article «fantasma» que es pot instal·lar en una nova secció (amb la possibilitat, a més a més, de posar-li un títol diferent o afegir-li elements).

-  Fer una enquesta. El plugin Forms, que permet crear formularis i explotar-los a dins dels articles amb la drecera <form1>, s’ha tornat a escriure a partir dels models.

-  Mostrar una cita aleatòria. Si heu posat cites a dins de les vostres breus, una drecera <citation|aleatoire> en pot extreure una a l’atzar (critère {par hasard}{0,1} en un bucle de breus), i mostrar-la en un marc flotant a costat del paràgraf actual.

-  Inserir un document en una llengua diferent a la llengua de l’article. Funcionant els models com inclusions, el paràmetre lang=xx és encara disponible. Si un dels vostres documents és bilingüe (per exemple, amb un «bloc multi» en la descripció), podeu mostrar la descripció en esperanto, en un article en japonès, cridant <doc1|left|lang=eo>. Si l’esquelet del model conté cadenes de llengua, aquestes seran interpretades, si s’escau, en la llengua passada en paràmetre.

-  Mostrar un gràfic. Es passa una taula de dades al model, que se les arregla a continuació per a crear el gràfic i inserir-lo al flux de text.

-  Un subtítol en forma d’imatge. Per què no considerem una drecera <imagetypo|texte=Mon intertitre> ?

Paràmetres en abundància

La sintaxi de les dreceres de models és del tipus <modele12>, <modele|parametre1=truc|parametre2=chose> o <modele12|alignement|parametre1=etc>. Els paràmetres poden estar compostos d’HTML i de dreceres SPIP (amb la condició, ben evident, que els models cridats hagin previst tractar-los).

Notarem que, per evitar qualsevol conflicte amb les etiquetes HTML, un model no pot ser mai cridat per una drecera com <modele>, el qual no conté ni xifra ni el símbol |.

Els paràmetres es poden allargar en diverses línies, el que permet una escriptura relativament airejada:

<modele 10
  |pays=Allemagne
  |population=82000000
  |superficie=357027
  |classement=63
  |hymne=<i>Das Lied der Deutschen</i>
  |url=http://fr.wikipedia.org/wiki/Allemagne
>

L’esquelet recupera tots aquests paràmetres a l’etiqueta #ENV, així #ENV{population} val 82000000. Com que aquesta etiqueta està assegurada contra tota inclusió de JavaScript, si es vol permetre la inclusió d’HTML en un paràmetre, convé utilitzar la notació #ENV*{hymne} ; si volem, a més, aplicar la tipografia d’SPIP, es pot fer servir [(#ENV*{hymne}|typo)] o [(#ENV*{hymne}|propre)].

El paràmetre principal (aquí, 10), es passa de dues maneres: #ENV{id}=10, i #ENV{id_modele}=10. Això permet accedir, per un model cridat per <article3|chapo>, a l’encapçalament de l’article 3 fent: <BOUCLE_a(ARTICLES){id_article}>#CHAPO</BOUCLE_a>

o bé a les breus lligades a la paraula clau número 3, per: <BOUCLE_b(ARTICLES){id_mot=#ENV{id}}>#TITRE</BOUCLE_b>

Tal i com podem veure, cada model haurà de tenir la seva pròpia documentació, ja que la drecera no indica res per sí mateixa sobre l’explotació feta dels elements passats per la drecera.

Un possible ús en el esquelets

Els models no estan limitats a les dreceres en els articles. És possible cridar-los a partir dels esquelets, utilitzant l’etiqueta #MODELE{modele} o [(#MODELE{modele}{p1=truc,p2=chose}{p3=etc}|filtre...)]; no obstant, això encara és menys nou, ja que és equivalent a una inclusió (estàtica) d’esquelet (igualment permesa per la nova etiqueta #INCLURE).

Els models per defecte

SPIP és lliurat amb els següents models:
-  img, doc, emb,
-  article_mots i article_traductions, que donen respectivament la llista de paraules clau associades a un article, i a les seves traduccions (dreceres: <article1|mots> i <article1|traductions>, però aquests models són també cridats per l’esquelet per dist/article.html);
-  lesauteurs, que defineix el producte de l’etiqueta #LESAUTEURS, però no pot ser cridat com una drecera;
-  i una sèrie de models de paginació (veure El sistema de paginació).

Alguns consells per escriure un model

És aconsellable començar per reflexionar sobre la sintaxi que s’adoptarà: aquest model està lligat a un article concret? Si pensem que si, partirem d’un <article1|xxx>.

Un cop establerta la sintaxi, hem de crear el fitxer modeles/article_xxx.html, i entrar-hi la següent etiqueta: #ENV. Després, en un article de prova (test), escriurem la nostra drecera <article1|xxx|param=x...> ; veurem llavors (d’una manera una mica críptica, es tracta d’una taula en sèrie) l’entorn tal i com es passa al model. Podem distingir-hi, per exemple, el nostre identificador d’article (amb el nom #ENV{id} i #ENV{id_article}.

A continuació podem començar a entrar l’esquelet del nostre fragment de pàgina: <BOUCLE_x(ARTICLES){id_article}> o <BOUCLE_x(ARTICLES){id_article=#ENV{id}}>. I ja està iniciat...

Per tal que el nostre model sigui complet, fa falta provar les sintaxis <article1|xxx|left> i [<article1|xxx>->www.spip.net].

En el primer cas, és el paràmetre align=left el que es passa al model (i és desitjable que el model s’alineï llavors del costat demanat).

En el segon cas, l’enllaç es passat en un paràmetre lien=http://www.spip.net, i el tipus d’enllaç a lien_class=spip_out. És recomanable tenir en compte l’URL demanat, transformant-lo en enllaç en alguna part del model (per exemple al títol o la icona); en aquest cas, fa falta afegir a la primera etiqueta HTML del model una class="spip_lien_ok", que assenyalarà a l’administrador de model que l’enllaç s’ha tingut en compte (a maca d’aquest l’administrador afegirà un <a href=...>...</a> a l’entorn del model produït.

En allò que fa referència als paràmetres, l’etiqueta #ENV{x} ha estat concebuda de tal manera que eviti qualsevol inclusió d’HTML o de JavaScript no desitjat. En un model, podem desitjar autoritzar l’HTML en els paràmetres: llavors haurem d’utilitzar #ENV*{x} per recuperar les dades, i eventualment filtrar-les per |propre o |typo, segons el tipus de dades (text que pugui tenir diversos paràgrafs, o una simple línia de text).

En el pla de la programació, és recomanable que concebeu tots els vostres models en bucles, sense cap codi PHP ni cap etiqueta dinàmica. A tenir en compte, no obstant: en un model que comporti PHP, és el resultat del càlcul el que es posa a la memòria cau, i no el propi script (com en el cas dels esquelets).

Notes

[1Si es prefereix que la drecera s’anomeni <img12|timbre>, anomenarem al model modeles/img_timbre.html.

Autor merce Publié le : Mis à jour : 21/03/23

Traductions : عربي, català, Deutsch, English, Español, français, italiano, Nederlands, Türkçe