Non unicité d'un attribut id dans le menu d'administration de la partie admin

mementomemento Member

Bonjour,
je suis en train de mettre à jour un plugin et je me suis aperçu qu'il y a une redondance de l'attribut id dans l'item "Paramètres" et dans l'item "Configuration de base" du menu d'administration.
Cela pose soucis pour différencier ces deux items surtout que normalement, un id doit être unique dans une page html selon les standards du W3C.
Cordialement.

Réponses

  • bazooka07bazooka07 PluXml Lead Developer, Moderator

    Bonjour,

    Effectivement il y a un petit problème.
    Il faut appliquer le patch suivant au fichier core/admin/top.php :

    diff --git a/core/admin/top.php b/core/admin/top.php
    index af37f5d8..69133535 100644
    --- a/core/admin/top.php
    +++ b/core/admin/top.php
    @@ -102,7 +102,6 @@ if(isset($_GET["del"]) AND $_GET["del"]=="install") {
                        $menus[] = plxUtils::formatMenu(L_MENU_PROFIL, 'profil.php', L_MENU_PROFIL_TITLE);
    
                        if($_SESSION['profil'] == PROFIL_ADMIN) {
    -                       $menus[] = plxUtils::formatMenu(L_MENU_CONFIG, 'parametres_base.php', L_MENU_CONFIG_TITLE, false, false, '', false);
                            if (preg_match('/parametres/',basename($_SERVER['SCRIPT_NAME']))) {
                                $menus[] = plxUtils::formatMenu(L_MENU_CONFIG_BASE, 'parametres_base.php', L_MENU_CONFIG_BASE_TITLE, 'menu-config');
                                $menus[] = plxUtils::formatMenu(L_MENU_CONFIG_VIEW, 'parametres_affichage.php', L_MENU_CONFIG_VIEW_TITLE, 'menu-config');
    @@ -111,6 +110,8 @@ if(isset($_GET["del"]) AND $_GET["del"]=="install") {
                                $menus[] = plxUtils::formatMenu(L_THEMES, 'parametres_themes.php', L_THEMES_TITLE, 'menu-config');
                                $menus[] = plxUtils::formatMenu(L_MENU_CONFIG_PLUGINS, 'parametres_plugins.php', L_MENU_CONFIG_PLUGINS_TITLE, 'menu-config');
                                $menus[] = plxUtils::formatMenu(L_MENU_CONFIG_INFOS, 'parametres_infos.php', L_MENU_CONFIG_INFOS_TITLE, 'menu-config');
    +                       } else {
    +                           $menus[] = plxUtils::formatMenu(L_MENU_CONFIG, 'parametres_base.php', L_MENU_CONFIG_TITLE, false, false, '', false);
                            }
                        }
    

    les lignes commençant par - sont à supprimer.
    Et il faut rajouter les lignes commençant par + en supprimant le +
    Cela vient à déplacer la ligne contenant parametres_base.php et de l'afficher selon le résultat du test

    Merci pour ton retour.

    De quel plugin s'agit-il ?

  • mementomemento Member
    19 févr. modifié

    Bonjour Bazooka07,

    De quel plugin s'agit-il ?

    C'est le plugin "Adm_users_rights" qui me permet de gérer finement les droits des utilisateurs. J'en ai besoin pour un nouveau projet.

    Au remarque concernant la méthode formatMenu() dans la classe class.plx.utils, la fonction strtr() pour construire l'id de l'item de menu devrait être remplacée par la fonction str_replace() si l'objectif est de supprimer la chaine "p=" ou ".php" car actuellement, c'est inefficace.
    Cordialement.

  • bazooka07bazooka07 PluXml Lead Developer, Moderator

    Bonsoir memento,
    Effectivement strtr() est employé à mauvais escient. On réserve son usage lorsqu'il y a un tableau de substitution.
    Et d'autres trucs me piquent les yeux comme l'usage de explode().
    J'ai ré-écris la fonction de manière plus pertinente :

      public static function formatMenu($name, $href, $title=false, $class=false, $onclick=false, $extra='', $highlight=true) {
        $classList = array('menu');
        if(!empty($class)) {
          $classList[] = $class;
        }
    
        $parts = parse_url($href);
        $id = basename($parts['path'], '.php');
        if(basename($parts['path']) !=  'plugin.php') {
          if(basename($parts['path']) == basename($_SERVER['SCRIPT_NAME'])) {
            $classList[] = 'active';
          }
        } else {
          # plugin
          if(array_key_exists('query', $parts)) {
            if(!empty($_GET['p']) and $parts['query'] == 'p=' . $_GET['p']) {
              $classList[] = 'active';
            }
            $id = str_replace('p=', '', $parts['query']);
          }
        }
    
        $attrs = array();
        if(!empty($title)) {
          $attrs[] = 'title="' . $title . '"';
        }
        if(!empty($onclick)) {
          $attrs[] = 'onclick="' . $onclick. '"';
        }
    
        ob_start();
    ?>
          <li id="mnu_<?= $id ?>" class="<?= implode(' ', $classList) ?>"><a href="<?= $href ?>" <?= implode(' ', $attrs) ?>><?= $name . $extra ?></a></li>
    <?php
        return ob_get_clean();
      }
    

    Si tu vois autre chose, n'hésite pas !
    Merci pour ton retour.

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