Usando os modelos

Um modelo é um pequeno template SPIP que descreve um fragmento de HTML que é fácil de inserir num outro template ou — e essa é a principal vantagem — no texto de uma matéria.

Inspirado nos modelos da Wikipédia, o sistema de modelos oferece novas funcionalidades aos webmasters e aos redatores.

Os modelos são uma extensão dos atalhos clássicos <img1> e <doc1>. Estes correspondem aos modelos /plugins-dist/medias/modeles/img.html e /plugins-dist/medias/modeles/doc.html.

A sua sintaxe foi ampliada e é possível especificar, seja o alinhamento (<img1|left>, <img1|right> ou <img1|center>), uma classe mais genérica, que pode corresponder a um template específico, se existir, ou a uma classe CSS (<img1|classe> irá procurar o modelo modeles/img_classe.html, se o ficheiro existir, senão usará o modelo modeles/img.html, mas com o parâmetro class="classe").

Mas os modelos não se limitam apenas às imagens e documentos; é também possível criar novos atalhos no formato <modelo1>, incluindo simplesmente um template no diretório modeles/ do seu diretório de templates!
Deve-se ter o cuidado de nomear o ficheiro em letras minúsculas («caixa baixa»). Para evitar as diferenciações em alguns sistemas de servidor entre o_ficheiro01.html e O_Ficheiro01.html, o SPIP procurará por ficheiros nomeados em minúsculas.

Na ausência de qualquer modelo correspondente ao atalho indicado (por exemplo, <breve1>), o gestor de modelo do SPIP avalia se o objeto solicitado lhe é conhecido (aqui, breve), e se este último tem um URL.

<breve1> Neste caso (verificado aqui, já que as notas (breves) são conhecidas do sistema e dispõem de uma função de URL), o SPIP substitui o atalho <breve1> com uma pequena caixa flutuante com um link para a nota, e a exibição do seu título, como se tivesse sido indicado [->breve1].

Se o objeto não for conhecido, o SPIP deixa o atalho intacto, para que ele seja tratado eventualmente em seguida (por um plugin ou um filtro adicional), ou simplesmente ignorado.

Também é possível passar parâmetros adicionais aos modelos. A sintaxe égeneralizada e aceita inclusive HTML, como no exemplo:

<som19|cor=#ff0000
   |legenda=O grande <i>Count Basie</i>
   |foto=12>

que poderá chamar um modelo modeles/som.html, o qual usará os parâmetros para exibir a foto número 12, numa caixa de cor #ff0000, com uma legenda que suporta palavras em itálico.

Usos mútiplos

-  Alterar o aspeto dos atalhos de documentos. Basta recopiar plugins-dist/medias/modeles/img.html para um subdiretório modeles/ do seu diretório de templates, e de alterar este ficheiro. Idem para os atalhos <doc1> e <emb1>, embora este seja de uma complexidade que pode ser desanimadora...
Atenção: não se aventure na modificação de modelos para modificações menores da aparência desses atalhos — é muitas vezes mais fácil alterar os estilos spip_documents_xx a partir dos ficheiros CSS do seu site.

-  Exibir uma tabela CSV (Excel). Basta carregar o ficheiro e, em seguida, chamá-lo com <emb12> para exibir os dados do ficheiro CSV na forma de uma tabela HTML!

-  Associar um site a uma matéria. Ao incluir nos seus templates um modelo modeles/site_box.html, cria-se imediatamente um novo atalho <site1|box>. Escrevemos em seguida o modelo (com os loops clássicos) de modo a fazê-lo exibir o nome do site, seguido de links para as 3 matérias sindicadas mais recentes, numa caixa flutuante à direita, conseguindo-se assim uma infobox fácil de colocar numa matéria. Um parâmetro poderá indicar o número de matérias a serem exibidas, a presença ou não de resumos etc.

-  Exibir uma imagem com marca d’água. Uma vez que se saiba criar um template que exiba uma foto em formato de selo (ver Un site dûment timbré), basta nomear modeles/selo.html para criar o atalho <selo12>. Com, porque não, parâmetros de tamanho, de cor, de escolha do carimbo etc [1].

Bemm entendido, pode-se imaginar do mesmo modo modelos que exibam as imagens em sépia, em versão reduzida etc. Apostamos que tudo isso estará rapidamente disponível como plugins.

