[spip-dev] modifs sur les date, {age_relatif}, {age} etc.

Salut,

j'ai apporté pas mal de modifs sur les critères d'age, de manière à ce que
{age} et {age_relatif} ne soient plus bêtement égaux à 0 quand les deux
articles que l'on compare ont été publiés le même jour.

Du coup une boucle comme
<BOUCLE_a(ARTICLES){par date}>
<br>
#ID_ARTICLE : #DATE
    <BOUCLE_b(ARTICLES){age_relatif<0}{par date}{0,1}>
    (#ID_ARTICLE : #DATE)
    </BOUCLE_b>
</BOUCLE_a>

indique bien, pour chaque article, celui qui a été publié juste après (son
successeur, donc), entre parenthèses. Ce n'était pas le cas avant si deux
articles ou plus avaient été publiés le même jour.

De plus, si une date=xxxx est passée dans l'URL, on l'analyse un peu avant
de l'envoyer dans MySQL. Du coup '2003' devient '2003-01-01', et '2003/02'
devient '2003-02-01' (il y a même mieux, si php>3.0.12, la date est analysée
à partir de la fonction strtotime, cf. http://php.net/strtotime )

Des critères supplémentaires {jour_relatif}, {mois_relatif} et
{annee_relatif} permettent du coup de sélectionner "tous les articles parus
le même mois que... l'article en cours / la date de l'URL" {mois_relatif=0}
etc.

Je pense que les bloggeurs seront contents.

-- Fil

Est-ce que ça fonctionne toujours avec les dates floues ("mai 2000", "2000")? C'était la cause du comptage des dates en jours précédemment.

Est-ce que ça fonctionne toujours avec les dates floues ("mai 2000",
"2000")? C'était la cause du comptage des dates en jours précédemment.

Euh oui, enfin je crois (quand on programme au milieu de la nuit à cause
d'une insomnie pétaradante, on peut craindre le pire :wink: mais la
normalisation des dates que j'impose à un autre endroit devrait même
permettre de ne plus avoir le LEAST(...) sur {age_relatif}

Mais je crois qu'on peut faire encore mieux, hein :wink:

-- Fil

> Est-ce que ça fonctionne toujours avec les dates floues ("mai 2000",
> "2000")? C'était la cause du comptage des dates en jours précédemment.

Vérification faite :

<BOUCLE_a(ARTICLES){par date}>
<br> #ID_ARTICLE #DATE
<BOUCLE_b(ARTICLES){age_relatif<0}{par date}{0,1}>
(#ID_ARTICLE #DATE)
</BOUCLE_b>
</BOUCLE_a>

done bien :

1 2003-02-26 17:26:01 (2 2003-03-00 00:00:00)
2 2003-03-00 00:00:00 (1 2003-02-26 17:26:01)
3 2003-03-26 10:50:08 (4 2003-04-04 15:23:05)
4 2003-04-04 15:23:05

mais en effet si je supprime carrément les LEAST(xxx) ça ne marche plus :

1 2003-02-26 17:26:01 (3 2003-03-26 10:50:08)
2 2003-03-00 00:00:00 (1 2003-02-26 17:26:01)
3 2003-03-26 10:50:08 (4 2003-04-04 15:23:05)
4 2003-04-04 15:23:05

(l'article 2 n'est pas vu comme successeur de 1, et l'article 3 n'arrive pas
à s'accrocher sur la date floue de l'article 2)

-- Fil

1 2003-02-26 17:26:01 (2 2003-03-00 00:00:00)
2 2003-03-00 00:00:00 (1 2003-02-26 17:26:01)
3 2003-03-26 10:50:08 (4 2003-04-04 15:23:05)
4 2003-04-04 15:23:05

Hum, je suis carrément dans les choux là :wink: Il y a un buglet. La colonne de
droite devrait être 2 3 4, pas 2 1 4... wait and see.

-- Fil

Voilà,j'ai tout repris et je pense fini :

* le tag #DATE fonctionne en-dehors des boucles (cas des dates passées dans
l'URL)

* tous les critères {date_...} ou {age_...} sont disponibles en
{date_..._redac} ou {age_..._redac} -- mais attention c'est la date_redac
relative à la *date* courante, pas à la *date_redac* (donc ces critères ne
sont probablement utilisable qu'avec la date passée en URL ou en contexte
inclus) ; pour comparer à la date_redac courante, il faut doubler :
{age_relatif_redac_redac}... c'est un peu dingue, mais au moins ça sera
logique et mnémotechnique. Sauf si quelqu'un a plus simple ??

* correction de 2-3 anciens petits bugs de date

Exemple :

<b>#DATE</b><br>
<BOUCLE_a(ARTICLES){par date}{inverse}>
<br>#ID_ARTICLE #DATE #DATE_REDAC
<BOUCLE_b(ARTICLES){age_relatif_redac_redac>0}{par
date_redac}{inverse}{0,1}>
<br>&nbsp; (age_relatif_redac_redac : #ID_ARTICLE)
</BOUCLE_b>
<BOUCLE_c(ARTICLES){age_relatif_redac>0}{par date_redac}{inverse}{0,1}>
<br>&nbsp; (age_relatif_redac : #ID_ARTICLE)
</BOUCLE_c>
<BOUCLE_d(ARTICLES){age_relatif>0}{par date}{inverse}{0,1}>
<br>&nbsp; (age_relatif : #ID_ARTICLE)
</BOUCLE_d>
</BOUCLE_a>

résultat :

4 2003-04-04 15:23:05
(age_relatif_redac_redac : 2)
(age_relatif_redac : 2)
(age_relatif : 3)
3 2003-03-26 00:00:00 1970-04-11 00:00:00
(age_relatif_redac_redac : 1)
(age_relatif_redac : 2)
(age_relatif : 2)
2 2003-03-00 00:00:00 1980-02-02 00:00:00
(age_relatif_redac_redac : 3)
(age_relatif_redac : 2)
(age_relatif : 2)
1 2003-02-26 17:26:01
(age_relatif_redac_redac : 2)
(age_relatif_redac : 2)

-- Fil

Non, je ne comprends pas un traitre mot. Est-ce que tu peux expliquer avec les critÚres "date" et "age", tout de même plus simples et réellement utilisés?

Est-ce que le fonctionnement de age_relatif a changé?

ARNO*

Non, je ne comprends pas un traitre mot. Est-ce que tu peux expliquer avec
les critères "date" et "age", tout de même plus simples et réellement
utilisés?

Bon, heu, la date_redac est une date, et l'âge est une difféérence entre la
date qde l'article ue tu cherches dans la base et la date du contexte (celle
de l'article courant ou celle passée en URL).

Donc que signifie : {age_relatif_redac<0} -- que je cherche un article dont
la date_redac est < à la _date_ du contexte (celle de l'article courant ou
celle passée en URL) ; ça n'a guère de sens, tu cen conviendras, que si la
date de référence en question (celle du contexte) provient d'un URL.

Mais on peut aussi vouloir comparer la date_redac d'un article à la
date_redac d'un autre article (celui qui donne le contexte). Du coup il faut
un autre critère, et c'est {age_relatif_redac_redac}...

Est-ce que le fonctionnement de age_relatif a changé?

Il est en fraction de jours au lieu d'être en jours entiers ; mais pour le
reste, il n'a pas changé : il compare toujours la date de l'article que tu
cherches dans la base à la "date du contexte" (celle de l'article courant ou
celle passée en URL) ; et il fonctionne toujours avec les dates floues.

L'ancien comportement de {age_relatif} (qui faisait que {age_relatif=0}
signifiait "publié le même jour que..." est maintenant le comportement de
{jour_relatif=0} ; {age_relatif=0} signifie maintenant "publié au même
moment exactement que...", ce qui se conçoit dans des cas limite ;^)

-- Fil

Ce qui, pour le coup, est nickel. Ca simplifiera pas mal les boucles du genre: afficher les 3 articles suivants. Parce que là , ce genre de boucle risquait de déconner quand on publiait beaucoup de choses le même jour.

A la sortie officielle de la 1.6, fais-moi penser à faire le petit bout de doc qui explique comment faire ce genre d'affichage (3 articles suivants, 3 articles précédents...). Garanti sans PHP of course. :slight_smile:

A*

Fil wrote:

Des critères supplémentaires {jour_relatif}, {mois_relatif} et
{annee_relatif} permettent du coup de sélectionner "tous les articles parus
le même mois que... l'article en cours / la date de l'URL" {mois_relatif=0}
etc.

Et pour ceux qui veulent essayer lemois_relatif ( merci Fil) :

<BOUCLE_articlem(ARTICLES){par date}{inverse} >
<BOUCLE_premierdumois(ARTICLES){id_article}{doublons}>
<BR><UL><b> [(#DATE|nom_mois|majuscules)] [(#DATE|annee)] </b>
    <li><a href="#URL_ARTICLE">[(#TITRE|couper{50})]</a> - [(#DATE|jour)]/[(#DATE|mois)]</li>
</BOUCLE_premierdumois>
    <BOUCLE_MOIS(ARTICLES) {mois_relatif=0}{doublons}{par date}{inverse} >
        <li class="plan-article"><a href="#URL_ARTICLE">[(#TITRE|couper{50})]</a> - [(#DATE|jour)]/[(#DATE|mois)]</li>
    </BOUCLE_MOIS> </ul>
</BOUCLE_articlem>

http://www.uzine.net/spip_contrib/plan.php3

A+
Ben.