Os critérios comuns a todos os loops

Certos critérios aplicam-se a (quase) todos os tipos de loops. Estes critérios destinam-se a restringir o número de resultados apresentados ou a indicar a ordem de exibição. Pode-se combinar facilmente vários destes critérios de seleção.

Classificar os resultados

{par criterio_de_classificacao} indica a ordem de exibição dos resultados. Este critério de classificação corresponde a uma das tags retiradas da base de dados para cada tipo de loop. Por exemplo, pode-se ordenar as matérias {por date} (pela data de publicação), {par date_redac} (pela data de redação) ou {par titre} (pelo título). (Note que, embora as tags estejam em maiúsculas, os critérios de classificação estão em letras minúsculas.)

Caso particular: {par hasard} (sorteado) permite obter uma lista apresentada numa ordem aleatória.

Inverter a classificação Além disso, {inverse} provoca a exibição da classificação em ordem inversa. Por exemplo, {par date} começa pelas matérias mais antigas; com {par date}{inverse} começa a lista de resultados pelas matérias mais recentes.

O critério inverse pode utilizar qualquer tag como parâmetro para variar dinamicamente o sentido da classificação. Por exemplo, é possível escrever: <BOUCLE_exemplo(ARTICLES){par #ENV{tri}}{inverse #ENV{senstri}}>, que permite escolher a coluna de ordenação e o sentido de ordenação pelo URL (&senstri=1 ou &senstri=0)

Classificar pelo número. Ao classificar por um elemento de texto (por exemplo, titre), a classificação é feita por ordem alfabética. No entanto, para forçar uma ordem de apresentação, pode-se indicar um número antes do título, por exemplo: «1. O meu primeiro artigo», «2. Segundo artigo», «3. Terceiro...» etc; numa classificação alfabética, a ordem destes elementos daria a série “1, 10, 11, 2, 3...”. Para restabelecer a classificação de acordo com os números, pode-se usar o critério:

{par num critère}
Por exemplo:

<BOUCLE_materias(ARTICLES){id_rubrique}{par date}{inverse}>

…exibe as matérias de uma seção por ordem cronológica inversa (mais recentes no início, mais antigas no final) e:

<BOUCLE_materias(ARTICLES){id_rubrique}{par titre}>

…exibe segunda a ordem alfabética dos títulos; finalmente:

<BOUCLE_materias(ARTICLES){id_rubrique}{par num titre}>

…exibe segundo a ordem dos números dos títulos.

<BOUCLE_articles(ARTICLES){id_rubrique}{par multi titre}>

No contexto de um site multilingue, o critério {par multi critério} permite classificar alfabeticamente em cada idioma. Sem adicionar "multi", o loop devolve a mesma ordenação para cada idioma.

Classificar por vários critérios pode-se classificar por vários critérios:
{par critério1, critério2}. As ordens de classificação consecutivas são indicadas assim. Os resultados serão primeiro ordenados pelo critério1 e depois pelo critério2 para resultados com o mesmo critério1. Pode especificar quantos critérios forem necessários.

Por exemplo {par date, titre} ordenará os resultados por date (data de publicação) e os resultados com a mesma date serão ordenados pelo titre (título).

Vários critérios {par ...} podem ser especificados para um loop para atingir o mesmo resultado. Por exemplo: {par date} {par titre} é equivalente ao exemplo anterior.

Nota: Quando se usam vários critérios de classificação, o critério {inverse} aplica-se apenas ao critério de classificação colocado imediatamente antes deste.

A notação {!par ...} que inverte um critério de ordenação em particular. Por exemplo: {!par date} {par num titre} ordena por date decrescente e por número crescente no titre para os resultados que tenham a mesma date.

{par_ordre_liste campo, #LISTE} (após SPIP 4.1)

Permite ordenar explicitamente os resultados por um campo.

Opcionalmente, pode ser combinado com o critério {… IN …}, eles têm escopos diferentes:

{… IN …} é usado principalmente para seleccionar conteúdos, a ordem nem sempre é preservada.
par_ordre_liste campo … serve para ordenar a seleção de forma fiável.

Pode ser também combinado com outros {par…} na ordem que se quiser.

O exemplo seguinte seleciona todas as matérias e classifica-as numa ordem predefinida. As matérias não presentes na lista serão ordenadas após:

<BOUCLE_materias(ARTICLES) {par_ordre_liste id_article, #LISTE{5,15,10}}>

O exemplo a seguir faz a mesma coisa, mas limitada às três matérias ordenadas:

<BOUCLE_materias(ARTICLES) {id_article IN 5,10,15} {par_ordre_liste id_article, #LISTE{5,15,10}}>

Comparações, igualdades

{critério < valor}
Comparação com um valor fixo (pode ser utilizado «>», «<», «=», «>=», «<=». Todos os critérios de classificação (conforme retirados da base de dados) também podem ser usados para limitar o número de resultados.

O valor à direita do operador pode ser:

-  Um valor constante fixo no template. Por exemplo:

<BOUCLE_mat(ARTICLES){id_article=5}>

…exibe a matéria de número 5 (útil para destacar uma matéria específica na página inicial).

<BOUCLE_mat(ARTICLES){id_secteur=2}>

…exibe as matérias do setor número 2.

-  Uma tag disponível no contexto do loop. Por exemplo:

<BOUCLE_mat(ARTICLES){id_article=5}>
	<BOUCLE_titulo(ARTICLES) {titre=#TITRE}>
	...
	</BOUCLE_titulo>
</BOUCLE_mat>

…serve para encontrar as matérias que têm o mesmo título que a matéria 5.

Atenção: Só pode ser usada uma tag simples. Não é permitido filtrá-la ou usar código opcional.

Especialmente, se quiser usar a tag #ENV — ou qualquer outra tag que aceite parâmetros —, deve-se usar a notação: {titre = #ENV{titre}} et pas: {titre = [(#ENV{titre})]}.

Expressões regulares:

Muito potente (mas claramente mais complexa de manipular), o termo de comparação «==» introduz uma comparação segundo uma expressão regular. Por exemplo:

<BOUCLE_mat(ARTICLES){titre==^[aA]}>

…seleciona as matérias cujo título começa por «a» ou «A».

Negação:

Pode-se usar a notação {xxx != yyy} e {xxx !== yyy}, o ! correspondendo à negação (operador lógico NOT).

<BOUCLE_mat(ARTICLES){id_secteur != 2}>

…seleciona as matérias que não pertencem ao setor numero 2.

<BOUCLE_mat(ARTICLES){titre!==^[aA]}>

…seleciona as matérias cujo título não começa por «a» ou «A».

Exibição em função da data

Para facilitar a comparação entre datas, criou-se alguns critérios:
-  age e age_redac correspondem respectivamente à idade da publicação e da primeira publicação de uma matéria, em dias: {age<30} seleciona os elementos publicados há um mês;
-  os critérios mois, mois_redac, annee, annee_redac permitem comparar com valores fixos ({annee<=2000} para os elementos publicados antes do fim do ano 2000).

Pode-se combinar vários desses critérios para realizar seleções muito exatas. Por exemplo:

<BOUCLE_mat(ARTICLES){id_secteur=2}{id_rubrique!=3}{age<30}>

…exibe as matérias do setor 2, excluindo as da seção 3, publicadas há menos de 30 dias.

Dica. O critério age (idade) é muito útil para exibir matérias ou notas cuja data se situe «no futuro», com valores negativos (desde que tenha seleccionado, na configuração do SPIP, a opção «Publicar matérias pós-datadas»). Por exemplo, este critério permite destacar eventos futuros: {idade<0} seleciona matérias ou notas cuja data é no futuro («depois» de hoje)...

Idade relativa a uma data fixa. O critério age é calculado em relação à data de hoje (portanto, {idade<30} corresponde a matérias publicadas há menos de um mês em relação a hoje). O critério age_relatif (idade relativa) compara a data de uma matéria ou nota com uma data «atual»; por exemplo, dentro de um loop ARTICLES, já conhecemos a data para cada resultado do loop, pelo que podemos selecionar em relação a essa data (e não mais em relação ao dia de hoje).

Por exemplo:

<BOUCLE_materia_principal(ARTICLES){id_article}>
	<h1>#TITRE</h1>
	<BOUCLE_seguinte(ARTICLES){id_rubrique}{age_relatif<=0}{exclus}{par date}{0,1}>
	Matéria seguinte: #TITRE
	</BOUCLE_seguinte>
</BOUCLE_materia_principal>

O BOUCLE_seguinte exibe uma única matéria da mesma seção, classificada por data, em que a data de publicação é inferior ou igual à data da «materia_principal»; ou seja, a matéria da mesma seção publicado após a matéria principal.

Mais informações sobre o uso das datas encontram-se na matéria sobre «A gestão das datas».

Exibição de uma parte dos resultados


-  {branche} (ramo) limita os resultados — para os loops contendo um #ID_RUBRIQUE — ao ramo atual (a seção corrente e suas subseções). Por exemplo:

<BOUCLE_matérias(ARTICLES) {branche}>

…retornará todas as matérias da seção corrente e as das suas subseções,

<BOUCLE_matérias(ARTICLES) {!branche}>

…retornará todas as matérias que não pertencem à seção corrente oou às suas subseções,

Pode-se usar o critério {branche?} opcional para o aplicar apenas se uma seção for selecionada no contexto (um loop envolvente ou o URL fornecer um id_rubrique).
Par exemple:

<BOUCLE_materias(ARTICLES) {branche?}>

retornará todas as matérias da seção corrente e das suas subseções se houver um id_rubrique no contexto, senão, todas as matérias do site.


-  {doublons} (duplicados) ou {unique} (único) (estes dois critérios são rigorosamente idênticos)
bloqueiam a exibição de resultados já exibidos em outros loops que também usem este critério.


-  {doublons xxxx} pode-se ter vários conjuntos de critérios {doublons} independentes. Os loops com {doublons vermelho} não terão nenhuma influência sobre os loops com {doublons azul} como critério.


-  {exclus} (excluído) remove do resultado o elemento (matéria, nota, seção etc.) no qual já se encontra. Por exemplo, ao exibir matérias da mesma secção, não queremos exibir um link para a matéria em que já nos encontramos.


-  {xxxxINa,b,c,d} limita a exibição aos resultados contendo o critério xxxx igual a a, b, c ou d. Os resultados são classificados na ordem indicada (a menos que seja explicitamente solicitado por outro critério de classificação). Também é possívelselecionar strings, por exemplo com {titre IN 'China', 'Japão'}.

As tags são permitidas nos argumentos IN, incluindo a tag ENV, à qual são aplicados filtros de análise para garantir que a consulta SQL será escrita corretamente. Excepcionalmente, o SPIP testará se o argumento ENV designa uma matriz (por exemplo, proveniente de entradas de formulários cujo atributo name termina com []). Se for este o caso, e se os filtros de análise tiverem sido desativados ao adicionar um duplo asterisco a essa tag, cada elemento da matriz será considerado como um argumento de IN, com o SPIP aplicando os filtros de segurança em cada um deles.

O template do plugin-dist fórum inc-forum_previsu.html fornece um exemplo de uso com um loop MOTS tendo o critério {id_mot IN #ENV**{ajouter_mot}}: este loop apenas selecciona apenas as palavras-chave pertencentes a um conjunto indicado dinamicamente. Aqui, este conjunto terá sido construído sob a forma deste plug-in-dist inc-choix_mots.html, que usa os atributos "name=ajout_mot[]".


-  {a, b} onde a e b são números. Este critério permite limitar o número de resultados. a o resultado a partir do qual se inicia a exibição (atenção , o primeiro resultado é numerado como 0 - zero); b indica o número de resultados exibidos.

Por exemplo {0, 10} exibe os dez primeiros resultados; {4, 2} exibe os dois resultados a partir do quinto (inclusive).

-  {debut_xxx, b} (início) é uma variante mais elaborada do anterior. Permite começar a limitar os resultados com uma variável passada no URL (esta variável substitui o a que foi indicado anteriormente). É uma operação um pouco complicada, que felizmente não precisa de utilizar com muita frequência.

A variável passada no URL deve começar por debut_xxx< (onde xxx é uma palavra escolhida pelo webmaster). Assim, para uma página cujo URL é:

spip.php?page=petition&id_article=13&debut_signatures=200 com um template (petition.html) contendo, por exemplo:

<BOUCLE_assinaturas(SIGNATURES){id_article}{debut_signatures,100}>

obteremos a lista de 100 assinaturas a partir da 201ª [lembrete].

Com o URL: spip.php?page=petition&id_article=13&debut_signatures=300 obteremos a lista das 100 assinaturas a partir da 301ª [lembrete].


-  {a, n-b} é uma variante de {a, b} que limita a exibição em função do número de resultados no loop. a é o resultado a partir do qual se começa a fazer a exibição; b indica o número de resultados não exibir no final do loop.

{0, n-10} exibirá todos os resultados do loop menos os 10 últimos.

{5, n} exibirá os resultados do 6º ao último.

Atenção:
se "a" e "b" devem ser substituídos por números, é a letra "n" que deve ser utilizada quando necessário.


-  {n-a, b} é a contrapartida de {a, n-b}. Limitamos os resultados a b iniciando a exibição no resultado antes do final do loop.

Por exemplo: {n-20,10} exibirá 10 resultados a partir do 20º resultado antes do final do loop.

Atenção:
os critérios {a, n}, {a, n-b} e {n-a, b} não funcionam se forem usados com o critério {pagination} e retornam resultados incoerentes!

-  {a/b} onde a e b são números. Este critério permite exibir uma parte a (proporcionalmente) dos resultados em função de um número de «partes» b.

Por exemplo: {1/3} apresenta o primeiro terço dos resultados. Este critério é especialmente útil para apresentar listas em múltiplas colunas. Para obter uma apresentação de duas colunas, basta criar um primeiro ciclo, apresentado na primeira coluna, com o critério {1/2} (a primeira metade dos resultados), depois um segundo ciclo na segunda coluna, com o critério {2/2} (a segunda metade dos resultados).

Atenção. O uso do critério {doublons} com este critério é perigoso. Por exemplo:#

<BOUCLE_prim(ARTICLES){id_rubrique}{1/2}{doublons}>
	<li> #TITRE
</BOUCLE_prim>
<BOUCLE_seg(ARTICLES){id_rubrique}{2/2}{doublons}>
	<li> #TITRE
</BOUCLE_seg>

…não exibirá todas as matérias da seção! Por exemplo, imaginemos que existe um total de 20 matérias na nossa seção. O BOUCLE_prim exibirá a primeira metade das matérias, ou seja, as primeiros 10, e bloqueará (por causa dos {doublons}) a sua reutilização. O BOUCLE_seg irá recuperar a segunda metade dos artigos desta secção que ainda não foram apresentados pelo BOUCLE_prim; portanto, metade das 10 matérias seguintes, ou seja, as últimas 5 matérias da seção. Você “perdeu” assim 5 itens na operação...

Exibição entre os resultados

{"inter"} permite indicar um código HTML (aqui, inter) inserido entre os resultados do loop como separador. Por exemplo, para separar uma lista de autores por vírgulas, indica-se:

<BOUCLE_autores(AUTEURS){id_article}{", "}>

Diversos


{logo} permite só selecionar matérias (ou seções etc) que disponham de um logo.
O critério inverso {!logo} lista os objetos que não possuem logo.
Também funciona no loop (HIERARCHIE).

Notas

[lembreteo primeiro resultado é numerado 0, pelo que o 200º resultado representa na realidade a 201ª assinatura

Autor Ricardo Porto Publié le :

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