-  Criar uma matéria composta. Suponhamos que precisamos de uma matéria composta da introdução da matéria 1 e do texto da matéria 2. Nada mais simples: cria-se dois modelos, que recuperam, para um, a introdução da matéria especificada, para o outro, o seu texto e, na nossa matéria composta especifica-se no campo introdução: <article1|intro>, e no campo texto: <article2|texto>. Pode-se incluir filtros, tags e ajustes à vontade...

-  Instalar uma matéria em diversas seções. Programando os modelos <article1|intro>, <article1|texto> etc, é possível incluir uma cópia de uma matéria dentro de outra matéria, sem duplicar os dados. Obtém-se assim uma matéria «fantasma» que pode ser instalada numa nova seção (com, ainda, a possibilidade de lhe dar um título diferente ou de incluir outros elementos).

-  Fazer uma sondagem. O plugin Formidable, que permite criar formulários e usá-los dentro das matérias com o atalho <formulaire|formidable|id=34>, foi reescrito a partir de modelos.

-  Mostrar uma citação aleatória. Se tivermos inserido citações na notas, um atalho <citacao|aleatoria> pode-se recuperar uma à sorte (critério {par hasard}{0,1} nu,m loop de notas), e exibí-la numa caixa flutuante ao lado do parágrafo atual.

-  Inserir um documento em idioma diferente do da matéria. Como os modelos funcionam como inclusões, o parâmetro lang=xx também está disponível. Se um dos seus documentos é bilíngue (por exemplo, com um «bloc multi» na chamada), você pode exibir a chamada em esperanto, numa matéria em japonês, chamando <doc1|left|lang=eo>. Se o template do modelo contiver cadeias de idioma, elas serão interpretadas, caso contrário, no idioma passado como parâmetro.

-  Exibir um gráfico. Uma tabela de dados é passada ao modelo que se encarrega então de criar um gráfico e inserí-lo no fluxo do texto.

-  Um entretítulo na forma de imagem. Porque não imaginar um atalho <imagetypo|texto=Meu entretitulo>?

Na prática

Para evitar conflitos com as tags HTML, um modelo não pode ser chamado por um atalho como <modele>!

Para chamar um modelo simples sem parâmetro, é obrigatório:

  1. ou atribuir-lhe um identificador numérico : <o_modelo1>;
  2. ou segui o seu nome com um pipe | : <le_modele|>)

No primeiro caso, o identificador passado será recuperável no interior do template o_modelo.html com #ENV{id} ou ainda #ENV{id_o_modelo} (que valerá «1» no nosso exemplo) ;

No segundo caso #ENV{id} como #ENV{id_o_modelo} valendo respectivamente «0» (zéro).

Parâmetros em abundância

A sintaxe dos atalhos de modelos tem o formato

  • <modelo12>
  • <modelo|parâmetro1=valor|parâmetro2=valor>
  • <modelo12|filtro|parâmetro1=valor>.

Os parâmetros podem ser compostos de HTML e de atalhos SPIP (na condição, á claro, que os modelos chamados tenham previsto tratá-los).

Os parâmetros podem estender-se por diversas linhas, permitindo uma escrita relativamente espaçada:

<modelo 10
  |pais=Alemanha
  |populacao=82000000
  |superficie=357027
  |classificacao=63
  |hino=<i>Das Lied der Deutschen</i>
  |url=http://fr.wikipedia.org/wiki/Allemagne
>

O template recupera todos esses parâmetros na tag #ENV, assim #ENV{populacao} vale 82000000. Como esta tag está protegida contra qualquer injeção de javascript, se quisermos permitir HTML num parâmetro, é conveniente usar a notação #ENV*{hino}; se se quiser aplicar o tratamento tipográfico do SPIP, pode-se empregar [(#ENV*{hino}|typo)] ou [(#ENV*{hino}|propre)].

O parâmetro principal (aqui, 10), é passado de duas formas: #ENV{id}=10, e #ENV{id_modele}=10. O que permite aceder, para um modelo chamado por <article3|intro>, à introdução da matéria 3 fazendo:

<BOUCLE_a(ARTICLES){id_article}>#CHAPO</BOUCLE_a>

ou às notas vinculadas à palavra-chave número 3, por;

<BOUCLE_b(BREVES){id_mot=#ENV{id}}>#TITRE</BOUCLE_b>

Como se vê, cada modelo deverá ter a sua própria documentação, já que o próprio atalho não indica nada sobre a utilização feita dos elementos passados pelo atalho.

Um possível emprego nos templates

Os modelos não são limitados aos atalhos dentro das matérias. É possível chamá-los a partir de um template, usando a tag #MODELE{modelo}.

Exemplo:

[(#MODELE{modelo, p1=coisa, p2=outra_coisa, p3=etc}|filtro...)]

Nota: é equivalente a uma inclusão (estática) de template igualmente permitido pela tag #INCLURE. Sendo esta inclusão estática (= armazenada em cache) é preciso atenção para não incluir elementos dinâmicos num modelo, particularmente nenhuma tag #FORMULAIRE_XYZ.

Os modelos padrão

O SPIP é disponibilizado com os modelos a seguir:

-  img, doc, emb,

-  article_mots e article_traductions, que fornecem respectivamente a lista de palavras-chave vinculadas a uma matéria, e de suas traduções (atalhos: <article1|mots> e <article1|traductions>, mas estes modelos são também chamados pelo template por dist/article.html);

-  lesauteurs, que define o resultado da tag #LESAUTEURS, mas não pode ser chamado como um atalho;

-  e uma série de modelos de paginação (ver O sistema de paginação).

Os formulários

É igualmente possível chamar os formulários como modelos inseridos num conteúdo editorial.

Exemplo:
<formulaire|login>

Conselhos para escrever um modelo

É rfecomendável começar por refletir a sintaxe que se quer adotar: este modelo estará ligado a uma matéria específica? Se sim, deve-se escolher <article1|xxx>.

Uma vez a sintaxe estabelecida, cria-se o ficheiro modeles/article_xxx.html, entrando-se simplesmente a tag #ENV. Então, numa matéria de teste, digita-se o nosso atalho <article1|xxx|param=x...>; verifica-se, então (numa forma um tanto críptica, trata-se de uma tabela serializada) o ambiente tal como passado ao modelo. pode-se, por exemplo, distinguir o nosso identificador da matéria (sob o nome #ENV{id} e #ENV{id_article}).

Em seguida, pode-se começar a escrever o template do nosso fragmento de página:

<BOUCLE_x(ARTICLES){id_article}>

ou

<BOUCLE_x(ARTICLES){id_article=#ENV{id}}>

. E aqui vamos nós...

Para que o nosso modelo esteja completo, falta testar as sintaxes <article1|xxx|left> e [<article1|xxx>->www.spip.net].

No primeiro caso, é o parâmetro align=left que é passado ao modelo (e é desejável que o modelo esteja alinha ao lado comandado).

No segundo caso, o link é passado num parâmetro lien=http://www.spip.net, e a classe do link em lien_class=spip_out. É recomendável levar em conta o URL solicitado, transformando-o em link, qualquer parte do modelo (por exemplo no título ouno ícone); neste caso, é preciso incluir na primeira tag HTML do modelo uma class="spip_lien_ok", que assinalará ao gestor de modelo que o link foi considerado (na falta do qual o gestor incluirá um <a href=...>...</a> à volta do modelo produzido.

No que diz respeito aos parâmetros, a tag #ENV{x} foi concebida de modo a evitar qualquer injeção de HTML ou de javascript indesejada. Num modelo, pode-se desejar autorizar o HTML nos parâmetros: é preciso então usar #ENV*{x} para recuperar os dados, e eventualmente filtrá-los com |propre ou |typo, de acordo com o tipo de dados (texto podendo comportar vários parágrafos, ou simples linha de texto).

No plano da programação, é recomendado conceber os seus modelos inteiramente em loops, sem nenhum código PHP nem tag dinâmica. Note sempre: num modelo contendo PHP, é o resultado do cálculo que é armazenado em cache, e não o script (como no caso dos templates).

Ver também

Após o lançamento do SPIP 4.0, foi realizado um intenso trabalho nos documentos e logos. Encontre as explicações detalhadas sobre as mudanças aqui:

Notas

[1Se preferir que o atalho se chame <img12|timbre>, o nome do modelo deverá ser modeles/img_timbre.html.

Autor Ricardo Porto Publié le :

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