xref: /plugin/pagesicon/DOKU (revision c8e99a276375ecec8f29dd837c92b2b86eeb3f41)
1b603bbe1SLORTET====== Pagesicon Plugin ======
2b603bbe1SLORTET
3b603bbe1SLORTET---- plugin ----
4b603bbe1SLORTETdescription: Gère et expose des icônes de page et de média
5b603bbe1SLORTETauthor     : Valentin LORTET
6b603bbe1SLORTETemail      : contact@valentinlortet.fr
7b603bbe1SLORTETtype       : Action, Helper
8a3ea184dSLORTETlastupdate : 2026-03-12
9b603bbe1SLORTETcompatible : Librarian
10b603bbe1SLORTETdepends    :
11b603bbe1SLORTETconflicts  :
12b603bbe1SLORTETsimilar    :
13b603bbe1SLORTETtags       : Media, UI, Navigation, Helper, Icons
14b603bbe1SLORTET
15b603bbe1SLORTETdownloadurl: https://github.com/Lortet/dokuwiki-plugin-pagesicon/zipball/master
16b603bbe1SLORTETbugtracker : https://github.com/Lortet/dokuwiki-plugin-pagesicon/issues
17b603bbe1SLORTETsourcerepo : https://github.com/Lortet/dokuwiki-plugin-pagesicon/
18b603bbe1SLORTETdonationurl:
19b603bbe1SLORTETscreenshot_img :
20b603bbe1SLORTET----
21b603bbe1SLORTET
22b603bbe1SLORTET===== Installation =====
23b603bbe1SLORTET
24b603bbe1SLORTETInstaller le plugin depuis le [[fr:plugin:extension|Gestionnaire d'extensions]] avec l'URL ci-dessus, ou en copiant le dossier dans ''lib/plugins/pagesicon''.
25b603bbe1SLORTET
26b603bbe1SLORTET===== Description =====
27b603bbe1SLORTET
28b603bbe1SLORTETLe plugin **pagesicon** permet :
29b603bbe1SLORTET  * d'afficher une icône en haut de la page ;
30b603bbe1SLORTET  * d'utiliser cette icône comme favicon ;
31*c8e99a27SLORTET  * d'afficher une icône devant les liens internes wiki ;
32b603bbe1SLORTET  * de gérer les icônes depuis l'action de page ''?do=pagesicon'' ;
33b603bbe1SLORTET  * de gérer deux variantes : ''big'' et ''small'' ;
34b603bbe1SLORTET  * d'exposer un helper pour les autres plugins.
35b603bbe1SLORTET
36b603bbe1SLORTETLe plugin travaille sur la page courante. Il n'y a pas de cible externe à saisir pour l'écran de gestion.
37b603bbe1SLORTET
38b603bbe1SLORTET===== Paramètres =====
39b603bbe1SLORTET
40b603bbe1SLORTET^ Nom ^ Description ^ Valeur par défaut ^
41b603bbe1SLORTET| icon_name | Noms candidats pour l'icône ''big'' (séparés par '';''). Supporte ''~pagename~''. | ''~pagename~;icon_thumbnail;icon'' |
42b603bbe1SLORTET| icon_thumbnail_name | Noms candidats pour l'icône ''small'' (séparés par '';''). Supporte ''~pagename~''. | ''~pagename~;icon'' |
43b603bbe1SLORTET| default_image | Image par défaut (mediaID), utilisée seulement quand une méthode helper demande explicitement un fallback. | '''' |
44b603bbe1SLORTET| icon_size | Taille de l'icône affichée en haut de page (px). | ''55'' |
45b603bbe1SLORTET| extensions | Extensions d'images autorisées (séparées par '';''). | ''svg;png;jpg;jpeg'' |
46b603bbe1SLORTET| show_on_top | Afficher l'icône en haut de page. | ''true'' |
47b603bbe1SLORTET| show_as_favicon | Utiliser l'icône comme favicon. | ''true'' |
48a3ea184dSLORTET| parent_fallback | Politique d'héritage si la page n'a pas d'icône : aucune, parent direct, ou première icône trouvée en remontant les parents. | ''none'' |
49*c8e99a27SLORTET| link_icons | Afficher une icône devant les liens internes : ''none'' (désactivé), ''existing'' (pages existantes uniquement), ''all'' (toutes les pages). | ''none'' |
50b603bbe1SLORTET
51b603bbe1SLORTET===== Utilisation =====
52b603bbe1SLORTET
53b603bbe1SLORTETDepuis une page, utiliser l'action **Gérer l'icône** puis :
54b603bbe1SLORTET  * importer une icône ''big'' ;
55b603bbe1SLORTET  * importer une icône ''small'' ;
56b603bbe1SLORTET  * supprimer l'icône actuelle.
57b603bbe1SLORTET
58b603bbe1SLORTETLe formulaire :
59b603bbe1SLORTET  * calcule les noms de fichiers autorisés à partir de la configuration ;
60b603bbe1SLORTET  * limite les extensions à la liste configurée ;
61b603bbe1SLORTET  * ouvre le gestionnaire de médias sur le namespace de la page.
62b603bbe1SLORTET
63b603bbe1SLORTET===== API Helper =====
64b603bbe1SLORTET
65b603bbe1SLORTETCharger le helper :
66b603bbe1SLORTET''$pagesicon = plugin_load('helper', 'pagesicon');''
67b603bbe1SLORTET
68b603bbe1SLORTET==== Méthodes principales ====
69b603bbe1SLORTET
70b603bbe1SLORTET^ Méthode ^ Depuis ^ Description ^
71b603bbe1SLORTET| ''getPageIconId($namespace, $pageID, $size = 'bigorsmall')'' | ''2026-03-09'' | Retourne le mediaID de l'icône d'une page, ou ''false''. |
72b603bbe1SLORTET| ''getMediaIconId($mediaID, $size = 'bigorsmall')'' | ''2026-03-09'' | Retourne le mediaID de l'icône associée à un média, ou ''false''. |
73b603bbe1SLORTET| ''getPageIconUrl($namespace, $pageID, $size = 'bigorsmall', $params = ['width' => 55], &$mtime = null, $withDefault = false)'' | ''2026-03-09'' | Retourne l'URL versionnée d'une icône de page, ou ''false''. |
74b603bbe1SLORTET| ''getMediaIconUrl($mediaID, $size = 'bigorsmall', $params = ['width' => 55], &$mtime = null, $withDefault = false)'' | ''2026-03-09'' | Retourne l'URL versionnée d'une icône associée à un média, ou ''false''. |
75b603bbe1SLORTET| ''getDefaultIconUrl($params = ['width' => 55], &$mtime = null)'' | ''2026-03-09'' | Retourne l'image par défaut à utiliser quand aucune icône n'est trouvée. |
76b603bbe1SLORTET| ''getUploadIconPage($targetPage = "")'' | ''2026-03-06'' | Retourne l'URL ''?do=pagesicon'' d'une page, ou ''null'' si non autorisé. |
77b603bbe1SLORTET| ''getUploadMediaIconPage($mediaID = "")'' | ''2026-03-06'' | Retourne l'URL de gestion d'icône associée à un média. |
78b603bbe1SLORTET| ''notifyIconUpdated($targetPage, $action = "update", $mediaID = "")'' | ''2026-03-06'' | Déclenche l'événement d'invalidation de cache. |
79b603bbe1SLORTET| ''isPageIconMedia($mediaID)'' | ''2026-03-11'' | Indique si un média doit être considéré comme une icône gérée par le plugin. |
80b603bbe1SLORTET
81b603bbe1SLORTET===== Événement =====
82b603bbe1SLORTET
83b603bbe1SLORTETLors d'un upload ou d'une suppression, le plugin émet :
84b603bbe1SLORTET  * ''PLUGIN_PAGESICON_UPDATED''
85b603bbe1SLORTET
86b603bbe1SLORTETPayload :
87b603bbe1SLORTET  * ''target_page''
88b603bbe1SLORTET  * ''action''
89b603bbe1SLORTET  * ''media_id''
90b603bbe1SLORTET
91b603bbe1SLORTETLes plugins consommateurs restent responsables de leur propre invalidation de cache.
92b603bbe1SLORTET
93b603bbe1SLORTET===== Compatibilité =====
94b603bbe1SLORTET
95b603bbe1SLORTETLes anciennes signatures de l'API sont conservées via des alias legacy.
96b603bbe1SLORTET
97b603bbe1SLORTET^ Alias historique ^ Ajout ^ Déprécié ^ Remplacement ^
98b603bbe1SLORTET| ''getPageImage(...)'' | ''2026-03-06'' | ''2026-03-09'' | ''getPageIconId(...)'' |
99b603bbe1SLORTET| ''getMediaImage(...)'' | ''2026-03-06'' | ''2026-03-09'' | ''getMediaIconId(...)'' |
100b603bbe1SLORTET| ''getImageIcon(...)'' | ''2026-03-06'' | ''2026-03-09'' | ''getPageIconUrl(...)'' |
101b603bbe1SLORTET| ''getMediaIcon(...)'' | ''2026-03-06'' | ''2026-03-09'' | ''getMediaIconUrl(...)'' |
102b603bbe1SLORTET| ''getDefaultImageIcon(...)'' | ''2026-03-09'' | ''2026-03-09'' | ''getDefaultIconUrl(...)'' |
103b603bbe1SLORTET
104b603bbe1SLORTET===== Fonctionnement =====
105b603bbe1SLORTET
106b603bbe1SLORTETLa résolution d'une icône suit l'ordre défini par la configuration :
107b603bbe1SLORTET  * noms configurés pour la variante demandée ;
108*c8e99a27SLORTET  * remplacements de ''~pagename~''.
109b603bbe1SLORTET
110a3ea184dSLORTETSi aucune icône n'est trouvée sur la page elle-même, le plugin peut aussi hériter :
111a3ea184dSLORTET  * d'aucune icône ;
112a3ea184dSLORTET  * de l'icône du parent direct ;
113a3ea184dSLORTET  * de la première icône trouvée en remontant les parents.
114a3ea184dSLORTET
115b603bbe1SLORTETLes URLs retournées par le helper sont versionnées avec un paramètre ''pi_ts'' basé sur le ''filemtime'' du média.
116b603bbe1SLORTET
117b603bbe1SLORTET===== Notes =====
118b603bbe1SLORTET
119b603bbe1SLORTET  * Le plugin ignore les pages techniques comme ''sidebar'' et ''footer'' lors de l'injection d'icône/favicon, pour éviter qu'un include de layout remplace l'icône de la page courante.
120b603bbe1SLORTET  * L'écran de gestion utilise la configuration actuelle du plugin. Si une configuration obligatoire est vide ou invalide, le plugin émet un warning PHP et n'invente pas de valeur de secours.
121