0 view
FAQ — Écrire un addon : les questions qui reviennent
Unread message

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é.


Forum activity
There is 0 user on the forum
no visitor
Statistics
  • 72 topics created
  • 0 message posted
  • 63 announcements
  • 1 participant

Manage my cookies

The site only places the cookies it needs to work: they do not require your consent. The other services belong to other companies; they only load if you accept them. Your choice is kept for six months, and you can change it at any time.

Needed by the site Always active

  • __Host-session Keeps you logged in and protects forms against fraudulent submissions. Until the browser is closed; one year with “Remember me”
  • nf_consent Keeps the choices you make in this window. 6 months
  • nf_fuseau Shows dates and times in your time zone. 1 year
  • Browser storage Keeps your choice between day and night mode, and the layout chosen for the list of articles. Until you clear it

Videos

Videos embedded in pages: the player comes from the platform, which receives your IP address and may place its cookies.

Music

Tracks and playlists embedded in pages: the player comes from the platform, which receives your IP address and may place its cookies.