[RÉSOLU] Dans une catégorie, faire défiler tous les articles, même les articles "brouillon"

JoséJosé Member
13:24 modifié dans Entraide

Bonjour,
je cherche la modification à apporter pour obtenir le défilement de tous les articles d'une catégorie, même ceux qui sont classés en brouillon.
il me semble que je dois modifier un paramètre dans class.plx.motor.php, mais lequel ?

merci de votre aide
José

Réponses

  • Bonjour,

    La fonction : https://wiki.pluxml.org/docs/develop/plxshow.html#lastartlist devrait te permettre de choisir une catégorie.

    • $max donne le nombre d'article à afficher
    • $cat_id le numéro de catégorie
    • $format te permet d'injecter les infos et la structure HTML que tu veut afficher des articles.

    Pour ce qui est des brouillons, il sont accessible coté admin uniquement . Pourquoi et dans quelles circonstances as tu besoin de les intégrer à cette liste ?


    Cordialement,
    gcyrillus , simple membre du forum et utilisateur de PluXml

    Mon site PluXml: https://re7net.com | Plugins: https://ressources.pluxopolis.net/banque-plugins/index.php?all_versions | Thèmes: tester et télécharger @ https://pluxthemes.com
    Indiquez [RÉSOLU] dans le titre de votre question une fois le soucis réglé, Merci

  • JoséJosé Member

    Pour une même catégorie, des articles sont publiés , d'autres sont enregistrés en brouillon.
    côté public, les articles de la catégorie défilent avec la pagination, mais je voudrais aussi, côté public sous condition d'identification, faire défiler la totalité des articles.
    José

  • 22 févr. modifié

    Une base pourrait-être de redéfinir plxRecord_arts sans les filtres si tu as un utilisateur , au moins rédacteur, connecté pour inclure les brouillons :

    <?php 
        if(isset($_SESSION['profil']) && $_SESSION['profil'] < 3 ) {
            $aFiles =$plxShow->plxMotor->plxGlob_arts->aFiles;
            foreach($aFiles as $v) {
                $art = $plxShow->plxMotor->parseArticle(PLX_ROOT . $plxShow->plxMotor->aConf['racine_articles'] . $v);
                if(!empty($art)) {
                    $artsList[] = $art;
                }
            }
            $plxShow->plxMotor->plxRecord_arts = new plxRecord($artsList);
        }
    ?>
    

    à tester dans le thème avant :

    <?php while($plxShow->plxMotor->plxRecord_arts->loop()): ?>
    


    Cordialement,
    gcyrillus , simple membre du forum et utilisateur de PluXml

    Mon site PluXml: https://re7net.com | Plugins: https://ressources.pluxopolis.net/banque-plugins/index.php?all_versions | Thèmes: tester et télécharger @ https://pluxthemes.com
    Indiquez [RÉSOLU] dans le titre de votre question une fois le soucis réglé, Merci

  • JoséJosé Member

    Merci d'avoir pris du temps pour regarder cette question.

    j'applique le code pour le thème catégorie, mais cela ne fonctionne pas.
    je vais essayer une autre solution, peut-être un doublon de catégorie.

    José

  • bazooka07bazooka07 PluXml Lead Developer, Moderator
    09:41 modifié

    Bonjour,

    il faut modifier la valeur de $this->motif selon qu'un utilisateur est connecté ou pas dans plxMotor::prechauffage() pour les articles et les catégories. Pour simplifier le problème, on définit une variable $draft :

    public function prechauffage() {
        # Hook plugins
        if(eval($this->plxPlugins->callHook('plxMotorPreChauffageBegin'))) return;
    
        $draft = (isset($_SESSION['profil']) && $_SESSION['profil'] < PROFIL_EDITOR) ? '|draft,' : '';
    
        # ....
    
        elseif($this->get AND preg_match('#^article(\d+)\/?([\w-]+)?#',$this->get,$capture)) {
            $this->cible = str_pad($capture[1],4,'0',STR_PAD_LEFT); # On complete sur 4 caracteres
            $this->motif = '#^' . $this->cible . '\.(?:\d{3},|home,' . $draft . ')*(?:' . $this->activeCats . '|home)(?:,\d{3})*\.\d{3}\.\d{12}\.[\w-]+\.xml$#'; # Motif de recherche
            if($this->getArticles()) {
    
            # .....
    
            }
        }
    
        # .....
    
        elseif($this->get AND preg_match('#^categorie(\d+)\/?([\w-]+)?#',$this->get,$capture)) {
            $this->cible = str_pad($capture[1],3,'0',STR_PAD_LEFT); # On complete sur 3 caracteres
            if(!empty($this->aCats[$this->cible]) AND $this->aCats[$this->cible]['active'] AND $this->aCats[$this->cible]['url']==$capture[2]) {
                $this->mode = 'categorie'; # Mode categorie
                $this->motif = '#^\d{4}\.((?:\d{3},|home,' . $draft . ')*' . $this->cible . '(?:,\d{3})*)\.\d{3}\.\d{12}\.[\w-]+\.xml$#'; # Motif de recherche
                # .....
            }
        }
    
        # ....
    
    }
    

    J'ai corrigé les regex d'origine.
    "home" et "draft" sont toujours devant les id numériques des catégories.

  • bazooka07bazooka07 PluXml Lead Developer, Moderator

    Pour améliorer l'expérience utilisateur, il faudrait aussi modifier plxShow::artTitle() pour rajouter une class quand l'article est un brouillon.

  • JoséJosé Member

    Je ne suis pas familier avec les codes de PluXml, mais
    je ne comprends pas où tu définis la fonction new plxRecord($artsList)

  • JoséJosé Member

    Bonjour Gcyrillus & Bazooka
    j'ai apporté vos deux modifications
    1 - modification dans le thème
    2 - modification de public function prechauffage(): $draft

    pour le moment je teste en local, je m'affranchis des conditions d'identification

    je n'obtiens pas le résultat attendu:
    dans l'url : s'affiche l'url de la catégorie
    mais la totalité des articles s'affichent les uns sous les autres ( avec la ligne pagination qui ne répond pas )
    j'ai tous les articles toutes catégories confondues sauf les brouillons..

  • 08:08 modifié

    Bonjour,Désolé pour la confusion:

    1. la fonction : lastartlist n'est pas une solution en l’état (sauf si modif de bazooka effectuée)
    2. La modification dans le thème est une approche à développé qui a trop de défaut (plus de filtres) a oublier
    3. La modification de bazooka07, seule, devrait convenir si connecté au moins en mode rédacteur.

    Reste la 3 et éventuellement la 1 en complément.

    Cdt


    Cordialement,
    gcyrillus , simple membre du forum et utilisateur de PluXml

    Mon site PluXml: https://re7net.com | Plugins: https://ressources.pluxopolis.net/banque-plugins/index.php?all_versions | Thèmes: tester et télécharger @ https://pluxthemes.com
    Indiquez [RÉSOLU] dans le titre de votre question une fois le soucis réglé, Merci

  • bazooka07bazooka07 PluXml Lead Developer, Moderator

    Oups, il y a une erreur dans les regex. les ids des catégories sont cadrés sur 2 chiffres et non 4 ( \d{3} au lieu de \d{4} )
    C'est corrigé dans mon post précèdent.

    Pour ajouter une class au titre des articles en brouillon dans le fichier core/lib/class.plx.show.php :

        public function artTitle($type = '')
        {
    
            if ($type == 'link') { # Type lien
                $id = intval($this->plxMotor->plxRecord_arts->f('numero'));
                $title = plxUtils::strCheck($this->plxMotor->plxRecord_arts->f('title'));
                $url = $this->plxMotor->plxRecord_arts->f('url');
                $draft = preg_match('#\bdraft\b#', $this->plxMotor->plxRecord_arts->f('categorie')) ? ' class="draft"' : '';
                # On effectue l'affichage
                echo '<a' . $draft . ' href="' . $this->plxMotor->urlRewrite('?article' . $id . '/' . $url) . '" title="' . $title . '">' . $title . '</a>';
            } else { # Type normal
                echo plxUtils::strCheck($this->plxMotor->plxRecord_arts->f('title'));
            }
        }
    

    Et rajouter une règle CSS dans theme.css du thème. Par exemple :

    .article .draft { background-color: red; }
    
  • bazooka07bazooka07 PluXml Lead Developer, Moderator
  • JoséJosé Member

    Finalement je ne retiens que la modification public function prechauffage(): $draft
    en créant la variable $draft et en modifiant la ligne pour # Mode categorie cela convient à ce que je recherchais.

    la solution de la modification dans le thème aurait permis de cibler les catégories concernées ( ici toutes les catégories suivent le même traitement)

    parce que je suis en local et que je m'affranchis de l'identification je me pose la question de comment je dois écrire la ligne
    $draft = (isset($_SESSION['profil']) && $_SESSION['profil'] < PROFIL_EDITOR) ? '|draft,' : '';

    mes connaissance en php sont limitées...

    Merci tous les deux

  • rebonjour,
    pour ton test local, retire le test de connexion et réduit à :

    $draft = '|draft,';
    


    Cordialement,
    gcyrillus , simple membre du forum et utilisateur de PluXml

    Mon site PluXml: https://re7net.com | Plugins: https://ressources.pluxopolis.net/banque-plugins/index.php?all_versions | Thèmes: tester et télécharger @ https://pluxthemes.com
    Indiquez [RÉSOLU] dans le titre de votre question une fois le soucis réglé, Merci

  • JoséJosé Member

    Merci :)

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