Outils pour utilisateurs

Outils du site


lumo:creation_plugin_dokuwiki_namespacelogo:accueil

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
lumo:creation_plugin_dokuwiki_namespacelogo:accueil [2026/03/16 17:24] estrolumo:creation_plugin_dokuwiki_namespacelogo:accueil [2026/03/19 07:20] (Version actuelle) estro
Ligne 2: Ligne 2:
 ---- ----
 [[../|retour]] [[../|retour]]
 +<adm danger Créer les fichiers> 
 +Création d'un dossier pour y créer les fichiers de définition du "plugin" 
 +<code bash> 
 +cd /chemin/vers/dokuwiki/lib/plugins/ 
 +mkdir namespacelogo 
 +cd namespacelogo 
 +touch plugin.info.txt action.php helper.php style.less 
 +chmod 644 *.php *.less 
 +chmod 755 ../namespacelogo 
 +</code> 
 +</adm>
 <adm note plugin.info.txt> <adm note plugin.info.txt>
 <code> <code>
Ligne 10: Ligne 20:
 date   2026-03-16 date   2026-03-16
 name   Namespace Logo name   Namespace Logo
-desc   Affiche un logo spécifique par namespace+desc   Affiche un logo spécifique par namespace avec fallback hiérarchique
 </code> </code>
 </adm> </adm>
