A gestão das datas

O SPIP tem uma série de critérios e tags para gerir as datas das matérias.

Exibir as datas

-   #DATE é a data de publicação online (editável após a publicação da matéria, da nota etc. A data de uma seção é a do seu elemento mais recente).

-  #DATE_REDAC é a data de publicação anterior (pode ser modificada à vontade, apenas está disponível em matérias e em sites que tenham esta opção ativada).

-  #DATE_MODIF devolve a data da última atualização da matéria.

-  #DATE_NOUVEAUTES permite exibir a data do último envio do e-mail de novidades.

Formatar as datas

Se as tags #DATE... forem usadas sem filtro, todas as informações da data são exibidas em formato numérico (no formato MySQL): «2001-12-01 03:25:02».

Os filtros |annee, |mois, |jour, |heures, |minutes, |secondes, mais aussi |affdate, |date_relative, |nom_mois, |nom_jour, |saison etc. devem ser usados para permitir todos os tipos de exibição habituais em diversos formatos. Uma lista completa dos filtros que podem ser aplicados às datas pode ser encontrada na matéria Os filtros do SPIP.

Contexto de data

O SPIP fornece a todos os loops um contexto de data. Se estiver dentro de um loop (ARTICLES), (BREVES) ou (RUBRIQUES), a data em questão é a data de publicação da matéria, da nota ou a data da última atualização da seção.

Se, por outro lado, estivermos no primeiro nível do template (ou seja, fora de qualquer loop), a data considerada é a data atual - a menos que tenhamos passado uma data no URL da página (ver exemplo abaixo).

Neste último caso, a data passada no URL é analisada com a função strtotime: deste modo, ?date=2013, ?date=2013/01 funcionarão, mas também date=-1year (há um ano), ?date=1march1970 (matérias publicadas em 1 de Março de 1970) etc.

Critério de data, de idade e de idade relativa

O critério {age} (idade) permite selecionar matérias com base no período de tempo entre a data de publicação online e a data atual. Assim, {age<30} impedirá que os itens com mais de 30 dias sejam exibidos.

O {age_relatif} (idade relativa) permite comparar as datas de publicação de duas matérias: se acabou de selecionar uma matéria num loop, um segundo loop colocado dentro do primeiro pode solicitar as matérias publicados na semana anterior à mesma, através de {age_relatif<=7}{age_relatif>=0} etc.

Os critérios {age} e {age_relatif} permitem distinguir duas matérias publicadas no mesmo dia. Podemos, assim, programar loops para obter a matéria “anterior” ou “seguinte”:

<BOUCLE_mat(ARTICLES){id_article}>
	<BOUCLE_ant(ARTICLES){age_relatif>=0}{par date}{inverse}{1,1}>
	anterior: <a href='#URL_ARTICLE'>#TITRE</a> #DATE
	</BOUCLE_ant>
	<div><b>#TITRE</b> - #DATE</div>
	<BOUCLE_post(ARTICLES){age_relatif<0}{par date}{0,1}> 
	seguinte: <a href='#URL_ARTICLE'>#TITRE</a> #DATE
	</BOUCLE_post>
</BOUCLE_mat>

Atenção! Apesar das aparências, as comparações de datas são complicadas de lidar: na verdade, por causa de "datas imprecisas" (uma matéria publicada num determinado mês, sem que o dia seja especificado), o cálculo da age_relatif pode dar o valor zero num sentido, e não no outro! Daí a assimetria dos loops acima apresentados: num sentido procuramos a "segunda mais recente" das matérias {age_relatif>=0} (porque a mais recente, com a comparação não estrita, só pode ser a própria matéria); no outro, a mais antiga das matérias publicadas estritamente mais tarde.

Os critérios {jour_relatif}, {mois_relatif} e {annee_relatif} funcionam como age_relatif, mas têm em conta datas arredondadas para o dia, mês e ano, respetivamente; por exemplo, se o URL tiver a variável ?date=2013-01-01, o loop a seguir devolverá "todas as matérias do mês de março de 2013"

<h3>Matérias de [(#DATE|nom_mois)] [(#DATE|annee)] :</h3>
<BOUCLE_blog(ARTICLES){mois_relatif=0}{par date}{"<br>"}>
<a href='#URL_ARTICLE'>#TITRE</a> ([(#DATE|jour)]/[(#DATE|nom_mois)]
</BOUCLE_blog>

A data de publicação anterior

Se tiver ativado o uso de datas de publicação anteriores, a maioria dos critérios apresentados acima funcionarão: basta adicionar _redac aos critérios. Assim, {age_redac>365} irá exibir matérias cuja data de publicação anterior tenha mais de um ano.

Se um loop selecionar uma matéria cuja data de publicação está definida, um loop interno com o critério {annee_relatif_redac=0} irá procurar as matérias cuja data de publicação anterior pertença ao mesmo ano.

Um exemplo de sumário de site ordenado por data

A título de exemplo, veja como pode exibir todas as matérias de um site, classificados por mês de publicação:

<BOUCLE_materiasdomes(ARTICLES){par date}{inverse}>
	<BOUCLE_primeiradomes(ARTICLES){id_article}{doublons}>
	<b>[(#DATE|nom_mois|majuscules)] [(#DATE|annee)]</b>
	<ul>
	   <li><a href="#URL_ARTICLE">[(#TITRE|couper{50})]</a> - [(#DATE|jour)]/[(#DATE|mois)]</li>
	</BOUCLE_primeiradomes>
	<BOUCLE_MES(ARTICLES){mois_relatif=0}{doublons}{par date}{inverse}>
       <li><a href="#URL_ARTICLE">[(#TITRE|couper{50})]</a> - [(#DATE|jour)]/[(#DATE|mois)]</li>
	</BOUCLE_MES>
</ul>
</BOUCLE_materiasdomes>

Ver também os filtros de datas |affdate

Autor Ricardo Porto Publié le : Mis à jour : 10/03/25

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