Ajout d'une liste d'articles aléatoires

MordredMordred Member
décembre 2011 modifié dans Modifications
Hello, utilisateurs de Pluxml !


Le menu de Pluxml (Celui affiché à la droite des articles) est assez dépouillé par défaut (Certains diront que c'est une qualité, d'autre non !), je me suis demandé "Qu'est-ce que je pourrais ajouter pour le rendre un peu plus fournis ?" Et j'ai eu l'idée d'ajouter une liste "Articles au hasard", qui sélectionne 5 ou 6 articles au hasard et les affiche. Si cela vous intéresse, j'explique ici la mise en place de cette liste


Nous allons tout d'abord récupérer le fichier "sidebar.php" présent dans le dossier du thème que vous utilisez avec Pluxml : Le cas échéant, mon fichier "sidebar.php" est situé à cet endroit : geekiroxx.free.fr/weblog/themes/theme-dark-blue/sidebar.php



Récupérez le, ouvrez le avec votre éditeur de code favoris, puis ajoutez ceci à l'endroit souhaité, le cas échéant je l'ai placé en dessous du menu "Syndication" :

<div>
    <h2>Divers articles</h2>
    <ul>
    <?php
      /* 
      ** Script permettant d'afficher une liste d'articles aléatoires
      ** To do : Corriger l'erreur possible lors du load des fichier XML 
      ** (Erreur possible, ne pas supprimer le @ devant la ligne svp )
      ** Have fun, Mordred. Pluxmlement votre.
      */
      $nbArticles     = count($plxShow->plxMotor->plxGlob_arts->aFiles);
      $idArticle      = array();
      $randomArticle  = array();
      $xmlFile        = array();
      $articleName    = array();

      for($i = 0; $i <= $nbArticles; $i++)  {
        if($i < 10)  
          $idArticle[$i] = $plxShow->plxMotor->plxGlob_arts->aFiles['000'.$i];
        else if($i >= 10)
          $idArticle[$i] = $plxShow->plxMotor->plxGlob_arts->aFiles['00'.$i];
        else if($i >= 100)
          $idArticle[$i] = $plxShow->plxMotor->plxGlob_arts->aFiles['0'.$i];
        else if($i >= 1000)
          $idArticle[$i] = $plxShow->plxMotor->plxGlob_arts->aFiles[$i];
      }
      for($i = 0; $i <= 5; $i++)  {
        $xmlFile[$i] = new DomDocument();
        // To do : Vérifier que le nombre aléatoire est différent du précédent
        while($randomArticle[$i] == $randomArticle[$i-1] OR $randomArticle[$i] == $randomArticle[$i-2] 
             OR $randomArticle[$i] == $randomArticle[$i-3] OR $randomArticle[$i] == $randomArticle[$i-4])  {
          $randomArticle[$i] = mt_rand(1, $nbArticles);
        }
        if(@$xmlFile[$i]->load(PLX_ROOT."/data/articles/".$idArticle[$randomArticle[$i]]))  {
          $articleName[$i] = $xmlFile[$i]->getElementsByTagName('title')->item(0)->firstChild->nodeValue;
          echo '<li style="margin-left:-5px;"><a href="?article'.$idArticle[$randomArticle[$i]].'">'.$articleName[$i].'</a></li>';
        }
      }
    ?>
    </ul>
</div>


Soyez sûr de l'avoir placé au bon endroit, modifiez si besoin la ligne "echo" afin de personnaliser votre affichage (Le cas échéant j'ai utilisé des listes HTML pour afficher les liens, mais vous pouvez parfaitement modifier cela à votre guise)


Faîtes également attention à ne pas le placer dans un "div", mais bien en dessous de la fermeture du div précédent. J'ai placé un margin-left dans la liste, afin d'adapter au mieux les liens sur mon thème, si cela vous est inutile vous pouvez bien entendu le retirer.


Réuploadez ce fichier en écrasant le précédent, et voilà !


Article original, la mise en page est un peu mieux.


Have fun !

Réponses

  • Bonsoir Mordred,

    Cool comme partage, si "unGourouduPlugin" te mixe tout ceci se serait sympa ;O)
    Je teste ta modif, merci encore @+ ;o)
  • MordredMordred Member
    décembre 2011 modifié
    Bonsoir,


    Oui pourquoi pas, pour ma part je vais essayer de me documenter sur la fabrication d'un petit plugin, j'avais envie de le faire déjà. Et pourquoi pas ne pas packager cette modif.

    Et de rien, si jamais ça peut rendre service, alors tant mieux !


    Have fun.
  • StéphaneStéphane Member, Former PluXml Project Manager
    bonjour

    Si l'idée est bien entendu très bonne, sa réalisation technique l'est moins.
    Il est inutile d'aller récupérer la liste des fichiers xml. elle est déjà stockées dans le singleton $plxMotor, variable $plxGlob_arts. Donc ça consomme de la cpu et mémoire pour rien.
    Si tu mets directement le code dans ta sidebar, essaye de partir de :
    $plxShow->plxMotor->plxGlob_arts
    

    tu peux faire un var_dump($plxShow->plxMotor->plxGlob_arts); pour voir le contenu de cette variable

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • MordredMordred Member
    décembre 2011 modifié
    Salut Stephane,


    Oui, à vrai dire j'ai cherché une alternative à la lecture du répertoire data, mais ne l'ayant pas trouvé je me suis résigné à parcourir ce dossier. Je vais modifier tout ça, je modifierais ça ce soir sûrement.


    Par contre, petit chipotage de quelqu'un qui programme qu'en orienté objet, est-ce normal de pouvoir accéder à cet attribut directement en ne passant pas par une méthode ? En pratique ça ne gêne pas j'imagine, mais un attribut public :( ...


    Mais comme je l'ai dis, je chipote !


    Have fun.

    Edit : Voilà, j'ai appliqué quelques modifications, n'hésitez pas à me dire ce que vous en pensez :) ! Désormais il n'est plus possible de retrouver plusieurs fois les mêmes articles, merci à Gloorian pour la correction.
  • Hello,
    Je re-déterre le sujet de 2011 étant intérréssé par intégrer le même genre de fonctionnalité à mon Pluxml tout remis à jour <3 .
    J'ai cherché sur le Wiki si "unGourouduPlugin" avait déjà craqué pour faire un tit plug là dessus, mais je n'ai pas trouvé.
    8o
  • HarukaHaruka PluXml Project Manager
    Bonjour,

    Il y a cette page qui peut-être t'aider : http://wiki.pluxml.org/index.php?page=Suggestion+de+lecture
Connectez-vous ou Inscrivez-vous pour répondre.