Affichage de la date et tri des articles suivant la date de mise à jour

cpalocpalo Member
18 févr. modifié dans Discussions générales

Bonjour,
Cette question a déjà été abordée et cela avait pu être possible dans une ancienne version.
Si on regarde le fichier xml d'un article, on a:

<date_creation><![CDATA[202102191118]]></date_creation>
<date_update><![CDATA[202201221148]]></date_update>

Dans le template home.php on a :

<span class="art-date"> <time datetime="<?php $plxShow->artDate('#num_year(4)-#num_month-#num_day'); ?>"> <?php $plxShow->artDate('#num_day #month #num_year(4)'); ?> </time> </span>

Mais dans la documentation de cette fonction, on n'a pas la possibilité d'afficher la date de la mise à jour.
Est-ce possible de le faire autrement.
Et encore mieux, mais déjà afficher la date de mise à jour ce serait bien, faire le tri d'abord sur la mise à jour.
Merci

Réponses

  • erxyzerxyz Member

    Bonjour,

    Tu peux afficher la date de mise à jour avec un shéma identique en remplaçant juste artDate par artUpdateDate.

  • bazooka07bazooka07 Moderator

    Bonjour,
    On peut y arriver avec la fonction $plxShow->plxMotor->plxRecord_arts->f() :

    $format ='#day #num_day #month #num_year(4)';
    foreach(array('date', 'date_creation', 'date_update') as $dt) {
      echo $dt . ' : ' . plxDate::formatDate($plxShow->plxMotor->plxRecord_arts->f($dt), $format) . PHP_EOL;
    }
    

    la valeur "date" correspond à la date de publication.

    On pourrait ajouter à la fonction $plxShow->artDate() un paramètre optionnel pour choisir une des 3 dates.

    Mais il manque surtout une fonction plxShow::artValue('champ_article_courant') pour récupérer n'importe quelle valeur de la fiche article courant sans appeler toute la chaîne $plxShow->plxMotor->plxRecord_arts->f(...).

  • cpalocpalo Member

    Du coup je me remets un peu plus dans le php après le css.
    Ce qui me paraitrait judicieux, c'est que la date de mise à jour n'apparait que si il y a eu une mise à jour, et donc qu'elle soit différente de la date de publication.
    Et je pensais à un code du genre:

    <?php
    $date = $plxShow->artDate();
    $update = $plxShow->artUpdateDate();
         if ($date == $update) {
            echo "
            <span class="art-date">
                <time datetime="<?php $plxShow->artDate('#num_year(4)-#num_month-#num_day'); ?>">
                    Publié le <?php $plxShow->artDate('#num_day #month #num_year(4)'); ?>
                </time>
            </span>
        ";
        }
        else {
            echo "
            <span class="art-date">
                <time datetime="<?php $plxShow->artDate('#num_year(4)-#num_month-#num_day'); ?>">
                    Publié le <?php $plxShow->artDate('#num_day #month #num_year(4)'); ?>
                    Mis à jour le <?php $plxShow->artUpdateDate('#num_day #month #num_year(4)'); ?>
                </time>
            </span>
        ";
        }
    ?>
    
  • bazooka07bazooka07 Moderator

    La coloration syntaxique marche mal car il y des conflits entre tous les guillements.
    Pour en ajouter encore plus, artDate() et artUpdateDate() affichent directement le résultat.
    Faisons simple, cela évitera des erreurs :

    <?php
    const FORMAT_DATE = '#num_day #month #num_year(4)';
    ob_start();
    $plxShow->artDate(FORMAT_DATE);
    $dt = ob_get_clean();
    ?>
    <span class="art-date">
        <time datetime="<?php $plxShow->artDate('#num_year(4)-#num_month-#num_day'); ?>">
             Publié le <?= $dt  ?>
         </time>
    <?php
    ob_start();
    $plxShow->artUpdateDate(FORMAT_DATE);
    $updt = ob_get_clean();
    if ($dt != $updt) {
    ?>
        <time>Mis à jour le <?= $updt ?></time>
    <?php
    }
    ?>    
    </span>
    

    les variables $dt et $updt permettent de limiter les appels aux fonctions. Cela gagne quelques micro-secondes.
    Quand une fonction de PluXml affiche directement sans possibilité de récupérer le résultat, il faut utiliser le couple diabolique ob_start() et ob_get_clean().
    AMHA, les fonctions $plxShow->artDate() et $plxShow->artUpdateDate() font un peu doublon. En plus, elles n'utilisent pas le même format.
    Pour plus de souplesse, il faudrait écrire la fonction plxShow::artDate() comme ceci :

    public function artDate($format = '#day #num_day #month #num_year(4)', $name='date') {
       $dt  = $this->plxMotor->plxRecord_arts->f($name);
       echo preg_match('#^\d{12}$#') ? plxDate::formatDate($dt) : $dt;
    }
    

    Le code PHP est plus robuste. On peut ajouter d'autres types de date dans les versions ultérieures de PluXml.
    Il y a un tour de passe-passe pour afficher n'importe valeur de l'article en cours.

  • erxyzerxyz Member

    Ce qui fonctionne chez moi : (mais peut-être qu'il y a un piège ?)

    <?php 
        $create = $plxShow->plxMotor->plxRecord_arts->f('date_creation');
        $update = $plxShow->plxMotor->plxRecord_arts->f('date_update');
        if($create == $update) : 
    ?>
    <p>affichage seulement date publication</p>
    <?php else : ?>
    <p>affichage date publication + date mise à jour</p>
    <?php endif; ?>
    
  • cpalocpalo Member

    @erxyz
    Effectivement cela fonctionne également chez moi.
    Je vais essayer d'améliorer en tenant compte de ce qu'a écrit bazooka07

Connectez-vous ou Inscrivez-vous pour répondre.