20 avr. 2024 | Connexion

Blog

Ajouter Select2 (Jquery) à Symfony 5 avec Webpack Encore

Ajouter Select2 (Jquery) à Symfony 5 avec Webpack Encore

Développement web
Symfony Javascript

il y a 2 ans citizenz7 2 commentaires 3402 lectures

### Symfony ###

$ symfony new monprojet --full --version=lts

### NodeJS ###

$ sudo apt install nodejs

Sous Ubuntu 21.10 : NodeJS v17.1.0

### Nvm ###
Un petit utilitaire hyper pratique poir chnager de version de NodeJS à la volée : NVM

$ sudo apt install curl
$ curl https://raw.githubusercontent.com/creationix/nvm/master/install.sh | bash
$ source ~/.profile

On installe la dernière version de NodeJS :

$ nvm install node

Si vous voulez instgaller une version 16 de NodeJS :

$ nvm install 16

Si vous voulez utiliser la version 16 de NodeJS :

$ nvm use 16
Now using node v16.4.2 (npm v7.18.1)

### Webpack-Encore ###

$ composer require symfony/webpack-encore-bundle
$ yarn install

Renommer le fichier /assets/styles/app.css en app.scss
Modifier le fichier /assets/app.js :

../..
import './styles/app.scss';
../..

Décommenter

.enableSassLoader()

dans le fichier webpack.config.js (fichier à la racine du projet)

$ yarn add sass-loader node-sass --save-dev

Vérifiez bien que le fichier /templates/base.html.twig possède les lignes adéquates pour "appeler" Webpack :

{% block stylesheets %}{{ encore_entry_link_tags('app') }}{% endblock %}

et

{% block javascripts %}{{ encore_entry_script_tags('app') }}{% endblock %}

Première compilation :

$ yarn encore dev-server

On installe PostCSS :

$ yarn add postcss-loader autoprefixer --dev

On crée un fichier postcss.config.js à la racine du projet avec :

module.exports = {
    plugins: {
        autoprefixer: {}
    }
}

### BOOTSTRAP ###

On installe Bootstrap 5 :

$ yarn add bootstrap @popperjs/core

Puis on modifie le fichier /assets/app.js :

import { Tooltip, Toast, Popover } from 'bootstrap';

Fichier custom.css :

On crée un  fichier custom.css dans /assets/style qui servira à y déposer notre CSS perso.
Puis on importe tout ça dans /assets/styles/app.scss (on efface les 2 ou 3 lignes de CSS et on met le code suivant à la place) :

@import "custom";
@import "~bootstrap/scss/bootstrap";

Et on recompile :

$ yarn encore dev-server

Si vous n'avez pas d'erreur de compilation, Boostrap devrait être installé !

### SELECT2 ET JQUERY ###
On installe Jquery et Select2 :

$ yarn add jquery
$ yarn add select2

On "importe" Selerct2 dans le fichier assets/styles/app.scss :

@import "~select2/dist/css/select2.css";

On importe déclare Jquery et Select2 dans le fichier assets/app.app.js :

import $ from 'jquery';
require('select2')
$('select').select2();

Ici on vient d'appliquer Select2 à la balise <select> de tous les fichiers du site.

Et voila !

2 commentaires


Birzat, le 11-01-2023 à 10:34:57

Bonjour, Merci pour cet article :) Petite question : dans votre exemple comment faire pour utiliser select2 dans un autre fichier js ? Exemple : dans un fichier autre-fichier.js $(document).ready(function() { $('#exemple').select2() }); En faisant cela, j'obtiens le message d'erreur : "Uncaught TypeError: $(...).select2 is not a function" Auriez-vous une idée ? Merci d'avance.

citizenz, le 20-01-2023 à 19:42:01

Vous pouvez placer la déclaration d'import de Select2 dans un autre fichier JS (exemple : select2.js) mais vous devez le déclarer dans webpack.config.js au niveau des addEntry : .addEntry('select', './assets/select2.js').

Nb d'articles actifs : 46 | Nb de commentaires : 31 | Nb de catégories : 8 | Nb de tags : 32 | Nb total de lectures : 188 712
2024 citizenz.info • Some rights reserved GPLv3 • Version 3.3.4

Au printemps, j’aime bien pisser du haut des remparts au lever du soleil… Y’a une belle vue ! (Perceval, Kaamelott, Livre IV, Tous les matins du monde, 2e partie)