Une introduction au guidon

Si les données de votre site changent régulièrement, consultez le Guidon. Handlebars est un processeur de modèles qui génère dynamiquement votre page HTML, vous permettant ainsi de gagner du temps lors de la mise à jour manuelle. Dans ce tutoriel, je vais vous présenter le guidon et vous apprendre à créer un modèle de base pour votre site..


Modèle de site

Vous souhaitez créer un modèle pour votre site pour deux raisons principales. Tout d'abord, la construction d'un modèle vous encourage à séparer le code basé sur la logique de la vue réelle, en vous aidant à adhérer à un modèle View / Controller. Deuxièmement, les modèles maintiennent votre code propre et maintenable, ce qui facilite grandement le processus de mise à jour de votre site. Vous ne créez pas de site avec le guidon. Au lieu de cela, vous créez des directives et des structures qui déterminent l'apparence du site sans se focaliser sur les données d'une page. Couvrons quelques bases.


Les bases

Handlebars génère votre code HTML en prenant une structure JSON et en l’exécutant à travers un modèle. Ces modèles sont principalement écrits en HTML normal et sont assortis d’espaces réservés vous permettant d’injecter des données, le cas échéant. Par exemple, le modèle suivant accueille l'utilisateur lorsqu'il se connecte:

Bienvenue, name

le prénom attribut est l'endroit où le nom de l'utilisateur sera injecté dans la page. Cet espace réservé correspond à une propriété de la structure JSON des données. C'est l'exemple le plus élémentaire possible, mais vous verrez bientôt que tout se résume essentiellement à ce concept simple. Passons à la manipulation des tableaux.

Tableaux

Le guidon est livré avec des aides intégrées pour vous aider à travailler avec des données plus complexes. L’un de ces assistants est le chaque assistant. Cet assistant effectue une itération dans un tableau et vous permet de créer du HTML dynamique, par élément de tableau. Par exemple, le modèle suivant affiche les données d'un tableau contenant une liste des concerts locaux en cours dans ma région:

 #each Concerts  /chaque 
Concerts locaux
ce

Comme vous pouvez le constater, ce code est beaucoup plus propre que le code conventionnel, comme l’utilisation d’une boucle en PHP ou JavaScript pour ajouter du code HTML à une variable. Le guidon n’est pas intrusif, et c’est ce qui rend le guidon si accessible. Vous pouvez également remarquer que nous utilisons le nom d'attribut, ce, pour récupérer l'élément de tableau actuel dans le chaque boucle.

Cet exemple est utile pour un tableau de valeurs simples, mais comment gérez-vous des données plus complexes? Eh bien, vous faites essentiellement la même chose. Par exemple, nous allons écrire un modèle pour les données suivantes:

[Nom: "Groupe", Date: "14 août 2012", Albums: [Nom: "Nom générique", Nom: "Quelque chose d'autre !!" ], Nom: "Autres gars", Date: "22 août 2012" Albums: [Nom: "Album Un"]]

Nous pouvons facilement afficher ces informations en utilisant le modèle suivant:

 #each Bands  /chaque 
Nom du groupe Rendez-vous amoureux Nom de l'album
Prénom Rendez-vous amoureux Albums.0.Name

Vous pouvez stocker votre modèle dans un

Pour plus de commodité, vous pouvez stocker votre modèle dans un répertoire.

Si les données de votre site changent régulièrement, vous voudrez peut-être jeter un coup d'œil à Guidons.

C'est le code complet pour compiler et générer du code HTML à partir d'un modèle. Vous pouvez techniquement transférer les données JSON de l'API directement dans le Guidon, mais vous rencontrez des problèmes d'origine croisée. Au lieu d'effectuer une sorte de piratage ou d'utiliser PHP pour "faire écho" les données dans une variable JavaScript, j'ai décidé de mettre tout cela dans un fichier séparé: Recette.php. Donc, avant de commencer à construire le modèle, allons jeter un coup d'œil à ce fichier PHP.

Obtenir les données

L'API Yummly est assez simple. Il n’existe pas de système d’authentification élaboré; il vous suffit de vous inscrire, d'obtenir des informations d'identification et de les insérer dans l'URL. Vous pouvez directement faire écho des données si vous le souhaitez, mais je veux des informations un peu plus détaillées sur chaque recette. Par conséquent, je traiterai les données du premier appel API et ferai une deuxième demande pour chaque recette. Voici le script PHP complet:

