Un générateur de site statique qui casse des briques. VenC est tellement rapide qu'il enfreint le principe de causalité et produit de l'énergie surunitaire ! |
Nous concluons le pied de page avec les liens de navigation. À noter que ce qui va suivre peut également être programmé dans l'entête de votre site.
Comme on s'en doute, votre blog n'affiche pas toutes les publications d'un fil sur une seule page. VenC utilise un système de pagination que vous pouvez configurer ici. En conséquence, il faut que le visiteur de votre site puisse naviguer entre ces différentes pages.
Pour cela on uitilise trois motifs différents :
GetNextPage
: permet de récupérer la page suivante si elle existe, sinon le motif est ignoré.GetPreviousPage
: permet de récupérer la page précédente si elle existe, sinon le motif est ignoré.ForPages
: permet de générer une liste de pages numérotées. La page courante correspond à l'item au centre de la liste.En reprenant l'exemple du chapitre précédent, nous aurions alors aux lignes 8 à 14 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <footer> .:GetBlogMetadataIfExists::loading_image:: <img id="__VENC_LOADING__" src=".:GetRelativeRoot:./{value}" /> :. .:IncludeFileIfExists:: .:GetBlogMetadataIfNotNull::include_in_footer:. :. .:GetPreviousPage::<a id="previous_link" href="{path}">←</a>:. <ul id="navigation_pages_list"> .:ForPages::5::<li class="page_list_item"> <a href="{path}">{page_number}</a> </li>:: . :. </ul> .:GetNextPage::<a id="next_link" href="{path}">→</a>:. </footer> </body> </html> |
GetPreviousPage
et GetNextPage
devrait être assez intuitive. En effet, on utilise le motif
pour formater le texte passé en argument à la fonction. Dans ce texte, on utilise la variable {path}
qui contient le chemin vers la page désirée.ForPages
, on indique le nombre de page que l'on souhaite faire apparaître dans la liste. Dans le second argument, on formate l'item à générer en utilisant les variables path
et page_number
, qui contiennent respectivement le chemin vers la page cible ainsi que
son numéro (ligne 11).À noter que si la page courante est la première ou la dernière page, alors respectivement les motifs GetPreviousPage
et
GetNextPage
seront ignorés et ne retourneront rien.
Notons également que si vous venez de commencer votre blog, il n'y aura probablement pas beaucoup de publications au début. Ces publications pourraient ne requérir qu'une seule page pour être toutes affichées, et il n'y aurait donc pas de liste de pages à afficher non plus.
Du coup tout ça c'est pas mal. Mais on peut encore faire mieux.
IfPages
: par exemple on voit bien que si au début votre site n'est pas très rempli
comme on l'a dit, alors il n'y aura pas de liste de pages à afficher et le motif ForPages
sera ignoré. Or, les balises
HTML qui ouvrent et ferment la liste sont bien présentes, quoi qu'il arrive. On peut résoudre ce problème avec le motif IfPages
,
qui permet d'afficher ou non un bloc de texte selon qu'il existe ou non plusieurs pages sur le fil de publications courant.IfInThread
: avec ce motif, il est également possible de contrôler l'affichage des boutons "Suivant" ou "Précédent" selon que l'on est dans une publication individuelle, ou dans une page donnée d'un fil de publications.Le code ci-dessous actualise ce qui a été déjà fait pour illustrer ces remarques :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <footer> .:GetBlogMetadataIfExists::loading_image:: <img id="__VENC_LOADING__" src=".:GetRelativeRoot:./{value}" /> :. .:IncludeFileIfExists:: .:GetBlogMetadataIfNotNull::include_in_footer:. :. .:GetPreviousPage::<a id="previous_link" href="{path}">.:IfInThread::←::{entry_title} ←:.</a>:. .:IfPages:: <ul id="navigation_pages_list"> .:ForPages::5::<li class="page_list_item"> <a href="{path}">{page_number}</a> </li>:: . :. </ul> :. .:GetNextPage::<a id="next_link" href="{path}">.:IfInThread::→::→ {entry_title}:.</a>:. </footer> </body> </html> |
IfInThread
permet d'ajouter une variable de motif qui sera utilisée par GetPreviousPage
et GetNextPage
.
Dans le cas où l'on se trouve sur une publication individuelle, on peut maintenant afficher le titre de la prochaine et de la précédente publication.IfPages
embarque à la fois les balises HTML ul
et le motif ForPages
. S'il n'y a pas de liste de pages à générer, alors ces éléments sont supprimés.