0 vue
FAQ — Écrire un addon : les questions qui reviennent
Message non lu

Les réponses courtes aux questions qu'on se pose en écrivant son premier module, widget ou thème. Chacune renvoie au tutoriel ou au guide qui en dit plus.

Module, widget ou thème : lequel écrire ?

  • Un module a ses propres pages, à sa propre adresse (/astuces), et souvent ses tables et sa page d'administration.
  • Un widget est un bloc qu'on pose dans une zone d'une page, avec l'éditeur en direct : un message, un compteur, les dernières entrées d'un module.
  • Un thème dessine toutes les pages : l'en-tête, les zones, les couleurs, les polices.

Pour commencer, le widget est le plus court : Mon premier widget.

Mon texte reste en français sur une page anglaise

Chaque texte affiché passe par $this->lang('…'), et l'addon porte ses traductions dans langs/fr.php, langs/en.php, de, es, it et pt. La clé de chaque ligne est l'empreinte du texte français : hash('crc32b', 'Le texte français'). Si la traduction manque, ou si sa clé ne correspond pas au texte exact — une apostrophe, un espace —, le site affiche le texte français.

Ma page répond « page introuvable »

  • L'adresse n'est pas dans les routes de __info(), ou le module est désactivé.
  • Le checker n'a rien rendu : c'est sa façon de dire « introuvable ». Pour une page qui n'a rien à charger (« Nouvelle astuce »), il rend [NULL] : un tableau vide vaut « rien ».

Où voir les erreurs de mon code ?

Administration → Monitoring → Journal des erreurs : chaque erreur PHP, avec le fichier et la ligne. Les erreurs de JavaScript sont dans la console du navigateur (touche F12).

Comment afficher un texte venu de la base sans risque ?

Avec nf_texte() : <?php echo nf_texte($astuce['title']) ?>. Les caractères qui comptent en HTML sont échappés, et un texte saisi par quelqu'un ne peut pas devenir du code dans la page. Pour garder ses retours à la ligne : nl2br(nf_texte(…)).

Puis-je écrire du JavaScript dans une vue ?

Un <script> écrit dans une vue reçoit tout seul le jeton qu'exige la politique de sécurité du site. Mais un onclick="…" est refusé : la politique interdit le code dans les attributs. Le mieux reste un fichier js/ chargé par $this->js('nom'), qui lit ses données dans des attributs data-. jQuery n'est plus chargé : NF.ready() attend que la page soit prête. Le widget « Compte à rebours » montre tout cela.

Comment afficher une date ?

nf_date_heure() ou nf_date() : la date dans le fuseau du visiteur, au format de sa langue. Pour enregistrer une heure saisie, nf_heure_saisie() la passe dans le fuseau du site. Jamais date() pour l'affichage : il écrit l'heure du serveur. Le « Compte à rebours » suit une heure de la saisie à l'affichage.

Mon widget a besoin d'un module

Déclare-le dans __info() : 'requires' => ['astuces']. Sans le module, le widget ne s'affiche pas, l'éditeur en direct ne le propose pas, et « Ajouter » refuse de l'installer seul. Si le module est seulement un plus, consulte-le sans le déclarer : $this->module('talks') rend le module s'il est installé, et is_enabled() dit s'il est actif.

Comment faire évoluer les tables de mon module ?

Une nouvelle table va dans install/install.sql, avec CREATE TABLE IF NOT EXISTS. Une évolution d'une table déjà livrée — une colonne, des données à déplacer — va dans une migration : install/migrations/AAAA_MM_JJ_nom.up.sql, jouée une seule fois, à la mise à jour. Les tutoriels « Astuces » 2.0 et 3.0 en écrivent, et expliquent dans quel ordre le site les joue.

Quelle version de NeoFrag déclarer dans depends ?

La plus ancienne sur laquelle tu as essayé ton addon. Le site refuse d'installer l'addon sur une version plus ancienne, et le dit.

Comment partager mon addon ?

Ouvre un sujet dans le forum de son type — Modules, Widgets ou Thèmes — avec son archive .zip jointe : ce qu'il fait, une capture, et la version de NeoFrag sur laquelle tu l'as essayé.


Activité du forum
Il y a 3 utilisateurs sur le forum
3 visiteurs
Statistiques
  • 72 sujets créés
  • 0 message posté
  • 63 annonces
  • 1 participant

Gérer mes cookies

Le site ne dépose que les cookies nécessaires à son fonctionnement : ils ne demandent pas votre accord. Les autres services appartiennent à d’autres sociétés ; ils ne se chargent que si vous les acceptez. Votre choix est gardé six mois, et vous pouvez le changer à tout moment.

Nécessaires au site Toujours actifs

  • __Host-session Garde votre connexion et protège les formulaires contre les envois frauduleux. Jusqu’à la fermeture du navigateur ; un an avec « Se souvenir de moi »
  • nf_consent Garde les choix que vous faites dans cette fenêtre. 6 mois
  • nf_fuseau Affiche les dates et les heures dans votre fuseau horaire. 1 an
  • Stockage du navigateur Garde votre choix entre le mode jour et le mode nuit, et la présentation choisie pour la liste des articles. Jusqu’à ce que vous le vidiez

Vidéos

Les vidéos intégrées aux pages : le lecteur vient de la plateforme, qui reçoit votre adresse IP et peut déposer ses cookies.

Musique

Les morceaux et listes de lecture intégrés aux pages : le lecteur vient de la plateforme, qui reçoit votre adresse IP et peut déposer ses cookies.