Liste des articles par catégorie dans une page statique

StéphaneStéphane Member, Former PluXml Project Manager
Bonjour à tous

Je viens de rajouter sur le wiki, le code nécessaire pour obtenir la liste de tous les articles de votre pluxml dans une page statique.

Vous trouvez les infos à cette adresse:

http://wiki.pluxml.org/?page=Lister%20tous%20les%20articles%20par%20cat%C3%A9gorie%20dans%20une%20page%20statique

Stéphane

Consultant PluXml

Ancien responsable et développeur de PluXml (2010 à 2018)

Réponses

  • HamtaroHamtaro Member
    août 2009 modifié
    Un peu long à l'affichage à cause de mon nombre d'articles :p

    http://www.customtaro.fr/blog/?static5/articles

    Merci tout de même :)

    Edit : par contre, ça se classe comment les articles ??? Ordre aléatoire ??
    Et il faut que tu enlèves un "n" après l'ouverture balise ul :)
  • StéphaneStéphane Member, Former PluXml Project Manager
    Hamtaro a écrit:
    Un peu long à l'affichage à cause de mon nombre d'articles :p
    Oui, là si on veut tout afficher, on ne peut pas éviter cette contrainte
    Hamtaro a écrit:
    Edit : par contre, ça se classe comment les articles ??? Ordre aléatoire ??
    par ordre des catégories, mais effectivement il faudrait après un tri par date pour chaque catégorie pour que ce soit un peu plus organisé.

    Je me penche sur cette amélioration...
    Hamtaro a écrit:
    Et il faut que tu enlèves un "n" après l'ouverture balise ul :)
    C'est corrigé, merci
    (c'est le wiki qui transforme \n en n)

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • StéphaneStéphane Member, Former PluXml Project Manager
    MISE A JOUR

    je viens de mettre à jour le code pour avoir un tri par catégorie/date décroissante

    http://wiki.pluxml.org/?page=Lister%20tous%20les%20articles%20par%20cat%C3%A9gorie%20dans%20une%20page%20statique

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • StéphaneStéphane Member, Former PluXml Project Manager
    Hamtaro

    ce code est spécialement pour toi. Peux-tu faire un test stp vu le très grand nombre d'articles sur ton blog.
    <?php
    if(!defined('PLX_ROOT')) exit;
    
    global $plxShow;
    
    $plxGlob_arts = & new plxGlob(PLX_ROOT.$plxShow->plxMotor->aConf['racine_articles']);
    $aFiles = $plxGlob_arts->query('/[0-9]{4}.([0-9]{3}).[0-9]{12}.[a-z0-9-]+.xml$/','sitemap','rsort');
    # On parse les fichiers
    if(is_array($aFiles)) { # On a des fichiers
    
        $ref_date = $plxShow->plxMotor->artInfoFromFilename($aFiles[0], 'artDate');
        $sitemap = PLX_ROOT.$plxShow->plxMotor->aConf['racine_articles'].'sitemap.php';
       
        if (@file_exists($sitemap) AND (strcmp($ref_date, date("YmdHi",filemtime($sitemap))) <= 0)) {
            include($sitemap);
        }
        else {
            ob_start();
            while(list($k,$v) = each($aFiles)) { # On parcourt tous les fichiers
                $temp = $plxShow->plxMotor->parseArticle(PLX_ROOT.$plxShow->plxMotor->aConf['racine_articles'].$v);
                $plx_arts[$temp['categorie']][] = $temp;
            }
            if($plx_arts) { # On a des articles
                ksort($plx_arts);
                # On boucle sur nos articles
                foreach ($plx_arts as $k => $v) {
            
                    usort($v, create_function('$a, $b', 'return strcmp($b["date"], $a["date"]);'));
                
                    $cat_num = $k;
                    $cat_name = htmlspecialchars($plxShow->plxMotor->aCats[ $cat_num ]['name'],ENT_QUOTES,PLX_CHARSET);
                    $cat_url = $plxShow->plxMotor->aCats[ $cat_num ]['url'];
            
                    echo '<h2><a href="'.$plxShow->plxMotor->aConf['racine'].'?categorie'.$cat_num.'/'.$cat_url.'">'.$cat_name.'</a></h2>';
            
                    echo "<ul>";
                    # On boucle sur les articles de la categories
                    while(list($null, $art) = each($v)) {
            
                        $art_num = intval($art['numero']);
                        $art_url = htmlspecialchars($art['url'],ENT_QUOTES,PLX_CHARSET);
                        $art_title = htmlspecialchars($art['title'],ENT_QUOTES,PLX_CHARSET);
                        $art_date = substr($art['date'], 8, 2).'/'.substr($art['date'], 5, 2).'/'.substr($art['date'], 0, 4);
                        echo '<li>'.$art_date.': <a href="'.$plxShow->plxMotor->aConf['racine'].'?article'.$art_num.'/'.$art_url.'">'.$art_title.'</a></li>'; 
                    }
                    echo "</ul>";
                }
            }
            $content = ob_get_clean();
            if (plxUtils::write("<?php if(!defined('PLX_ROOT')) exit; ?>".$content, $sitemap))
    			echo $content;
    		else
    			echo "Erreur pendant la création du fichier cache.";
            
        }
    }
    ?>
    
    Ce qui diffère avec la version du wiki c'est que la liste des articles est sauvegardée dans un fichier texte, mis à jour automatiquement à chaque fois que tu vas lire la page statique et qu'un nouvel article a été publié.

    Le 1er affichage de la page statique sera donc toujours aussi long, mais lors du 2ieme affichage cela sera très rapide car la liste des articles n'est pas recalculée, c'est la liste sauvegardée qui est affichée à la place. En fait c'est chaque nouvel affichage qui sera long après publication d'un nouvel article car il faut reconstruire la liste des articles

    le fichier cache est sauvegardé dans le répertoire des articles /data/articles sous le nom sitemap.txt
    je ne savais pas trop où le mettre. si l'endroit ne convient tu peux le changer dans le code

    ps: attention si tu viens à supprimer un ancien article, il sera toujours en cache, tant que tu ne publieras pas un nouvel article (reconstruction de la liste) et que tu n'iras pas lire la page statique

    ps: la liste des articles est reconstruite si besoin, seulement quand on va lire la page statique et non pas quand on publie un nouvel article.

    EDIT: j'ai renommé le fichier sitemap.txt en sitemap.php pour qu'il soit interprété en tant que fichier php pour prendre en compte la ligne de code php au début du fichier pour le sécuriser et éviter ainsi une faille de sécurité de type full path disclosure

    EDIT 21/08/09 : Correction bug: cache non affiché si date/heure de création du dernier article = date/heure du fichier en cache

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • HamtaroHamtaro Member
    août 2009 modifié
    Yep affichage rapide :)

    J'avais une erreur php au premier lancement :
    Warning: filemtime() [function.filemtime]: stat failed for ./data/articles/sitemap.php in /homez.65/customta/www/blog/data/statiques/005.articles.php on line 14
    200809211149 <= 197001010100
    
    Ensuite, ça laisse la place à juste ça :
    200809211149 <= 200908181902
    
    Et l'affichage classique. ;)
  • StéphaneStéphane Member, Former PluXml Project Manager
    En effet j'ai oublié d'enlever une ligne de debuggage
    echo $ref_date." <= ".date("YmdHi",filemtime($sitemap));
    
    ligne à supprimer donc pour éviter l'affichage de
    200809211149 <= 200908181902
    
    j'ai corrigé le code

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • Superbe !

    Merci Stéphane, ça marche impecc. ;)

    Reste juste à vérifier l'actualisation quand je ferais un article, je te tiens au courant.
  • Je viens d'écrire un article mais toujours pas de maj du fichier cache...

    Ya une heure de programmée ? :p
  • StéphaneStéphane Member, Former PluXml Project Manager
    Hamtaro a écrit:
    Je viens d'écrire un article mais toujours pas de maj du fichier cache...

    Ya une heure de programmée ? :p
    Non il suffit d'aller sur la page qui liste tous tes articles pour quelle soit mise à jour. La 1ere fois ça sera long car ça recalcule tout, mais après ce sera rapide. Et ce sera comme ça à chaque fois que tu publieras un nouvel article

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • Bon bin j'ai une mauvaise nouvelle pour toi alors...

    Cela ne s'actualise pas... :(
  • StéphaneStéphane Member, Former PluXml Project Manager
    Salut Hamtaro

    Je viens de mettre à jour le code dans le post ici

    J'espère que le bug trouvé corrigera ton problème

    bug: cache non affiché si date/heure-minute de création du dernier article = date/heure-minute du fichier en cache

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • Faut-il que j'efface le fichier cache ou cela va se faire tout seul en modifiant la page statique et en actualisant la page ?

    Parce que si c'est le cas, ça ne marche pas... :p

    J'afface le fichier cache sur mon ftp et à la prochaine rédaction, je te tiens au courant. ;)
  • StéphaneStéphane Member, Former PluXml Project Manager
    MISE A JOUR

    Je viens de mettre à jour le code sur le wiki afin de prendre en compte les articles affectés à plusieurs catégories. Donc si vous utilisez ce script dans une de vos pages statiques et que vous êtes avec pluxml 5.0, vous pouvez (devez) mettre à jour votre page.

    Lister les articles par catégories dans une page statique

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • grenouillegrenouille Member
    juillet 2010 modifié
    bonjour

    g un petit souci

    article1 dans cat1 et cat4 (cat1 : 001 et cat4 :004)
    article2 dans cat1 et cat5 (cat5 :005)
    article3 dans cat1 et cat4

    en param g $catlist='001|002|003' et $artsbycategory = 2

    résultat : pas d'affichage (pas de liste du tout, meme pas les <li>...)

    g essaye avec $artsbycategory = 0 => idem
    puis avec $catlist='001' => idem

    bug pluxml ou bug chez moi ?
  • StéphaneStéphane Member, Former PluXml Project Manager
    Non c'est le script qui bug. C'est ma faute j'ai oublié de tester quand on selectionne des catégories.
    Je viens de mettre à jour le script du wiki.
    Peux-tu faire un test maintenant avec celle nouvelle version stp ?
    Merci

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • ça marche nickel
    merçi stéphane
    ps : chapo pour la v5
  • re bonjour

    j'ai remarqué autre chose (sans doute un oubli)

    => l'url rewrite,

    donc pensez à modifier vos echo
  • StéphaneStéphane Member, Former PluXml Project Manager
    Rockmount a écrit:
    Bonjour ! :)

    Tout d'abord je félicité toute l'équipe pour son super travail sur cette nouvelle version ! Bravo !
    Avec la sortie de la dernière version de Pluxml, dont les nouveautés sont d'ailleurs très intéressantes, j'ai recommencé à toucher à tout, et un de mes anciens projets a revu le jour.
    Enfin, bref, ce que j'aimerais savoir c'est s'il existe un moyen simple d'afficher tous les articles sur une page statique, par catégorie, non pas selon l'ordre de publication, mais selon l'ordre alphabétique. J'ai essayé de comprendre le code et de m'inspirer de quelques manipulations fournies ici-même, mais je n'ai pas eu de résultat. J'espère que vous saurez m'aider, ou en tout cas me répondre.

    Bien cordialement,
    Rockmount.
    En adaptant le code du wiki, ça devrait être possible et facilement réalisable. Suffit de remplacer le tri par date, par un tri sur le titre des articles

    http://wiki.pluxml.org/?page=lister_les_articles_par_categories_dans_une_page_statique

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • quasiment la même chose, mais actualisée il me semble ...
    http://forum.pluxml.org/viewtopic.php?id=1843
    :-)
Connectez-vous ou Inscrivez-vous pour répondre.