Ceci est une version archivée de TutorielCreerUnChampBazarCustom à 2021-04-07 10:23:02

Tutoriel "créer un champ Bazar custom"


Introduction


Ce tutoriel permet d'ajouter un champ Bazar custom pour ajouter dans une fiche un lien vers la fiche.

Pré-requis


  • Avoir accès aux fichiers d'un YesWiki (soit en local, soit via ftp).
  • Avoir quelques bases de programmation (niveau débutant suffisant).
  • Connaître les bases du html

Instructions

1. se rendre dans le dossier `custom/` 2. créer si nécessaire le dossier `fields/` ce qui donne l'adresse complète `custom/fields/` 3. créer un fichier texte se nommant `LinkToEntryField.php`, ce qui donne le chemin complet `custom/fields/LinkToEntryField.php`. _Dans YesWiki, nous avons pour convention de nommer la fin des fichiers de code pour les champs avec `Field.php` et de les placer dans le dossier `fields/` de l'extension concernée._ 4. Modifier le fichier en ajoutant en au début - `propertyName = null ; } } ``` 8. Ajouter ensuite la fonction qui définit le formulaire de saisie pour ce champ (ici rien, `null`) ```php protected function renderInput($entry) { // No input need to be displayed for field return null; } ``` 9. Ajouter ensuite la fonction qui prépare les données à sauvegarder (ici rien, `[]` = un tableau vide) ```php public function formatValuesBeforeSave($entry) { // Return no value to save return []; } ``` 10. Ajouter ensuite la fonction affiche le lien lors de l'accès à la fiche ```php protected function renderStatic($entry) { return $this->render("@custom/field/link-to-entry.twig", [ 'entry_id' => $entry['id_fiche'], ]); } ``` Cette fonction appelle un autre fichier qui va définir le code html. Nous passons un paramètre à ce fichier : `entry_id`. `@custom/fields` permet d'indiquer que le fichier est ranger dans le dossier `custom/templates/custom/fields`. `@tags/inputs/mon-fichiers.twig` aurait indiqué que le fichier `mon-fichiers.twig` se situe dans le dossier `tools/tags/templates/inputs`. Par convention, le dossier `fields/` contient les fichiers `.twig` pour la fonction `renderStatic` et le dossier `inputs/` ceux pour la fonction `renderInput`. Le code complet du fichier est donc: ```php propertyName = null ; } protected function renderInput($entry) { // No input need to be displayed for field return null; } public function formatValuesBeforeSave($entry) { // Return no value to save return []; } protected function renderStatic($entry) { return $this->render("@custom/fields/link-to-entry.twig", [ 'entry_id' => $entry['id_fiche'], ]); } } ``` 11. pour que tout ceci fonctionne, il faut aussi définir le fichier .twig, le modèle de code html. - se rendre dans le dossier `custom` - créer si nécessaire le dossier `templates` - dans ce nouveau dossier, créer ci nécessaire le dossier `custom` - dans ce nouveau dossier, créer ci nécessaire le dossier `fields` - créer le fichier `link-to-entry.twig` dans ce dossier en faisant attention à ce que son no msoit identique à celui utilisé précédemment. - le chemin complet du fichier est donc : `custom/templates/custom/fields/link-to-entry.twig` - y copier le code suivant : ```twig Lien vers la fiche ``` Ici , nous mettons le lien vers la fiche. Il est généré grâce à la fonction `url()` qui récupère le paramètre `entry_id` fournit par le php. Noter que cette fonction est entourée de `{{` et `}}` qui est une convention de `.twig` pour indiquer qu'il faut afficher le contenu. 12. Pour utiliser ce champ,: - se rendre à la page `https://www.example.fr/?Bazar`, - créer ou modifier un formulaire - ajouter un champ `custom`(ne pas confondre avec `custom html`). - paramètre 0 : `linktoentry` 13. afficher une fiche de ce formulaire pour constater la présence du lien vers cette fiche