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

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'addrese 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 - `<?php` pour indiquer que c'est un fichier php - `namespace YesWiki\Custom\Field;` pour indiquer que c'est un champ de custom (remplacer `Custom` par le nom de votre extension si vous travaillez dans le dossier d'une extension) - ajouter `use Psr\Container\ContainerInterface;`et `use YesWiki\Bazar\Field\BazarField;` qui sont deux lignes nécessaires pour indiquer à l'exécuteur php les noms complet s des classes `ContainerInterface`et `BazarField`. - puis mettre le code de définition de la classe. **Il est important que le nom de la classe soit le même que le nom du fichier** class LinkToEntryField extends BazarField { } Vous devriez avoir ceci: propertyName = null ; } } 8. Ajouter ensuite la fonction qui définit le formulaire de saisie pour ce champ (ici rien, `null`) 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) 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 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: 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 : 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