Afficher ou styliser le dernier article écrit uniquement

TrollTroll Member
janvier 2023 modifié dans Entraide

Bonjour, je suis un nouvel utilisateur de PluXml, j'aime beaucoup la simplicité de ce CMS.
J'essaye de créer un thème personnalisé mais je rencontre quelques difficultés. Je me débrouille assez bien avec le HTML et le CSS mais pas du tout en PHP, hors j'essaye de modifier l'affichage de la page d’accueil et je ne sais pas comment m'y prendre.
J'ai regardé la documentation mais je n'ai pas trouvé ce dont j'avais besoin, je vous explique:

J'aimerais distinguer sur la page d'accueil (home.php) le dernier article écrit des autres. Pour ce faire, je pourrais éventuellement le faire en .css avec l'attribut :first-of-type . Oui mais le problème c'est que cela modifierai également le premier article sur la seconde page, ainsi que l'affichage de l'article sur la page dédiée a l'article seul.

Pour éviter ces problèmes, je cherchais une fonction plxShow qui me permettrait d’afficher uniquement le dernier article, et du coup une boucle pour afficher tous les autres articles sans le premier (pour ne pas l'afficher a double sur la homepage).
De cette manière, lorsque j'arrive sur la page d'accueil (home.php) je verrais le dernier article mis en valeur par rapport aux autres.

Je ne sais pas si je me suis bien fait comprendre ^^, est-ce que c'est facilement faisable avec les fonctions plxShow ?

Mots clés:

Réponses

  • bazooka07bazooka07 PluXml Lead Developer, Moderator
    janvier 2023 modifié

    Bonsoir,
    $plxShow ne fait qu'afficher les articles dans une liste ou un seul article selon le mode
    La liste d'articles à afficher est créer par la fonction getArticles() de $plxMotor. Il te faut modifier la valeur de $start selon la page à afficher et également remplacer le paramètre $this->byPage quand la fonction $this->plxGlob_arts->query() selon le numéro de la page.
    Par contre,comme le nombre d'articles est différent sur la page n°1, le nombre de pages calculés dans $plxShow::navigation() va être faux. C'est un peu plus compliqué à calculer, il va falloir faire quelques essais. Au pire, il y aura un message sur la dernière pour dire que "la page demandée n'existe pas".
    C'est plus une logique de raisonnement qu'un lanage PHP à maitriser

    Et quand les articles sont affichés par catégorie ou par tag, tu vois les choses comment ?

  • Wow, je m'attendais pas a une réponse si rapide :)

    Merci pour vos explications, je crois comprendre dans les grandes lignes. Pour dire la vérité ça me semble un peu hors de portée pour mes maigres connaissances, mais je vais tout de même essayer de fouiller dans les répertoires de PluXml pour essayer de trouver quel fichiers modifier.

    En ce qui concerne les pages catégorie ou par tag je n'ai pas besoin de la mise en avant du dernier article, je pensais simplement les lister indistinctement.

  • bazooka07bazooka07 PluXml Lead Developer, Moderator

    fichier core/lib/class.plx.motor.php :
    On se limite aux modes "home" et "categorie"

        public function getArticles($publi='before') {
    
            # On calcule la valeur start
            if(in_array($this->mode,['home', 'categorie'])) {
                $count0 = 1 ; # Nb articles en première page
                if($this->page > 1) {
                    $start = $count0 + $this->bypage*($this->page-2);
                    $count = $this->bypage;
                } else {
                    # première page
                    $start = 0;
                    $count = $count0;
                }
            } else {
                $start = $this->bypage*($this->page-1);
                $count = $this->bypage;
            }
            # On recupere nos fichiers (tries) selon le motif, la pagination, la date de publication
            if($aFiles = $this->plxGlob_arts->query($this->motif,'art',$this->tri,$start,$count,$publi)) {
                # On analyse tous les fichiers
                $artsList = array();
                foreach($aFiles as $v) {
                    $art = $this->parseArticle(PLX_ROOT . $this->aConf['racine_articles'] . $v);
                    if(!empty($art)) {
                        $artsList[] = $art;
                    }
                }
                # On stocke les enregistrements dans un objet plxRecord
                $this->plxRecord_arts = new plxRecord($artsList);
                return true;
            }
    
            $this->plxRecord_arts = false;
            return false;
        }
    

    Note que tu peux jouer sur le nombre d'articles affichés en première page en modifiant la valeur $count0.

    Il faut aussi modifier la fonction plxShow::pagination() sinon les derniers articles ne seront pas visibles.

  • bazooka07bazooka07 PluXml Lead Developer, Moderator

    Et pour la fonction navigation, il y a quelques modifications mineures à faire :

    #On déclare à nouveau $count0
    $count0 = 1; # même valeur que dans plxMotor::getArticles()
    # .....
    # on modifie le test de sizeof($aFiles)
    if ($aFiles and $this->plxMotor->bypage and sizeof($aFiles) > $count0) {
      # ....
      # on ajuste $lastPage selon $count0 :
      $last_page = ceil((sizeof($aFiles) - $count0) / $this->plxMotor->bypage) + 1;
      # inchangé pour le reste de la fonction
    }
    
    

    Je vais regarder pour mettre cela dans la prochaine version de PluXml. Cela peut intéresser d'autres gens.

  • Merci beaucoup @bazooka07 , j'apprécie beaucoup votre aide. C'est très gentil mais c'est vraiment au-dessus de mes capacités, et je ne veux pas vous embêter plus pour rien.

    Je pensais nativement que ca allait être plus simple a modifier, qu'il y aurait peut-être une fonction "plxShow lastAricle()" que j'aurais pu ajouter dans ma home.php et ainsi pouvoir le styliser facilement.
    Voir peut-être un paramètre a modifier dans la boucle d'affichage des articles, mais je m’aperçois que c'est plus compliqué que ca (en tout cas pour moi qui n'y comprends rien en php et en programmation en général ^^).

    En tout cas si ca peut déboucher sur une nouvelle fonctionnalité et enrichir ce chouette projet, mon intervention n'aura pas servi a rien au moins ;)

    Mille mercis

  • salut @Troll

    sinon une solution simple sera de paramétrer PluXml pour n'afficher qu'un seul article sur la page home (si derrière cela ne te gêne pas que les pages suivantes n'affichent aussi qu'un article)

    Administration > Paramètres > Options d'affichage :
    Template de la page d'accueil : home.php
    Nombre d'articles affichés par page : 1
    Nombre d'articles affichés par page dans les archives : x

  • Bonjour @kowalsky ,
    Merci pour la proposition, je comprends l'astuce ^^ malheureusement ce serait un peu trop contraignant pour le visiteur s'il se retrouve avec un seul article par page :)

    Mon but était vraiment de pouvoir mettre en avant le dernier article de blog sur la page d’accueil.
    Voir cette rapide maquette :

    https://imgur.com/Ki5TZfI

  • bazooka07bazooka07 PluXml Lead Developer, Moderator

    Les 3 petits rectangles en bas vont contenir des articles ?

    Cela ressemble au thème Masonic :
    https://kazimentou.alwaysdata.net/pluxml/index.php?categorie1/pluxml
    Dans le sidebar à droite, sélectionner le thème kzMasonic dans la liste déroulante.

  • TrollTroll Member
    janvier 2023 modifié

    @bazooka07 , oui, effectivement les 3 petits rectangles seraient également des articles.

    J'ai jeté un œil au theme kzMasonic, c'est a peu près ce que je cherche a faire sauf qu'ici apparemment c'est stylisé via css. C'est a peu près ce que j'ai fait jusqu'ici, j'ai utilisé la propriété css (:first-of-type) pour styliser le premier article de la page home.php de manière différente.
    Mais comme je l'indiquais dans mon premier message, le problème est que lorsque l'on passe a la page 2 du site, le premier article est de nouveau mis en avant, puisque le css s'applique également a la page 2 etc... Hors j'aimerais éviter cela justement.

    Voir maquette :
    https://imgur.com/AxhyZVr

    Une autre idée serait d'avoir une option dans l'interface d'administration pour sélectionner n'importe-quel article ou peut-être même page statique pour qu'il soit mis en avant sur la page d’accueil (avant les autres), ce pourrait être super également et j'imagine pratique dans pas mal de cas.

    Edit: je pensais aussi a une autre solution,ce serait d'ajouter la classe .css #lastArticle uniquement au dernier article écrit. Cette classe pourrait être utilisée par ceux qui veulent styliser facilement le dernier article sur la home.php uniquement. Mais je ne sais pas si c'est techniquement faisable, car lorsque l'on écrit un nouvel article il faudrait enlever cette classe de l'ancien... ^^
    Désolé si je dis des bêtises, encore une fois je ne suis pas développeur, c'était juste des idées jetées en l'air, je me rends pas forcément compte du travail nécessaire derrière tout ça.

  • bazooka07bazooka07 PluXml Lead Developer, Moderator

    Le thème kzMasonic convient bien pour ce que tu veux faire.
    Voir démo
    Télécharger PluXml modifié (archive : pluxml-5.8.9-troll.zip) :
    https://kazimentou.fr/static8/download
    Thème kzMasonic :
    https://kazimentou.fr/repo/index.php?theme=kzMasonic&download
    Dans PluXml, il faut régler "Nombre d'articles affichés par page" à 9 dans les "options d'affichage".

  • TrollTroll Member
    janvier 2023 modifié

    Omg, merci beaucoup mais comment tu t'y est pris ?
    En modifiant les fichiers /core/lib mentionnés plus haut ?

    Edit: je viens d'essayer en local avec Xampp, j'ai installé l'archive PluXml modifiée (pluxml-5.8.9-troll.zip) et le thème kzMasonic , j'ai modifié le nombre d'articles par page a "9", mais bizarrement chez moi le premier article n'est pas différent des autres, pas comme sur ta démo.

    Je ne sais pas ce que j'ai fait de faux.

  • bazooka07bazooka07 PluXml Lead Developer, Moderator

    Il faudrait au moins 4+9=13 articles pour voir la .démo correctement.
    J'ai mis un jeu de données datas.zip à cette adresse :
    https://kazimentou.fr/static8/download
    Attention cette archive contient un fichier data/configuration/parametres.xml qui contient le mot de passe crypté pour l'administrateur. Il fau

  • Je viens d'ajouter pleins d'articles, effectivement ça fonctionne correctement maintenant.
    Je vous remercie beaucoup pour votre aide @bazooka07

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