Static et articles en page d'accueil

danielsandanielsan Member
octobre 2022 modifié dans Entraide

Bonjour à vous,

je souhaite mettre en page d'accueil un texte d'intro (page static) éditable en back office puis la liste des derniers articles.
Un mélange de template static et home en quelque sorte, quelle approche avoir ?

  • créer un template 'static-home' et y inclure la boucle lastArtList (mais limité car on ne peut obtenir toutes les infos des articles, ou le chapo se fait couper ... et inclure la boucle while($plxShow->plxMotor->plxRecord_arts->loop()) fait tout planter )
  • créer un template home.php et y inclure la page static définie comme page d'accueil mais quand on fait cela en indiquant qu'une page static est l'accueil ça utilise la template static

ps : j'ai trouvé ce sujet https://forum.pluxml.org/discussion/comment/62085 mais n'ai pas tout compris ...

Je suis un peu perdu et ça fait trèèèèèèèès longtemps que je n'ai pas mis les mains dans le code.
(oui, i'm back with pluxml pour quelques webprojet ;) )

Merci, bien à vous

Mots clés:

Réponses

  • kowalskykowalsky Member
    octobre 2022 modifié

    Salut @danielsan,

    le plus simple à mon avis sera de :
    1. créer un template "static-home" (en dupliquant le template existant static.php) et y incorporer la boucle des articles avec les réglages qui te conviennent après la ligne 22 ( ou en ligne 24 en l’incluant dans une <div></div> pour ne pas toucher au code du contenu)
    2. créer une nouvelle page statique (que tu peux nommer "accueil" ou "home", ou autre...) à laquelle tu appliqueras le template "static-home" en laissant le contenu vide.
    3. définir cette nouvelle page statique en tant que "page d'accueil" et enregistrer via le bouton "modifier la liste des pages statiques".
    4. vérifier que tout fonctionne
    5. éditer cette nouvelle page statique pour ajouter ton texte d'intro dans le champ "contenu".

  • bazooka07bazooka07 PluXml Lead Developer, Moderator
    octobre 2022 modifié

    Bonsoir,

    @kowalsky,
    Avec ta méthode, comment gères-tu la pagination quand les articles s'affichent sur plusieurs pages ?

    @danielsan,
    C'est rarement utilisé mais PluXml peut gérer plusieurs templates pour la page d'accueil. Seule contrainte : le nom de chaque template doit contenir "home" dans le thème ( voir tableau $aTemplates dans core/admin/parametres_affichage.php à partir dans de la ligne n°32 pour PluXml ).
    Donc dans le thème, cloner le template home.php avec un nom contenant home et avant la boucle des articles utiliser la fonction $plxShow->staticInclude() dans un div :

    <?php
    # fichier home-1.php
    const STATIC_ID =  1; # voir plxShow::staticInclude() dans core/lib/class.plx.show.php
    include 'header.php';
    ?>
        <main class="main">
            <div class="container">
                <div class="grid">
                    <div class="content col sml-12 med-9">
                                           <div class="static-home">
    <?php
    # on inclut le contenu d'une page statique _active_
    $plxShow->staticInclude(STATIC_ID);
    ?>
                                           </div>
                                           <div>
    <?php while($plxShow->plxMotor->plxRecord_arts->loop()): ?>
                                            <article class="article" id="post-<?php echo $plxShow->artId(); ?>">
                                                # on affiche chaque article .....
                         </article>
    <?php endwhile; ?>
                        <nav class="pagination text-center">
                            <?php $plxShow->pagination(); ?>
                        </nav>
                        <?php $plxShow->artFeed('rss',$plxShow->catId(), '<span><a href="#feedUrl" title="#feedTitle">#feedName</a></span>'); ?>
                    </div>
    <?php 'sidebar.php'; ?>
                </div>
            </div>
        </main>
    <?php
    include  'footer.php';
    
    

    STATIC_ID est le numéro ou le titre de la page statique. Elle doit être active. Eviter de l'afficher dans le menu.
    Ensuite dans le back-office sélectionner le nouveau template de la page d'accueil dans "Options d'affichage"

  • Salut,
    Je ne sais pas si j'ai bien compris, mais ça à l'air d'un édito que tu veux en gros ?
    Perso, il y a quelques temps, j'avais utilisé ce plugin .
    Je ne sais pas si il fonctionne encore avec les dernières versions, mais tu peux tester ! ;)

  • @bazooka07
    c'est une erreur de sémantique de ma part, danielsan a utilisé le terme "boucle des articles" pour nommer deux actions différentes dans sa demande. J'ai repris ce terme en retour mais dans ma proposition, il ne s'agit que d'insérer la fonction "lastArtList" après le contenu éditable du template pour afficher "la liste des derniers articles" (et non la vraie fonction boucle).
    <?php $plxShow->lastArtList('<li><a href="#art_url" title="#art_title">#art_title</a></li>',10) ?>

    Ce qui donnerait :

    <?php include __DIR__.'/header.php'; ?>
        <main class="main">
            <div class="container">
                <div class="grid">
                    <div class="content col sml-12 med-9">
                        <article class="article static" id="static-page-<?php echo $plxShow->staticId(); ?>">
                            <header>
                                <h2>
                                    <?php $plxShow->staticTitle(); ?>
                                </h2>
                            </header>
                            <?php $plxShow->staticContent(); ?>
                        </article>
    
        <!-- on inclut la liste des 10 derniers articles -->
                        <div>
                            <ul>
                            <?php $plxShow->lastArtList('<li><a href="#art_url" title="#art_title">#art_title</a></li>',10) ?>
                            </ul>
                        </div>
    
                    </div>
                    <?php include __DIR__.'/sidebar.php'; ?>
                </div>
            </div>
        </main>
    <?php include __DIR__.'/footer.php'; ?>
    

    Dans ta proposition, c'est effectivement la vraie "boucle des articles" (au sens PluXml) qui est utilisée. :)
    <?php while($plxShow->plxMotor->plxRecord_arts->loop()): ?>

  • Bonjour et merci pour vos réponses.

    @bazooka07 en effet c'est bien cette approche que je visais ... à cela prêt que cela vise un numéro de page static et non la page définie comme page d'accueil =)
    (si un jour je souhaite changer de "block static", il faut que je garde la static 1 pour cela)
    J'imagine qu'avant d'afficher la page, le moteur regarde d'abord quoi faire : y-a-t-il une page static définie comme page d'accueil ou non ... donc cibler la page d'accueil comme ID à inclure ne fonctionnera pas ...

    Bon sinon j'ai collé simplement
    <?php $plxShow->staticInclude(1); ?>
    dans le template home.php et ça ne fonctionne pas :s
    La page static 1 est bien active et masquée dans le menu

    Je recreuse l'histoire après mon service ce soir ;)

  • bazooka07bazooka07 PluXml Lead Developer, Moderator

    @danielsan ,
    Il y a un bug dans plxShow::StaticInclude(). $plxGlob_stats doit être créé comme ceci :

    # On génère un nouvel objet plxGlob
            $plxGlob_stats = plxGlob::getInstance(PLX_ROOT . $this->plxMotor->aConf['racine_statiques'], false, true, 'statiques');
    

    On peut aussi corriger les expressions régulières qui ne sont pas correctes. Elles marchent par chance.
    Voici tout le détail de plxShow::staticInclude() :

        public function staticInclude($id)
        {
    
            # Hook Plugins
            if (eval($this->plxMotor->plxPlugins->callHook('plxShowStaticInclude'))) {
               return;
            }
            # On génère un nouvel objet plxGlob
            $plxGlob_stats = plxGlob::getInstance(PLX_ROOT . $this->plxMotor->aConf['racine_statiques'], false, true, 'statiques');
            if (is_numeric($id)) {
                # inclusion à partir de l'id de la page
                $regx = '#^' . str_pad($id, 3, '0', STR_PAD_LEFT) . '\.[\w-]+\.php$#';
            } else {
                # inclusion à partir du titre de la page
                $url = plxUtils::urlify($id);
                $regx = '#^\d{3}\.' . $url . '\.php$#';
            }
            if ($files = $plxGlob_stats->query($regx)) {
                # on récupère l'id de la page pour tester si elle est active
                if (
                    preg_match('#^(\d{3})\.[\w-]+\.php$#', $files[0], $matches) and
                    $this->plxMotor->aStats[$matches[1]]['active']
                ) {
                    include PLX_ROOT . $this->plxMotor->aConf['racine_statiques'] . $files[0];
                }
            }
        }
    

    Dans PluXml, il y a 2 façons de choisir la page d'accueil :

    • dans "paramètres d'affichage", choisir un template contenant "home" dans son nom de fichier
    • dans "pages statiques", cocher une case dans la colonne "page d'accueil"

    Je vais envoyer un PR sur github pour corriger ce bug.

  • j'ai fait la modif, ça fonctionne maintenant =)
    merci !
    j'ai bien fait de poser la question alors ;)

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