allumettes; // Parcourez les recettes et obtenez la recette complète pour chaque opération (Recettes $ en tant que Recette $) $ ID = $ Recipe-> id; $ R = json_decode (file_get_contents ("http://api.yummly.com/v1/api/recipe/". $ ID. "? _App_id =". $ UserID. "& _App_key =". $ UserKey. "& Images = large ")); // Voici les données que nous allons transmettre à notre modèle array_push ($ Json, array (Nom => $ R-> nom, Ingrédients => $ R-> ingrédientLines, Image => $ R-> images [0] -> hostingLargeUrl, Yield => $ R-> rendement, Flavors => $ R-> saveurs, Source => array (Nom => $ R-> source-> sourceDisplayName, Url => $ R-> source-> sourceRecipeUrl )));  // Affiche le dernier objet JSON echo json_encode ($ Json); ?>

En construisant votre site avec un modèle de guidon, vous pouvez générer la totalité du code d'un site en quelques lignes seulement. Voici le modèle entier:

Passons en revue ce code. Les sept premières lignes ne sont que le logo en haut de la page. Ensuite, pour chaque recette, nous créons une «carte» de recette avec une image, un nom et les ingrédients..

L’API Yummly renvoie une liste de données de saveur (c’est-à-dire comment sucré, acide, épicé, etc.) pour chaque article. J'ai écrit un assistant de fonction, appelé getFlavor cela prend cette information et retourne la saveur la plus dominante dans le plat. Pour que ce modèle fonctionne, nous devons charger le getFlavor aide dans le guidon avant d’analyser le modèle. Donc, au début de la deuxième section de script, ajoutez le code suivant avant le code Ajax:

Handlebars.registerHelper ("getFlavor", fonction (FlavorsArr) var H = 0; var Nom = "; pour (var F dans FlavorsArr) if (FlavorsArr [H]> H) H = FlavorsArr [F]; Nom = F; return "Ce plat a un" + Nom + "Saveur";);

Maintenant, chaque fois que le guidon voit getFlavor, il appelle la fonction associée et récupère les informations de saveur.

À ce stade, vous êtes libre de jouer et de concevoir le modèle comme vous le souhaitez, mais vous verrez probablement que ce processus est lent. Cela est principalement dû aux trois appels d'API avant que Handlebars ne charge la page. Évidemment, ce n’est pas idéal, mais la précompilation de votre modèle peut vous aider..


Précompilation

Vous avez deux options différentes en ce qui concerne le guidon. La première consiste à précompiler le modèle actuel. Cela réduit le temps de chargement et vous n'avez pas à inclure le compilateur Handlebars dans votre page..

Cela se traduit également par une taille de fichier plus petite, mais cela n'aide pas vraiment dans notre scénario..

Notre problème est la communication entre le navigateur et l'API. Si vous voulez précompiler votre modèle, vous pouvez télécharger le package Node.js via npm avec la commande suivante:

npm installer le guidon -g

Vous devrez peut-être le faire en tant que root (c’est-à-dire ajouter 'sudo' avant la commande). Une fois installé, vous pouvez créer un fichier pour votre modèle et le compiler comme suit:

guidon demo.handlebars -f demo.js

Vous devriez donner à votre fichier de modèle une .guidon extension. Ce n'est pas obligatoire, mais si vous le nommez quelque chose comme demo.html, alors le nom du template sera "demo.html", juste comme "demo". Après avoir nommé votre modèle, incluez simplement le fichier de sortie avec la version au moment de l'exécution de Handlebars (vous pouvez utiliser la version standard, mais elle est plus grande) et tapez ce qui suit:

var template = Handlebars.templates ['demo']; var html = template (Vos données Json ici);

le sauf si déclaration est… essentiellement un inversé si déclaration.

Mais, comme je l'ai déjà mentionné, cela ne nous aide pas vraiment dans ce scénario. Que pouvons-nous faire alors? Nous pouvons précompiler et sortir le fichier entier. Cela nous permet d’exécuter le modèle avec des données et d’enregistrer la sortie HTML finale - la mise en cache, en d’autres termes. Cela accélère considérablement le temps de chargement de votre application. Malheureusement, JavaScript côté client ne dispose pas de fonctionnalités d’IO de fichier. Le moyen le plus simple d'y parvenir consiste donc simplement à exporter le code HTML dans une zone de texte et à l'enregistrer manuellement. Tenez compte des instructions d'une API sur la mise en cache. La plupart des API ont une durée maximale pendant laquelle les données peuvent être mises en cache. assurez-vous de trouver cette information avant de sauvegarder des pages statiques.


Conclusion

Cela a été une introduction rapide au guidon. En allant de l'avant, vous pouvez regarder dans "Partials" - de petits modèles qui peuvent être utilisés comme des fonctions. Comme toujours, n'hésitez pas à laisser un commentaire ou une question dans la section commentaire ci-dessous.