Comme le fait remarquer mimi68, j'aimerais nuancer ma remarque de façon temporelle : à l'heure actuelle, celle-ci est pertinente mais avec le temps et l'arrivée de plus de tuto 1.4, elle ne servira plus à rien.
Comme le fait remarquer mimi68, j'aimerais nuancer ma remarque de façon temporelle : à l'heure actuelle, celle-ci est pertinente mais avec le temps et l'arrivée de plus de tuto 1.4, elle ne servira plus à rien.
Exemple, on cherche à ajouter un lien permettant d'afficher pour chaque catégorie, tous les contenus qui lui sont associés.
Dans votre application Backend, sélectionnez votre module, puis créez/éditez votre fichier config/generator.yml
object_actions permet de rajouter des actions pour chaque élément de votre liste.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 config: actions: ~ fields: ~ list: object_actions: _edit: ~ _delete: ~ getContenu: { label: 'Voir les contenus', action: getContenu }
label: Affichera le lien avec le texte choisi
action: appelle l'action executeGetContenu dans actions.class.php
Dans votre fichier actions.class.php du même module, ajoutez l'action:
En premier lieu on utilise un flash. Le site de Symfony nous dit qu'un flash est un "message éphémère stocké dans la session de l'utilisateur qui sera automatiquement supprimé après la requête suivante".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 public function executeGetContenu($request) { $this->getUser()->setFlash('categorie', $request->getParameter('id')); $this->redirect('@route_contenu'); }
Ici on enregistre l'id de la ligne que l'on souhaite voir, dans un identifiant "categorie".
Et on redirige l'utilisateur vers la page des contenus.
Pour afficher seulement les contenus dépendant de notre catégorie, Symfony nous propose d'utiliser des filtres.
Dans le module contenu de votre Backend, éditez le fichier actions.class.php comme ci-dessous.
Tout d'abord on va modifier l'action executeIndex en récupérant le flash dans la session de l'utilisateur, en écrivant simplement un getFlash avec le nom de l'identifiant.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 public function executeIndex(sfWebRequest $request) { $categorie = $this->getUser()->getFlash('categorie'); $this->setFilters(array( 'categorie_id' => $categorie)); parent::executeIndex($request); }
Ensuite on rajoute dans les filtres l'élément que l'on veut filtrer, ici le champs categorie_id, qui aura pour valeur celle que l'on a passé avec le Flash.
Pour terminer on appelle le reste de la fonction de executeIndex (que l'on peut voir dans le cache).
Considérons une table comportant un champs stockant le chemin de l'image enregistrée et une description.
Lorsque l'on génère un module image dans le backend, on obtient une présentation des champs id, name et file.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Image: columns: name: { type: string(255), notnull: true } file: { type: string(255) }
Si on enregistre une image, elle sera renommée en md5.extension, et ne nous affichera pas l'image mais son nom.
Pour obtenir l'image, il faut créer un template _photo.php permettant de générer cette image en utilisant l'helper image_tag.
Tout d'abord dans le fichier generator.yml de votre module
Dans le dossier templates du module, créez le fichier _photo.php. Ne pas oublier de créer le dossier photos dans le dossier web/uploads.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 config: actions: ~ fields: ~ list: hide: [id] # permet de cacher le champs id display: [name, _photo] filter: ~ form: ~ edit: ~ new: ~
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 <?php echo image_tag('/uploads/photos/'.$image->getFile()); ?>
Si vous avez un formulaire en bas de votre billet pour permettre à vos lecteurs de laisser un commentaire par exemple, vous ne voulez sans doute pas tout l'attirail de widgets que vous offre votre éditeur wysiwyg préfére tinyMCE, mais seulement quelques boutons. Nous allons ensemble plonger dans la config de sfExtraWidgetsPlugin pour voir comment obtenir exactement le nombre de boutons que nous souhaitons.
Première des choses, vous devez installer sfExtraWidgetsPlugin et suivre les indications d'utilisation de tinyMCE données sur cette page.
Ensuite, allez dans le répertoire du plugin installé et rendez-vous dans le sous-répertoire lib/widget. Cherchez le fichier sfExtraWidgetFormRichTextarea.class.php, copiez-le et renommez-le comme bon vous semble. Disons par exemple sfRichTextareaLite.class.php. Ouvrez-le et donnez à la classe qu'elle contient exactement le même nom que vous avez donné au fichier. Dans notre cas ca donne ceci.
devient
Code : Sélectionner tout - Visualiser dans une fenêtre à part class sfExtraWidgetFormRichTextarea extends sfWidgetFormTextareaAttention: Remarquez que nous n'avons pas modifié l'héritage. Le nom de la classe mère demeure inchangé. Ceci fait, désormais, pour appeler votre éditeur, au lieu de faire
Code : Sélectionner tout - Visualiser dans une fenêtre à part class sfRichTextareaLite extends sfWidgetFormTextareavous devrez faire
Code : Sélectionner tout - Visualiser dans une fenêtre à part 'mytextarea' => new sfExtraWidgetFormRichTextearea()Bon, nous sommes à mi-chemin. Abordons maintenant les config proprement dites. Si vous avez suivi les instructions d'installations, vous avez dû mettre certains codes dans le fichier app.yml de votre application, en l'occurrence l'entrée tinymce: sous all:. Recopiez exactement ce code et collez le ailleurs dans le fichiers. Changez l'entrée tinymce que vous venez de coller en tinymcelite (ou en ce que vous voulez). Là-dessous, repérez les entrées suivantes:
Code : Sélectionner tout - Visualiser dans une fenêtre à part 'mytextarea' => new sfRichTextareaLite()
Ce sont là celles qui nous intéressent. Ces lignes correspondent aux trois barres de l'éditeur original avec leurs boutons respectifs. Dans theme_advanced_buttons1, supprimez les noms de tous les boutons dont vous n'avez pas besoins, (supprimez aussi les caractères | avec la virgule suivante si vous ne voulez pas de séparateurs dans les boutons) puis couper/coller à partir de theme_advanced_buttons2 et theme_advanced_buttons3 ceux que vous souhaitez ajouter.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 theme_advanced_buttons1: "save,bold,italic,underline,strikethrough,emotions,sub,sup,justifyleft,justifycenter,justifyright,justifyfull,bullist,numlist,formatselect,styleselect" theme_advanced_buttons2: "cut,copy,paste,pastetext,pasteword,|,search,replace,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,|,insertdate,inserttime,|,pagebreak" theme_advanced_buttons3: "tablecontrols,|,charmap,emotions,media,|,fullscreen,code,cleanup,|,visualaid"
On va revenir dans notre fichier sfRichTextareaLite.class.php. Dans la fonction configure, vous pouvez configurer la largeur et la hauteur de votre éditeur personnalisé.
Abordons la méthode suivante de la classe: public function render(...)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 public function configure($options = array(), $attributes = array()) { $this->setAttribute('class', 'mceEditor'); $this->addOption('width', 460); $this->addOption('height', 180); parent::configure($options, $attributes); }
A l'intérieur vous voyez l'attribut $js qui contient beaucoup de configurations. C'est en fait le code js d'initialisation de votre éditeur, qui prend ses valeurs à partir de vos options dans le fichier app.yml. Donc remplacez dans toutes les occurrence de sfConfig::get('app_tinymce...') le morceau tinymce par la nouvelle entrée que vous avez spécifiée plus haut dans le fichier app.yml. Dans notre cas,devient
Code : Sélectionner tout - Visualiser dans une fenêtre à part sfConfig::get('app_tinymce_theme_advanced_buttons1'). On va désactiver les barres d'outils non voulues comme l'indique la docde tinyMCE. Supprimez donc les valeurs fournis pour theme_advance_buttons2 et theme_advance_button3. Vous devez obtenir quelque chose comme ceci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part sfConfig::get('app_tinymcelite_theme_advanced_buttons1')Ensuite, il faut déclarer la désactivation des boutons dont nous ne voulons pas dans notre éditeur. Là encore, nous nous appuyons sur la doc de tinyMCE
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 // Theme options theme_advanced_buttons1 : '" . sfConfig::get('app_tinymcelite_theme_advanced_buttons1') . "', theme_advanced_buttons2 : '', theme_advanced_buttons3 : '',
Ouvrez quelque part sous //Theme options une ligneet citez dans les simples quotes tous les boutons que vous ne voulez pas voir apparaître en les séparant d'une virgule. Vous en avez sans doute supprimé lors de l'édition du fichier app.yml. Reportez-vous à l'entrée tinymce d'où vous aviez fait la copie pour retrouver leurs noms. Si vous ne citez pas les noms des boutons à désactiver, ils s'afficheront quand même, même si vous les supprimez.
Code : Sélectionner tout - Visualiser dans une fenêtre à part theme_advanced_disable :''
Ouf, on est à la fin. Vous voulez admirer votre zoooli éditeur ? Sauvegardez tous vos fichiers modifiés et dans votre form, faites 'mytextarea' => sfRichTextareaLite() si vous ne l'avez pas encore fait et contempler le résultat dans votre navigateur.
Une dernière pour tenir la route, laissez aussi de simple quotes vides devant theme_advanced_statusbar_location : si vous ne voulez pas de la barre d'état qui s'affiche en dessous de l'éditeur.
Quand vous lisez la documentation symfony, on vous parle surtout des url_for() et des link_to() pour faire vos liens. C'est donc naturellement que vous allez créer vos boutons de cette manière:
En parcourant l'API de l'helper pour les URLs, je suis tombée sur button_to(), dont la syntaxe est similaire à link_to, et qui permet de générer des boutons dans des cas simples:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 <a href="<?php echo url_for('@homepage')?>"><input type="button" name="homepage" value="Homepage"/></a> <?php echo link_to('<input type="button" name="homepage" value="Homepage"/>', '@homepage') ?>
Non seulement, cela vous épargne de coder l'entièreté de l'input mais en plus, l'helper génère également le lien. Le seul point qui pourrait vous déranger est l'absence de l'attribut "name" dans le code.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 //utilisation avec une route connue style homepage: nom de la valeur de l'input + nom de la route button_to('Games','@homepage') //utilisation avec une route d'une collection, sans passage de paramètre button_to('New', 'game/new') //utilisation avec une route d'une collection, avec paramètre button_to('Edit','game/edit?id='.$game->getId()) //utilisation un peu lourde dans le cas de routes "personnalisées" button_to('Back to Game', '@game_show_game?id='.$game->getId().'&name_game_slug='.$game->getNameGameSlug())
Symfony par une débutante - Elgg - PHP
Je suis peut-être diplômée en archéologie mais je ne fouille pas le net pour décrypter le langage SMS, pour lire du code sans la balise du même nom..
"The cake is lie" - Doug Rattman, Portal
Symfony maintient actuellement deux versions principales:
- Symfony 3.x.y
- Symfony 4.x.y
Nous avons ici omis les versions qui ne sont plus maintenues par le framework https://symfony.com/roadmap
Le versioning de symfony fonctionne ainsi, par exemple la version 4.x.y
- 4 correspond à la MAJOR, cela signifie que la rétrocompatibilité ne peut-être assuré. (Si vous développez un projet en symfony 3 et que vous souhaitez migrer, vous devez vous assurer de la rendre compatible avec la version 4 https://symfony.com/doc/current/setu...ade_major.html)
- x correspond à la MINOR pour l'ajout d'une nouvelle fonctionnalité.
- y correspond au PATCH pour la correction d'un bug au sein du framework.
Le choix la version doit se porter sur une version stable avec un support sur le long terme, généralement celle conseillée par la communauté https://symfony.com/doc/current/setup.html .
Les dernières versions assurent un support ainsi que de nouvelles fonctionnalités et correctif du framework.
Vous devez aussi prendre une version compatible avec votre version php.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager