Dokos permet désormais aux applications et aux administrateurs de fournir leurs propres icônes SVG pour enrichir l'interface utilisateur. Ces icônes personnalisées peuvent être utilisées sur les types de documents, les boutons, les tableaux de bord et d'autres composants de l'interface, offrant une flexibilité accrue pour adapter l'apparence de Dokos à l'identité visuelle de votre organisation.
ma-societe-logo). Utilisez des lettres minuscules, des chiffres et des tirets pour éviter les conflits.<svg> sans scripts ni gestionnaires d'événements. Dokos nettoie automatiquement le code pour supprimer les éléments potentiellement dangereux.Exemple — Maison Verte SARL Maison Verte SARL souhaite utiliser une icône personnalisée pour son type de document "Projet client". L'administrateur crée une icône nommée
maison-verte-projetet colle le code SVG suivant :<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24"> <path fill="currentColor" d="M12 2L4 12l8 10 8-10z"/> </svg>Après enregistrement, cette icône est disponible dans le sélecteur d'icônes pour les types de documents.
Les applications Dokos peuvent fournir leurs propres icônes personnalisées en incluant des fichiers SVG dans le dossier icons de l'application. Ces icônes sont automatiquement enregistrées lors de l'installation ou de la mise à jour de l'application.
Structure du dossier :
mon_application/
├── icons/
│ ├── icone1.svg
│ ├── icone2.svg
│ └── ...
├── hooks.py
└── ...
Configuration dans hooks.py :
# hooks.py
def get_hooks():
return {
"custom_icons": [
"mon_application/icons/icone1.svg",
"mon_application/icons/icone2.svg",
]
}
Bon à savoir :
- Les icônes fournies par une application sont disponibles pour tous les sites où l'application est installée.
- Le nom de l'icône est dérivé du nom du fichier SVG (ex. :
icone1.svg→icone1).- Si une icône fournie par une application porte le même nom qu'une icône existante (Lucide ou personnalisée), l'icône de l'application sera prioritaire.
Exemple — Bureau Moderne Bureau Moderne utilise un type de document personnalisé "Contrat fournisseur". L'administrateur attribue l'icône
contrat(créée précédemment) à ce type de document. Désormais, tous les liens vers les contrats fournisseurs dans l'interface affichent cette icône, facilitant leur identification visuelle.
Les icônes personnalisées peuvent également être utilisées dans des scripts clients pour personnaliser des boutons ou des éléments d'interface.
Exemple — Ajouter un bouton avec une icône personnalisée :
// Dans un script client
frappe.ui.form.on("Sales Order", {
refresh(frm) {
frm.add_custom_button(__("Envoyer au fournisseur"), function() {
// Logique du bouton
}).addClass("btn-primary").prepend(
frappe.utils.icon("ma-societe-envoyer", "md")
);
}
});
Bon à savoir : Les modifications apportées à une icône sont immédiatement visibles dans toute l'interface, y compris sur les types de documents qui l'utilisent.
Attention :
- La suppression d'une icône est définitive.
- Si l'icône est utilisée sur un type de document, elle sera remplacée par l'icône par défaut du type de document.
- Les icônes fournies par une application ne peuvent pas être supprimées via l'interface. Pour les supprimer, désinstallez ou mettez à jour l'application.
<svg> uniques et valides sont acceptés. Les icônes contenant plusieurs éléments ou des balises non autorisées seront rejetées.ma-societe-logo).viewBox="0 0 24 24" pour garantir un rendu optimal.fill="currentColor" pour que l'icône hérite de la couleur du texte environnant. Cela permet une intégration harmonieuse avec le thème de Dokos.<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24">
<path fill="currentColor" d="M12 2L4 12l8 10 8-10z"/>
</svg>
Points clés :
xmlns : Déclare l'espace de noms SVG.viewBox="0 0 24 24" : Définit la zone de dessin.width="24" height="24" : Définit la taille par défaut.fill="currentColor" : Permet à l'icône d'hériter de la couleur du texte.<svg> valide. Utilisez un validateur SVG en ligne pour vérifier votre code.viewBox : Assurez-vous que l'attribut viewBox est correctement défini (ex. : viewBox="0 0 24 24").viewBox ou redessinez l'icône.Les icônes personnalisées peuvent être intégrées dans les formats d'impression pour ajouter une touche visuelle à vos documents.
Exemple — Ajouter une icône dans un format d'impression :
<!-- Dans un format d'impression personnalisé -->
<div class="header">
<div class="logo">
{{ frappe.utils.icon("ma-societe-logo", "lg") }}
</div>
<h1>{{ doc.name }}</h1>
</div>
Les icônes personnalisées peuvent également être utilisées dans des scripts serveur pour générer des contenus dynamiques.
Exemple — Générer un rapport avec des icônes :
# Dans un script serveur
from frappe.utils import icon
def get_report_data():
data = []
for row in frappe.db.get_all("Task", fields=["name", "status"]):
icon_name = "check-circle" if row.status == "Completed" else "alert-circle"
data.append({
"task": row.name,
"status": f"{icon(icon_name, 'sm')} {row.status}"
})
return data
Les icônes personnalisées peuvent être utilisées dans les configurations de tableau de bord pour améliorer la lisibilité.
Exemple — Configurer un tableau de bord avec des icônes :
# Dans la configuration d'un tableau de bord
dashboard_config = {
"cards": [
{
"label": "Projets en cours",
"value": frappe.db.count("Project", {"status": "Open"}),
"indicator": "blue",
"icon": "ma-societe-projet"
},
{
"label": "Tâches terminées",
"value": frappe.db.count("Task", {"status": "Completed"}),
"indicator": "green",
"icon": "check-circle"
}
]
}
Les icônes personnalisées offrent une flexibilité accrue pour adapter l'interface de Dokos à vos besoins spécifiques. Que ce soit pour renforcer l'identité visuelle de votre organisation, améliorer la clarté des types de documents ou personnaliser des composants d'interface, cette fonctionnalité vous permet de créer une expérience utilisateur plus intuitive et cohérente.
Pour aller plus loin, consultez les ressources suivantes :