Ligne 19: Ligne 29:
  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
  * @author     Votrenom  * @author     Votrenom
 + 
 + * Plugin DokuWiki pour afficher un logo par namespace
 + * Fonctionnalités :
 + * - Support de multiples formats (png, jpg, jpeg, gif, svg)
 + * - Fallback hiérarchique (cherche dans les namespaces parents)
 + * - Fallback vers le logo global si aucun logo trouvé
  */  */
  
 class action_plugin_namespacelogo extends DokuWiki_Action_Plugin { class action_plugin_namespacelogo extends DokuWiki_Action_Plugin {
 +
 +    /**
 +     * Formats d'images supportés (ordre de priorité)
 +     */
 +    protected $supportedFormats = ['logo.png', 'logo.jpg', 'logo.jpeg', 'logo.gif', 'logo.svg'];
  
     /**     /**
Ligne 40: Ligne 61:
         $ns = getNS($ID);         $ns = getNS($ID);
                  
-        // Si pas de namespace (racine), on utilise le logo global +        // Trouver le chemin du logo (avec fallback hiérarchique
-        if (empty($ns)) { +        $logoPath = $this->_findLogoPath($ns);
-            return; +
-        } +
-         +
-        // Chemin vers le logo dans le namespace +
-        $logoPath = ':'$ns . ':logo.png';+
                  
-        // Vérifier si le fichier existe dans le Media Manager +        if ($logoPath) {
-        if (@media_exists($logoPath)) {+
             // Générer l'URL de l'image             // Générer l'URL de l'image
             $imgUrl = ml($logoPath);             $imgUrl = ml($logoPath);
Ligne 56: Ligne 71:
             $logoHtml = '<div class="ns-logo-container">' .             $logoHtml = '<div class="ns-logo-container">' .
                         '<img src="' . $imgUrl . '" ' .                         '<img src="' . $imgUrl . '" ' .
-                        'alt="Logo ' . hsc($ns) . '" ' .+                        'alt="Logo ' . hsc($this->_extractNamespaceFromPath($logoPath)) . '" ' .
                         'class="ns-logo" ' .                         'class="ns-logo" ' .
                         'id="namespace-logo" />' .                         'id="namespace-logo" />' .
Ligne 65: Ligne 80:
         }         }
     }     }
-} 
  
 +    /**
 +     * Trouver le chemin du logo avec fallback hiérarchique
 +     * @param string $ns Namespace de départ
 +     * @return string|null Chemin du logo ou null si aucun trouvé
 +     */
 +    protected function _findLogoPath($ns) {
 +        // Liste des namespaces à vérifier (du plus spécifique au plus général)
 +        $namespacesToCheck = $this->_buildNamespaceHierarchy($ns);
 +        
 +        // Vérifier chaque namespace dans l'ordre
 +        foreach ($namespacesToCheck as $checkNs) {
 +            foreach ($this->supportedFormats as $format) {
 +                $path = ':' . $checkNs . ':' . $format;
 +                
 +                if (@media_exists($path)) {
 +                    return $path;
 +                }
 +            }
 +        }
 +        
 +        return null;
 +    }
 +
 +    /**
 +     * Construire la hiérarchie des namespaces pour le fallback
 +     * Ex: 'a:b:c' -> ['a:b:c', 'a:b', 'a', '']
 +     * @param string $ns Namespace de départ
 +     * @return array Liste des namespaces à vérifier
 +     */
 +    protected function _buildNamespaceHierarchy($ns) {
 +        $hierarchy = [];
 +        
 +        // Ajouter le namespace actuel
 +        if (!empty($ns)) {
 +            $hierarchy[] = $ns;
 +        }
 +        
 +        // Remonter dans la hiérarchie
 +        $parts = explode(':', $ns);
 +        while (count($parts) > 1) {
 +            array_pop($parts);
 +            $parentNs = implode(':', $parts);
 +            if (!empty($parentNs)) {
 +                $hierarchy[] = $parentNs;
 +            }
 +        }
 +        
 +        // Ajouter la racine (vide) pour le fallback global
 +        $hierarchy[] = '';
 +        
 +        return $hierarchy;
 +    }
 +
 +    /**
 +     * Extraire le namespace du chemin du logo pour l'attribut alt
 +     * @param string $path Chemin du logo (ex: ':a:b:logo.png')
 +     * @return string Nom du namespace
 +     */
 +    protected function _extractNamespaceFromPath($path) {
 +        // Supprimer les deux-points initiaux et le nom du fichier
 +        $cleanPath = trim($path, ':');
 +        $parts = explode(':', $cleanPath);
 +        
 +        // Retirer le dernier élément (logo.png, etc.)
 +        array_pop($parts);
 +        
 +        return implode(' : ', $parts);
 +    }
 +}
 +?>
 </code> </code>
 </adm> </adm>
Ligne 78: Ligne 162:
  
 class helper_plugin_namespacelogo extends DokuWiki_Plugin { class helper_plugin_namespacelogo extends DokuWiki_Plugin {
 +
 +    protected $supportedFormats = ['logo.png', 'logo.jpg', 'logo.jpeg', 'logo.gif', 'logo.svg'];
  
     /**     /**
-     * Obtenir le logo du namespace actuel+     * Obtenir le logo du namespace actuel (avec fallback hiérarchique)
      * @return string|null HTML du logo ou null si aucun logo trouvé      * @return string|null HTML du logo ou null si aucun logo trouvé
      */      */
Ligne 87: Ligne 173:
                  
         $ns = getNS($ID);         $ns = getNS($ID);
 +        $logoPath = $this->_findLogoPath($ns);
                  
-        if (empty($ns)) { +        if ($logoPath) {
-            return null; +
-        } +
-         +
-        $logoPath = ':' . $ns . ':logo.png'; +
-         +
-        if (@media_exists($logoPath)) {+
             $imgUrl = ml($logoPath);             $imgUrl = ml($logoPath);
-            return '<img src="' . $imgUrl . '" alt="Logo ' . hsc($ns) . '" class="ns-logo" />';+            $nsName = $this->_extractNamespaceFromPath($logoPath); 
 +            return '<img src="' . $imgUrl . '" alt="Logo ' . hsc($nsName) . '" class="ns-logo" />';
         }         }
                  
Ligne 108: Ligne 190:
      */      */
     public function hasLogo($ns) {     public function hasLogo($ns) {
-        $logoPath = ':' . $ns . ':logo.png'; +        return $this->_findLogoPath($ns) !== null; 
-        return @media_exists($logoPath);+    } 
 + 
 +    /** 
 +     * Obtenir le chemin du logo pour un namespace spécifique 
 +     * @param string $ns Namespace 
 +     * @return string|null 
 +     */ 
 +    public function getLogoPath($ns) { 
 +        return $this->_findLogoPath($ns); 
 +    } 
 + 
 +    /** 
 +     * Trouver le chemin du logo avec fallback hiérarchique 
 +     * @param string $ns Namespace de départ 
 +     * @return string|null 
 +     */ 
 +    protected function _findLogoPath($ns) { 
 +        $hierarchy = $this->_buildNamespaceHierarchy($ns); 
 +         
 +        foreach ($hierarchy as $checkNs) { 
 +            foreach ($this->supportedFormats as $format) { 
 +                $path = ':' . $checkNs . ':$format; 
 +                 
 +                if (@media_exists($path)) { 
 +                    return $path; 
 +                } 
 +            } 
 +        } 
 +         
 +        return null; 
 +    } 
 + 
 +    /** 
 +     * Construire la hiérarchie des namespaces 
 +     * @param string $ns 
 +     * @return array 
 +     */ 
 +    protected function _buildNamespaceHierarchy($ns) { 
 +        $hierarchy = []; 
 +         
 +        if (!empty($ns)) { 
 +            $hierarchy[] = $ns; 
 +        } 
 +         
 +        $parts = explode(':', $ns); 
 +        while (count($parts) > 1) { 
 +            array_pop($parts); 
 +            $parentNs = implode(':', $parts); 
 +            if (!empty($parentNs)) { 
 +                $hierarchy[] = $parentNs; 
 +            } 
 +        } 
 +         
 +        $hierarchy[] = ''; 
 +         
 +        return $hierarchy; 
 +    } 
 + 
 +    /** 
 +     * Extraire le namespace du chemin 
 +     @param string $path 
 +     * @return string 
 +     */ 
 +    protected function _extractNamespaceFromPath($path) { 
 +        $cleanPath = trim($path, ':'); 
 +        $parts = explode(':', $cleanPath); 
 +        array_pop($parts); 
 +         
 +        return implode(' : ', $parts);
     }     }
 } }
 +?>
 </code> </code>
 </adm>  </adm> 
Ligne 138: Ligne 289:
         max-height: 80px;         max-height: 80px;
     }     }
 +}
 +
 +/* Indicateur visuel du fallback (optionnel) */
 +.ns-logo-container.fallback-parent {
 +    border-left: 3px solid #ccc;
 +    padding-left: 1em;
 } }
 </code> </code>
 </adm> </adm>
 +----
 +
 +===== Fonctionnalités intégrées =====
 +
 +
lumo/creation_plugin_dokuwiki_namespacelogo/accueil.1773681870.txt.gz · Dernière modification : de estro

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki