Obtenir le nom d'une catégorie dans l'admin

Bonjour,


J'ai modifié/simplifié le panneau d'administration pour limiter la publication d'articles dans deux catégories uniquement (une catégorie s'affichant sous forme de blog et l'autre sous forme d'un portfolio). J'ai donc séparé dans mon menu admin, la liste des articles en deux et la création de nouvaux articles en deux :

  • liste article de cat 1
  • nouvel article de cat 1
  • liste article de cat 2
  • nouvel article de cat 2

cat 1 s'appelle aujourd'hui Actualités et cat 2 s'appelle Réalisations

J'ai donc dans /core/admin/lang/fr/admin.php

  •       'L_MENU_ARTICLES' => 'Actualités',
  •       'L_MENU_ARTICLES_TITLE' => 'Liste et modification des actualités',
  •       'L_MENU_NEW_ARTICLES' => 'Nouvelle actualité',
  •       'L_MENU_NEW_ARTICLES_TITLE' => 'Nouvelle actualité',
  •       'L_MENU_REALISATIONS' => 'Réalisations',
  •       'L_MENU_REALISATIONS_TITLE' => 'Liste et modification des réalisations',
  •       'L_MENU_NEW_REALISATIONS' => 'Nouvelle réalisation',
  •       'L_MENU_NEW_REALISATIONS_TITLE' => 'Nouvelle réalisation',

Serait-il possible de récupérer et mettre en variable le nom des deux catégories depuis data/configuration/categories.xml

dans $namecat001 et $namecat002 par exemple

de façon à pouvoir écrire

  •       'L_MENU_ARTICLES' => $namecat001,
  •       'L_MENU_ARTICLES_TITLE' => 'Liste et modification de ' . $namecat001,
  •       'L_MENU_NEW_ARTICLES' => 'Ajouter un(e) ' . $namecat001,
  •       'L_MENU_NEW_ARTICLES_TITLE' => 'Ajouter un(e) ' . $namecat001,
  •       'L_MENU_REALISATIONS' => $namecat002,
  •       'L_MENU_REALISATIONS_TITLE' => 'Liste et modification de ' . $namecat002,
  •       'L_MENU_NEW_REALISATIONS' => 'Ajouter un(e) ' . $namecat002,
  •       'L_MENU_NEW_REALISATIONS_TITLE' => 'Ajouter un(e) ' . $namecat002,

J'ai essayé de m'inspirer de https://forum.pluxml.org/discussion/5988/categories-en-liste-deroulante, de catName et de catList etc mais je ne trouve pas comment faire.

Peut-être qu'on ne peut pas utiliser de hook PluXml et qu'il faudrait faire un petit script PHP? Est-ce que quelqu'un a une idée? une suggestion?

Merci,

Thatoo

Mots clés:
«1

Réponses

  • bazooka07bazooka07 Member
    10 avril modifié

    Bonjour,

    Au cas où cela t'aurait échappé, mets le profil de tes utilisateurs à "Rédacteur". Cela réduira leurs droits :

    • Pas de possiblité de créer une nouvelle catégorie
    • ils ne verront que leurs articles
    • Tu peux modérer leurs articles
    • ...

    En tant qu'administrateur, crée les catégories et renseigne leur balise HTML <title>.

    Ensuite modife le fichier core/admin/top.php pour le menu :

    $arts_mod = $nbartsmod>0 ? '<span class="badge" onclick="window.location=\''.PLX_CORE.'admin/index.php?sel=mod&amp;page=1\';return false;">'.$nbartsmod.'</span>':'';
    if($_SESSION['profil'] == PROFIL_WRITER) {
       foreach($plxAdmin->aCats as $id=>$infos) {
           if(empty($infos['active'])) { continue; }
           $menus[] = plxUtils::formatMenu($infos['name'], PLX_CORE.'admin/index.php?page=1&cat=' . $id, $infos['title_htmltag']);
       }
    }
    $menus[] = plxUtils::formatMenu(L_MENU_ARTICLES, PLX_CORE.'admin/index.php?page=1', L_MENU_ARTICLES_TITLE, false, false, $arts_mod);
    

    Le plus compliqué est de surligner l'entrée active du menu. Pour que cela soit plus clair, j'ai préféré ré-écrire la fonction formatMenu() dans core/lib/class.plx.utils.php :

       public static function formatMenu($caption, $href, $title=false, $aClass=false, $onclick=false, $extra='', $highlight=true) {
           $title = (!empty($title)) ? ' title="' . $title . '"' : '';
           $onclick = $onclick ? ' onclick="'.$onclick.'"':'';
           $caption = ucfirst($caption);
    
           $classList = array('menu');
           if(!empty($aClass)) { $classList[] = $aClass; }
    
           $parts = parse_url($href);
           $basename = basename($parts['path'], '.php');
           $scriptname = basename($_SERVER['SCRIPT_NAME'], '.php');
           $id = $basename;
    
           switch($basename) {
               case 'index' :
                   parse_str($parts['query'], $paramsHref);
                   parse_str($_SERVER['QUERY_STRING'], $paramsServer);
                   if(array_key_exists('page', $paramsHref)) {
                       unset($paramsHref['page']);
                   }
                   if(count($paramsHref) > 1) {
                       ksort($paramsHref);
                   }
                   if(array_key_exists('page', $paramsServer)) {
                       unset($paramsServer['page']);
                   }
    
                   if($highlight and $basename == $scriptname) {
                       if(empty($paramsHref)) {
                            if(empty($paramsServer)) {
                               $classList[] = 'active';
                           }
                       } else {
                           if(!empty($paramsServer)) {
                               $success = true;
                               foreach($paramsHref as $name=>$value) {
                                   if(
                                       !array_key_exists($name, $paramsServer) or
                                       $value != $paramsServer[$name]
                                   ) {
                                       $success = false;
                                       break;
                                   }
                               }
                               if($success) { $classList[] = 'active'; }
                           }
                           $id = implode('-', array_merge(array($id), array_values($paramsHref)));
                       }
                   }
                   break;
               default:
                   if($highlight and $basename == $scriptname) {
                       $classList[] = 'active';
                   }
           }
           $className = implode(' ', $classList);
    
           return <<< EOT
    <li id="mnu_$id" class="$className"><a href="$href" $onclick $title>$caption $extra</a></li>
    EOT;
       }
    

    J'ai pas trop le temps de pousser les essais très loin mais cela devrait le faire.

  • Il faut également modifier le fichier core/amin/index.php pour générer la liste des articles pour une catégorie quand on clique dans le menu :

    # Récuperation des paramètres
    if(!empty($_GET['sel']) AND in_array($_GET['sel'], array('all','published', 'draft','mod'))) {
       $_SESSION['sel_get']=plxUtils::nullbyteRemove($_GET['sel']);
       $_SESSION['sel_cat']='';
    } elseif(!empty($_GET['cat']) and array_key_exists($_GET['cat'], $plxAdmin->aCats)) {
       $catId = $_GET['cat'];
       if(!empty($plxAdmin->aCats[$catId]['active'])) {
           $_SESSION['sel_cat'] = $catId;
       }
    } else
       $_SESSION['sel_get']=(isset($_SESSION['sel_get']) AND !empty($_SESSION['sel_get']))?$_SESSION['sel_get']:'all';
    
  • Merci beaucoup bazooka07,

    Je vais regarder ça avec empressement et je ferai un retour.

    L'idée est de simplifier/optimiser à mort l'interface admin pour offrir cet outil à des personnes qui ont besoin d'être sur la toile (artisan, auto-entrepreneur etc...) mais n'ont pas le temps/l'énergie/l'envie d'apprendre à utiliser l'outil informatique.

    Pour certains, cocher une case plutôt qu'une autre, c'est déjà rebutant... et ils délaisseraient l'outil tout simplement.

    Ils seront évidement Rédacteurs.

  • Alors en fait, nous avons déjà modifié top.php et index.php que nous avons dédoublé d'ailleurs.

    Top.php

                   $arts_mod = $nbartsmod>0 ? '<span class="badge" onclick="window.location=\''.PLX_CORE.'admin/index.php?sel=all&amp;page=1\';return false;">'.$nbartsmod.'</span>':'';
                   $menus[] = plxUtils::formatMenu('<i class="fa fa-paragraph"></i>&nbsp;' . L_MENU_ARTICLES, PLX_CORE.'admin/index.php?sel=all&amp;page=1', L_MENU_ARTICLES_TITLE, false, false, $arts_mod);
    
                   if(isset($_GET['a'])) # edition article
                      $menus[] = plxUtils::formatMenu('<i class="fa fa-edit"></i>&nbsp;' . L_MENU_NEW_ARTICLES_TITLE, PLX_CORE.'admin/article.php', L_MENU_NEW_ARTICLES, false, false, '', false);
                   else # nouvel article
                      $menus[] = plxUtils::formatMenu('<i class="fa fa-edit"></i>&nbsp;' . L_MENU_NEW_ARTICLES_TITLE, PLX_CORE.'admin/article.php', L_MENU_NEW_ARTICLES);
    
                   #index réalisation
                   $arts_mod = $nbartsmod>0 ? '<span class="badge" onclick="window.location=\''.PLX_CORE.'admin/indexreal.php?sel=all&amp;page=1\';return false;">'.$nbartsmod.'</span>':'';
                   $menus[] = plxUtils::formatMenu('<i class="fa fa-picture-o"></i>&nbsp;' . L_MENU_REALISATIONS, PLX_CORE.'admin/indexreal.php?sel=all&amp;page=1', L_MENU_REALISATIONS_TITLE, false, false, $arts_mod);
    
                   if(isset($_GET['a'])) # edition réalisation
                      $menus[] = plxUtils::formatMenu('<i class="fa fa-camera"></i>&nbsp;' . L_MENU_NEW_REALISATIONS_TITLE, PLX_CORE.'admin/realisation.php', L_MENU_NEW_REALISATIONS, false, false, '', false);
                   else # nouvelle réalisation
                      $menus[] = plxUtils::formatMenu('<i class="fa fa-camera"></i>&nbsp;' . L_MENU_NEW_REALISATIONS_TITLE, PLX_CORE.'admin/realisation.php', L_MENU_NEW_REALISATIONS);
    

    index1.php

    # Récuperation des paramètres
    $_POST['sel_cat']='001';
    $_SESSION['sel_cat']=$_POST['sel_cat'];
    if(!empty($_GET['sel']) AND in_array($_GET['sel'], array('all','published', 'draft','mod'))) {
       $_SESSION['sel_get']=plxUtils::nullbyteRemove($_GET['sel']);
    #   $_SESSION['sel_cat']='';
    }
    else
       $_SESSION['sel_get']=(isset($_SESSION['sel_get']) AND !empty($_SESSION['sel_get']))?$_SESSION['sel_get']:'all';
    

    indexreal.php

    # Récuperation des paramètres
    $_POST['sel_cat']='002';
    $_SESSION['sel_cat']=$_POST['sel_cat'];
    if(!empty($_GET['sel']) AND in_array($_GET['sel'], array('all','published', 'draft','mod'))) {
       $_SESSION['sel_get']=plxUtils::nullbyteRemove($_GET['sel']);
    #   $_SESSION['sel_cat']='';
    }
    else
       $_SESSION['sel_get']=(isset($_SESSION['sel_get']) AND !empty($_SESSION['sel_get']))?$_SESSION['sel_get']:'all';
    

    et tout à l'avenant pour les tris par statut (publiés, brouillon etc) et le nombre d'article par catégorie et statut etc... Je vous ai invité sur notre projet gitlab ici https://framagit.org/assodefis/pluxmldefis/-/tree/admin_panel_new si vous voulez bien regarder ce que nous avons fait.

    Le tout fonctionne et nous pourrions nous arrêter là, nous sommes plutôt satisfait.

    Seulement, on se dit dit, si on change le nom de la catégorie "Réalisations" en "Mes oeuvres" par examples, il faut qu'on le change aussi dans /core/admin/lang/fr/admin.php . Ce n'est pas un gros travail (surtout que l'idée c'est qu'il n'y ait jamais plus de deux catégories dans ces projets) mais c'est toujours plus satisfaisant de se dire que ça peut se faire automatiquement.

  • Dédoubler des scripts PHP donnent 2 fois plus de travail de maintenance. C'est mathématique.

    Si le problème est d'afficher les catégories aux rédacteurs, il y a moyen d'ajouter un test pour savoir si on a affaire à un rédacteur et lui cacher la liste de catégories. Quitte à mettre un champ type="hidden" pour que PluXml s'y retrouve.

    En standard, on peut renommer les catégories. En fait, c'est l'identifiant qui compte, le nom est juste une décoration pour l'utilisateur.

    Le lien vers Framagit donne une erreur 404. Meme en me connectant sur mon compte Framagit, ton dépôt sait juste me dire qu'il n'y pas de Wiki.

  • Je comprends bien ce que tu dis sur le dédoublement... et on a essayé d'éviter. Seul index.php et article.php ont été dédoublé. Nous somme encore novice et ne demandons qu'à apprendre et nous améliorer.


    L'idée c'était vraiment de simplifier l'utilisation de la partie admin au maximum. Il veut publier un article dans son blog, un bouton. Il veut publier une photo dans son portfolio, un bouton.

  • Je suis partie de PluXml 5.8.3 qui paraitra dans quelques mois.

    Voici quelques copies d'écran d'administration pour un rédacteur :


    Note que j'ai juste modifié l'interface pour le profil rédacteur. Si tu te connecte comme administrateur tu retrouves l'interface classique de PluXml avec tous tes super-pouvoirs.

    Je t'ai envoyé un invitation sur Framagit.

    Il faut cloné les branches master et assodefis et utilser cette dernière.

    Tu peux récupérer le dossier data que j'ai utilisé avec le lien ci-dessous :

    http://kazimentou.fr/divers/assodefis-data.zip


  • bazooka07bazooka07 Member
    16 avril modifié

    Mais il y a des problèmes pour ton thème côté site :

    • Impossible de cliquer sur le logo
    • sur smartphone problème avec la barre de menu
    • trop grandes marges latérales pour les articles sur smartphone

    C'est dommage la charte graphique est plutôt agréable.

  • assodefisassodefis Member
    17 avril modifié

    Wahou, tu es incroyable de faire ça en 24h....

    Je vais regarder ça pendant le week-end, ça me paraît idéal (avec sans doute un meilleur code en prime qui plus est).

    Une fois le travail sur la partie admin terminé, je vais reprendre mon travail sur le thème de la partie site en tenant compte de tes remarques.

    Merci énormément. Ça fait vraiment plaisir.

  • En fait, je n'ai pas résisté à la tentation de l'essayer tout de suite.

    C'est super! Je vais juste remettre les commentaires visibles au rédacteur, lui cacher en css la partie droite dans article.php (emplacement) et est-ce que tu peux m'expliquer comment se fait-il que sur ta photo, le nouvel article est symbolisé comme il faut pas un + mais que chez moi, ça donne un caractère inconnu (voir photo ci-dessous). Je n'ai pas trouvé dans le code où était le +. Je n'ai trouvé que dans top.php PLX_CORE.'admin/article.php?cat=' . $id, L_NEW_ARTICLE or L_NEW_ARTICLE ne fait pas référence à un + pour ce que je comprends de la structure.

  • Pour le "+", tu dois utiliser une police qui ne reconnait pas ce caractère.

    Clique sur le lien ci-dessous pour voir si la croix s'affiche dans ton navigateur :

    https://www.fileformat.info/info/unicode/char/1f7a7/index.htm

    Pour éviter ce désagrément, le plus simple est de remplacer par une icône comme tu as fait devant les entrées de menus.

    Tu utilises la police media. Pas de change PluXml utilise Fontello. Mais il manque des icônes.

    J'ai poussé un nouveau commit pour en rajouter. Tu peux voir les icônes disponibles sur la page de ton site :

    core/admin/theme/fontello/demo.html

    Pour rajouter des icones, il faut glissser-deposer le fichier "core/admin/theme/fontello/config.json" à l'adresse suivante :

    http://fontello.com/

    Pour l'emplacement, le terme n'est pas très approprié. "Classé dans" serait plus approprié.

    Il faut modifier la constante L_ARTICLE_CATEGORIES dans le fichier core/lang/fr/admin.php

  • OK, nous allons revenir à la police Fontello alors.
    C'est dommage que ce dossier core/admin/theme/fontello/ n'existe pas par défaut alors.

  • Comme je ne suis pas encore très à l'aise avec git, j'ai cloné tes travaux dans notre repo (je crois que c'est ça qu'on dit) et j'y ai effectué mes modifs dessus. Je t'ai invité sur ce repo et je t'ai donné des droits de modifications.
    J'ai fait des modifications pour abandonner media et préférer fontello. J'ai remis tous les icônes qui vont bien et j'ai bien le + qui apparaît. Par contre, il y a toujours un symbole de caractère non reconnu que je n'arrive pas à enlever.
    Aussi, les icones sont bons partout sauf en tant que rédactuer, si je suis hors "Actualité" et "Réalisations". Si je clique dans "Médias" ou "Profil", alors les icones changent...

    [étrange, je n'arrive pas à ajouter de photos à mon commentaire ce soir]
    https://framapic.org/gallery#Qp0YZ35kLOa6/tGcXLbHBvFix.png,nNSAXW8esKT8/ls9JYWRsuGum.png

  • assodefisassodefis Member
    18 avril modifié

    A la ligne 139 de index.php, j'ai tenté un

    <h2><?php
    if($_SESSION['profil'] == PROFIL_WRITER) {
                echo "Gestion de " . $infos['name'];
    } else echo L_ARTICLES_LIST ?>
    </h2>
    

    mais ça m'affiche "Gestion de Réalisations" dans Réalisations et dans Actualités
    alors j'ai essayé un

    <h2><?php
    if($_SESSION['profil'] == PROFIL_WRITER) {
        foreach($plxAdmin->aCats as $id=>$infos) {
                echo "Gestion de " . $infos['name'];
        }
    } else echo L_ARTICLES_LIST ?>
    </h2>
    

    mais ça m'affiche "Gestion de ActualitésGestion de Réalisations" dans les deux...

  • Le dossier Fontello avec tous les fichiers qui vont bien "config.json" et .css intacts seront dans la prochaine version de PluXml.
    Pour le caractère qui t'agace, il faut aller le chercher dans le fichier core/lib/class.plx.utils.php et rechercher la fonction formatMenu. Modifie la valeur par défaut du paramètre $caption1 : un espace ou une chaine vide.
    Sur ce forum, on a des problèmes avec l'éditeur "riche" qui bogue. Du coup, on l'a mis en retraite en attendant son remplaçant. Conséquence on ne peut plus insérer des images. Mais les liens passent.

    Pour ton code, il faut tester la variable $_GET['cat']. Tu cherches à faire quoi ?

  • assodefisassodefis Member
    18 avril modifié

    Super nouvelle alors pour fontello. Dommage pour "riche". Merci pour $caption, c'est ok!

    Pour mon code, mon problème c'est que je ne comprends pas encore ce que fait "foreach($plxAdmin->aCats as $id=>$infos" : Pour chaque [quelquechose catégorie] avec $id [etjenesaisquoi]$info.... bref

    Les seules choses que je comprends c'est $_GET['cat'] et $infos['name'] (et encore je ne comprends pas vraiment d'où vient $info...)

    Ce que je veux c'est pouvoir afficher le nom de la catégorie active :

    • "Gestion de Actualités" en haut quand un rédacteur clique sur "Actualités"
    • "Gestion de Réalisations" en haut quand un rédacteur clique sur "Réalisations"

    j'ai tenté des trucs par ignorance du genre qui suit mais rien n'a fonctionné...

    <?php
    if($_SESSION['profil'] == PROFIL_WRITER) {
        $_GET['cat']=>$infos;
        echo "Gestion de " . $infos['name'];
    } else echo L_ARTICLES_LIST ?>
    
  • Je me suis permis (et je propose à PluXML de l'adopter) d'inverser (droite/gauche) le filtre de catégorie et le champ de recherche car c'est plus logique pour moi que le filtre de catégorie se trouve à droite, au dessus de la colonne catégorie et que le champ de recherche soit à gauche, au dessus des colonnes de titre et d'identifiant d'article.

    Pour ce cas précis pour lequel nous essayons de simplifier l'interface du rédacteur, j'en ai profité pour cacher le filtre de catégorie pour qu'il ne reste que le champ de recherche à gauche.

    J'ai commit/push ces modifications ainsi que l'adoption de fontello dans le thème admin de Défis, et la suppression du caractère dans $caption.

    Il me manque juste ce

    echo "Gestion de " . $infos['name'];
    

    à résoudre avec le $_GET['cat']

    ainsi que résoudre la différence d'affichage entre quand un rédacteur se trouve dans index.php et quand il se trouve dans l'un des trois medias.php, profil.php et article.php que j'exposais ici https://framapic.org/gallery#Qp0YZ35kLOa6/tGcXLbHBvFix.png,nNSAXW8esKT8/ls9JYWRsuGum.png

    Après ça, la partie admin répondra à nos objectifs.

  • assodefisassodefis Member
    19 avril modifié

    Je pense que la différence d'affichage vient des lignes 88 et 89 dans top.php mais je ne sais pas trop comment les modifier. Je vais tenter des trucs, et je te tiens au courant...

                        $menus[] = plxUtils::formatMenu(L_MENU_MEDIAS, PLX_CORE.'admin/medias.php', L_MENU_MEDIAS_TITLE);
                        $menus[] = plxUtils::formatMenu(L_PROFIL, PLX_CORE.'admin/profil.php', L_MENU_PROFIL_TITLE);
    

    ou plutôt non, ça doit venir du else ligne 1133 à 1148 de core/lib/class.plx.utils.php mais je ne sais pas du tout quoi changer :

                      else {
                        if(!empty($paramsServer)) {
                            $success = true;
                            foreach($paramsHref as $name=>$value) {
                                if(
                                    !array_key_exists($name, $paramsServer) or
                                    $value != $paramsServer[$name]
                                ) {
                                    $success = false;
                                    break;
                                }
                            }
                            if($success) { $classList[] = 'active'; }
                        }
                        $id = implode('-', array_merge(array($id), array_values($paramsHref)));
                    }
    
  • assodefisassodefis Member
    20 avril modifié

    J'ai trouvé cette solution mais j'attends ton commentaire avant de commit/push

    Dans core/lib/class.plx.utils.php, à la ligne 1149, j'ai ajouté

                } else {
                    $id = implode('-', array_merge(array($id), array_values($paramsHref)));
                }
    

    avant le break et ça semble fonctionner comme je le souhaitais. Ca te semble correct?

  • assodefisassodefis Member
    20 avril modifié

    Je crois que j'ai trouvé, voir commentaire ci-après.
    Il ne me manque plus qu'à résoudre l'affichage du titre de la page dans core/admin/index.php?page=1&cat=001 et core/admin/index.php?page=1&cat=002 quand on se connecte en tant que rédacteur.

    Quand on se connecte avec des droits supérieur au rédacteur, et qu'on se rend sur /core/admin/index.php?page=1 , le titre est "Liste des articles". C'est à la ligne 139 de index.php

    <h2><?php echo L_ARTICLES_LIST ?></h2>
    

    Je voudrais que pour un rédacteur, quand il va sur core/admin/index.php?page=1&cat=001, ça affiche comme titre
    "Gestion de Actualités" ou "Gestion de Réalisations" si on est dans cat=002. J'espère avoir bien réussi à expliquer cette fois. Je souhaite donc remplacer le contenu de la ligne 139 par quelque chose du genre

    <h2><?php
    if($_SESSION['profil'] == PROFIL_WRITER) {
        foreach($plxAdmin->aCats as $id=>$infos) {
                echo "Gestion de " . $infos['name'];
        }
    } else echo L_ARTICLES_LIST ?>
    </h2>
    

    avec du $_GET['cat'] à la place du foreach mais pour l'instant, je n'y arrive pas.

  • Je crois que j'ai trouvé.
    J'ai remplacé à la ligne 139 de index.php

    <h2><?php echo L_ARTICLES_LIST ?></h2>
    

    par

    <h2><?php
    if($_SESSION['profil'] == PROFIL_WRITER) {
    echo "Gestion de " . $plxAdmin->aCats[$catId]['name'];
    } else echo L_ARTICLES_LIST ?>
    </h2>
    

    et ça semble fonctionner. Vaut-il mieux

    plxAdmin->aCats[$catId]['name'];
    

    ou

    plxAdmin->aCats[$_GET['cat']]['name'];
    

    ?
    Qu'est-ce qui est plus rigoureux? standard? claire? élégant?

    J'attends tes commentaires avant de commit/push et de me pencher sur le thème admin de Défis puis de revenir au thème du site.
    Merci beaucoup pour ton aide précieuse.

  • Au fait, je me suis permis de faire un commentaire sur un de tes commits dans gitlab : https://framagit.org/bazooka07/assodefis/-/commit/b6450241cae6124a3b300c9feeff287cb0065e4d#note_708216

  • J'ai forké ton dépôt et je t'ai envoyé un PR.
    La bonne réponse est :
    $_SESSION['sel_cat']
    Mais $_SESSION['sel_cat'] peut prendre la valeur 001,002, all, ..
    Donc il faut regarder si sa valeur est un clé de $plxAdmin->aCats (array_key_exists)

  • assodefisassodefis Member
    21 avril modifié

    D'accord, merci.
    Sans commentaire de ta part sur mon ajout à la ligne 1149 dans core/lib/class.plx.utils.php

            } else {
                $id = implode('-', array_merge(array($id), array_values($paramsHref)));
            }
    

    je l'ai commit/push.

    Ensuite, j'ai voulu reprendre ce que tu as fais dans index.php ligne 139 pour l'adapter à top.php ligne 83-84 pour l'intitulé du hover mais j'ai un %s au lieu de l'espace qui s'affiche

                                $infos['name'], PLX_CORE . 'admin/index.php?page=1&cat=' . $id, L_ART_CATEGORY_LIST . $infos['name'], 'extended', false, $arts_mod, true,
                                PLX_CORE.'admin/article.php?cat=' . $id, L_NEW_ARTICLE_WRITER . $infos['name'], ''
    

    Enfin, pour faire propre, dans /core/lang/fr/admin (et autres langues, pas toujours certains de mes traductions même si j'ai essayé de faire bien), j'ai ajouté

    const L_NEW_ARTICLE_WRITER= 'Ajouter un élément à %s';
    const L_ARTICLE_EDITING_WRITER = 'Modification d\'un élément de %s';
    

    afin de pouvoir modifier la ligne 282 de article.php

        <h2><?php echo (empty($_GET['a']))?L_NEW_ARTICLE:L_ARTICLE_EDITING; ?></h2>
    

    pour faire la même chose que dans top.php :

        <h2><?php
        if(!empty($_SESSION['sel_cat']) and array_key_exists($_SESSION['sel_cat'], $plxAdmin->aCats) and $_SESSION['profil'] == PROFIL_WRITER) {
            empty($_GET['a'])?printf(L_NEW_ARTICLE_WRITER, strtolower($plxAdmin->aCats[$_SESSION['sel_cat']]['name'])):printf(L_ARTICLE_EDITING_WRITER, strtolower($plxAdmin->aCats[$_SESSION['sel_cat']]['name']));
        } else {
        echo (empty($_GET['a']))?L_NEW_ARTICLE:L_ARTICLE_EDITING;
        }
        ?></h2>
    

    Ca fonctionne pas mal sauf dans un cas, si le rédacteur a d'abord cliqué sur "ajouter à Actualités" et ensuite, il change d'avis et clique directement sur "ajouter à Réalisation", alors, ça affiche quand même "Ajouter un élément à Actualités" et non pas "Ajouter un élément à Réalisations" (et vice versa).

    Pour voir mes commits, c'est dans la branche nouveau-panneau-admin. Est-ce que tu peux envoyer tes PR sur cette branche?

  • Je viens de faire un commit aussi pour que les nombres d'articles par catégorie par statut (brouillon, publié....) s'affichent correctement pour le rédacteur. Merci de commenter si besoin.

  • Si "%s" s'affiche, cela signifie que la traduction est un modèle ou gabarit et attend un argument. "%s" est un joker à remplacer.
    Il faut dans ce cas utiliser la fonction printf() ou sprintf() (https://www.php.net/manual/fr/function.sprintf.php).

    foreach($plxAdmin->aCats as $id=>$infos) {
        if(empty($infos['active'])) { continue; }
        $menus[] = plxUtils::formatMenu(
            $infos['name'], PLX_CORE . 'admin/index.php?page=1&cat=' . $id, sprintf(L_ART_CATEGORY_LIST, strtolower($infos['name'])), 'extended', false, $arts_mod, true,
            PLX_CORE.'admin/article.php?cat=' . $id, sprintf(L_NEW_ARTICLE_WRITER, strtolower($infos['name']))
        );
    }
    
  • Merci, avec ça, j'approche du but.
    J'ai décidé de mettre à jour
    L_NEW_ARTICLE_WRITER= 'Nouvel élément pour %s';
    (j'ai mis à jour les traductions aussi)
    afin de pouvoir le réutiliser aussi dans l'affichage du "titre par défaut" d'un nouveau message en changeant la ligne 212 de article.php

    $title = plxUtils::strRevCheck(L_NEW_ARTICLE);
    

    en

    if(!empty($_SESSION['sel_cat']) and array_key_exists($_SESSION['sel_cat'], $plxAdmin->aCats) and $_SESSION['profil'] == PROFIL_WRITER) {
        $title = plxUtils::strRevCheck(sprintf(L_NEW_ARTICLE_WRITER, strtolower($plxAdmin->aCats[$_GET['cat']]['name'])));
    } else {
        $title = plxUtils::strRevCheck(L_NEW_ARTICLE);
    }
    
  • Ainsi, j'ai vraiment l'impression d'avoir une interface simple et fonctionnelle pour les rédacteurs.
    Il ne me reste qu'un seul problème à résoudre.
    Lorsqu'un rédacteur se connecte, il arrive sur la liste des articles, de tous les articles (la sélection par catégorie n'a pas lieu). Idéalement, ce serait bien que le rédacteur arrive sur la liste des articles de la catégorie 001.
    Le problème est d'autant plus gênant que tant que le rédacteur n'a pas cliqué sur l'une ou l'autre des catégories, si il clique sur un des deux bouton + pour ajouter un élément, l'affichage ne sera pas correct, c'est comme si cat n'avait pas été initialisé.

    Est-ce que je peux dans index.php ajouter quelque chose comme "si tu as un profil de rédacteur et si ta session est toute nouvelle, alors cat=001"?

    J'ai push toutes mes modifications donc si tu veux voir ce que j'ai fait et essayer pour comprendre ce que je veux dire, c'est possible.

  • assodefisassodefis Member
    22 avril modifié

    Est-ce que ça ne serait pas tout simplement en ajoutant cette ligne

    if($_SESSION['profil'] == PROFIL_WRITER) {$_SESSION['sel_cat'] = '001';}
    

    dans le else de la ligne 37 dans index.php

    } else {
        $_SESSION['sel_get']=(isset($_SESSION['sel_get']) AND !empty($_SESSION['sel_get']))?$_SESSION['sel_get']:'all';
    }
    

    ?
    Il me semble que c'est ça... en tout cas, ça fonctionne donc je push ça aussi pour que tu puisses commenter cette version presque finaliser, si tu veux bien.

  • bazooka07bazooka07 Member
    22 avril modifié

    J'avais vu ce problème où quand le rédacteur se connecte la 1ère fois, il affiche toutes les catégories.
    Affecter une valeur à $_SESSION['sel_cat'] serait une solution mais l'entrée correspondante au menu ne sera pas surlignée.
    Une autre solution serait de vérifier au début de index.php si $_GET['cat'] est vide. Si c'est le cas, alors faire une redirection vers index.php?cat=001 ou remplacer 001 par array_values($plxAdmin->aCats)[0] au cas où la catégorie 001 n'existe plus. Mais je n'ai pas testé.

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