Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. WordPress
Code

Création d'une Single Page Application avec WordPress et Angular.js

by
Difficulty:BeginnerLength:MediumLanguages:

French (Français) translation by Terry Di Luzio (you can also view the original English article)

Final product image
What You'll Be Creating

Travailler sur un projet avec le framework Angular.js est rapide et gratifiant; sa combinaison avec WordPress peut nous permettre de réaliser rapidement une chouette SPA (Single Page Application). Les plugins et contrôles que nous offre WordPress vont nous permettre de faciliter le développement.

Réglage du thème

Nous allons commencer par créer un nouveau thème basé sur le thème générique _tk. Il s'agit d'une implementation du thème _s underscores créé par Automattic qui intègre le framework Bootstrap.

Téléchargez le thème depuis Github et placez les fichiers dans votre répertoire themes

Maintenant que notre thème _tk est en place, nous aurons besoin des packages npm angular et angular-routes à l'intérieur de notre répertoire de thème (nous utiliserons le nom angular-bootstrap)

  • On doit maintenant initialiser npm dans le répertoire thèmes avec npm init pour créer le fichier package.json, fichier que npm utilise pour gérer les projets.
  • En utilisant le flag --save dans notre commande npm install angular angular-route --save nous informons npm d'ajouter le module en tant que dépendance de notre projet.
  • Si pour la suite nous devions partager ce projet avec d'autres développeurs, il leur suffirai de lancer la commande npm install dans le même répertoire que le fichier package.json pour récupérer les packages.

Les packages seront installées dans le répertoire node_modules à l'intérieur de votre thème. Si vous regardez dans ce dossier vous verrez plusieurs fichier JS. Pour le développement de notre application nous utiliserons angular.min.js

Initialisation d'Angular

Afin de pouvoir inclure le script angular.min.js dans WordPress, nous devons modifier le ficher functions.php.

Dans functions.php, recherchez la function _tk_scripts() et ajoutez le code suivant à la suite:

Vous devrez également créer js/scripts.js - pour le moment, créez juste un fichier vierge.

Rafraichissez maintenant votre navigateur et dans les outils de développement vous devriez apercevoir angular.min.js qui est maintenant inclus.

Utilisation de partials

Angular.js permet de ne mettre à jour que certains fragments de code HTML. Afin d'exploiter ces possibilités et celles du module angular-route nous devons créer un répertoire à l'intérieur du thème que l'on nommera partials.

Dans le répertoire partials, créez un ficher nommé main.html qui nous servira de test et ajoutez du code HTML dedans. 

Localisation du chemin des partials dans WordPress

Pour qu'Angular soit capable de charger ces fragments nous devons lui fournir une URL complète. J'ai eu des difficultés à utiliser la méthode get_stylesheet_directory_uri() mais vous pouvez vous y essayer. Si cela ne fonctionne pas, utiliser l'URL complète.

Ajoutez le code suivant à la fonction _tk_scripts ci dessous, à l'endroit où vous avez ajouté angularjs et angular-route précédemment:

Si cela échoue (ce qui m'est arrivé au moment où je rédige ces lignes), écrivez "en dur" l'URL comme suit:

Activer WP-API

Pour qu'Angular puisse travailler conjointement avec WordPress, nous devons activer le plugin WP-API REST. Cette manipulation est simple, il s'agit simplement d'installer un plugin.

Téléchargez et installez le plugin depuis git et lancez la commande suivante dans votre répertoire plugins:

Activez ensuite le plugin dans le panneau wp-admin. Vous pourrez voir le résultat au format JSON à your-wordpress.com/wp-json une fois celui-ci activé.

Route de l'applications

Les routes représentent les pages spécifiques de votre blog. Nous pouvons en définir une pour notre partial main.html tout de suite et la configurer pour apparaitre sur la page d'index de notre WordPress.

Premièrement, assurez vous que l'application Angular.js soit bien définie via l'attribut ng-app et insérez le code ci-dessous dans header.php:

Nous appelons ici l'application wp grâce à l'attribut ng-app. Nous insérons également la balise base pour qu'Angular soit en mesure de trouver le JSON que nous avons activé dans WP-API.

Ajouter ce qui suit à js/scripts.js:

Maintenant dans partials/main.html ajoutez le code suivant:

Enfin dans index.php juste après get_header() ajoutez l'attribut ng-view à une balise div.

Rafraichissez la page d'index de votre site et une liste à puce des articles est maintenant affichée sur la page d'accueil.

Ce résultat est obtenu via la directive ng-controller qui invoque le controller Main depuis scripts.js; l'attribut ng-view spécifie dans quelle partie de l'application Angular doit afficher les informations.

Affichage d'un article par slug

Ajoutons maintenant une route pour afficher un article par slug.

Ouvrons le fichier js/scripts.js et ajoutons le code suivant:

En ajoutant le controller Content nous spécifions l'URI $http.get pour les articles au format JSON et spécifions le slug en tant que paramètre de filtre.

Pour ce faire nous utilisons le code suivant: $http.get('wp-json/posts/?filter[name]=' + $routeParams.slug).

Note: pour que la route /:slug fonctionne, nous devons spécifier /%postname%/ en tant que structure de permalien dans wp-admin.

Assurez vous d'ajouter le code suivant dans content.html

Si maintenant vous rafraichissez la page, vous êtes en mesure de naviguer sur votre blog grâce aux liens de la liste à puce réalisés précédemment.

Utilisation des services d'Angular dans WordPress

Nous avons jusqu'ici abordé comment créer des routes et avons commencé à travailler avec l'API wp-json. Avant de développer la logique, nous devons déjà la placer dans un endroit cohérent de notre application; cet endroit est un service Angular (dans cette exemple nous utiliserons une factory)

Créez un nouveau ficher js/services.js et ajoutez le code suivant qui nous permettra de récupérer les catégories et les articles:

Il s'agit d'une factory basique dans laquelle nous avons deux méthodes: _setTitle et _setArchivePage. Ces méthodes sont appelées depuis getPosts et getCategories afin de mettre à jour le titre de la page courante et également pour définir un nombre entier nous permettant de connaitre le numéro de la page à chercher.

Nous aurons besoin du module ngSanitize pour parser les inputs utilisateurs de notre service. A l'intérieur de votre répertoire de thème, installez le avec npm:

themeService est un objet Javascript basique qui effectue une recherche de catégorie via $http.get comme le fait la méthode getPosts. Initialisons maintenant ce service dans notre contrôlleur. Ouvrez scripts.js et modifiez le contrôlleur pour lui passer ThemeService.

N'oubliez pas d'activer le module angular-sanitize dans votre scripts.js également à la première ligne avec le code suivant: 

Enfin, assurez vous que le fichier js/services.js et le module angular-sanitize soient bien mis à disposition de WordPress. Pour ce faire, modifions le fichier functions.php and ajoutons le code suivant juste avant l'appel à wp_localize_script:

Nous devons maintenant mettre à jour le fragment dans le fichier main.html afin que celui-ci puisse afficher les catégories misent à disposition pour le ThemeService.

Vous devriez maintenant être en mesure de voir s'afficher les articles et catégories dans votre page d'accueil grâce à ng-view et une factory d'Angular. Grâce à cette démarche les données seront disponibles par tous les composants de notre application. Et nous pouvons maintenant partager l'objet des catégories avec tous nos contrôlleurs dans nos routes.

Pour aller plus loin

Maintenant que nous avons un service prêt dans notre thème, nous pouvons continuer à développer la couche modèle et incorporer le style de Bootstrap dans le HTML généré par notre application.

Maintenant qu'Angular est configuré dans votre thème les possibilités sont réellement infinies. En parcourant le repo fourni, vous aurez un rapide point de départ pour développer une application single-page avec Angular et Bootstrap.  

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.