{"id":231341,"date":"2022-12-20T18:34:00","date_gmt":"2022-12-20T15:34:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231341"},"modified":"2022-12-07T10:15:40","modified_gmt":"2022-12-07T07:15:40","slug":"widgets-wordpress-refactorisation-partie-12","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/widgets-wordpress-refactorisation-partie-12\/","title":{"rendered":"Widgets WordPress : refactorisation, partie 12"},"content":{"rendered":"\n<p>En ce qui concerne la refactorisation du WordPress Widget Boilerplate \u2013 surtout compte tenu du chemin parcouru depuis le d\u00e9but du projet il y a huit ans \u2013 nous avons fait beaucoup de travail.<\/p>\n<p>Nous l&rsquo;avons amen\u00e9 \u00e0 une norme beaucoup plus moderne et nous facilitons beaucoup son utilisation, de sorte que la cr\u00e9ation de futurs widgets devrait \u00eatre plus facile. Et cela ne vient pas seulement du standard du passe-partout mais d&rsquo;un standard orient\u00e9 objet afin que la maintenance et la qualit\u00e9 du code soient sup\u00e9rieures.<\/p>\n<p>Dans le dernier message, nous avons termin\u00e9 une grande partie du travail pour la zone d&rsquo;administration et sommes pr\u00eats \u00e0 commencer notre travail sur le code pour le front-end.<\/p>\n<p>Nous l&rsquo;avons dit:<\/p>\n<blockquote>\n<p>Ensuite, nous allons examiner le rendu du contenu sur le front-end. Nous approchons de la fin de la refactorisation du Boilerplate mais il reste juste un peu plus \u00e0 faire avant que nous soyons pr\u00eats \u00e0 le fusionner dans la branche master de la base de code.<\/p>\n<\/blockquote>\n<p>Donc dans ce post, on va reprendre l\u00e0. Maintenant, si vous avez suivi jusqu&rsquo;\u00e0 ce point, vous devriez avoir tout ce dont vous avez besoin de la branche de d\u00e9veloppement.<\/p>\n<p>Sinon, assurez-vous de le tirer car c&rsquo;est l\u00e0 que nous allons reprendre dans le reste du message.<\/p>\n<h2>Le passe-partout du widget WordPress\u00a0: refactorisation de la partie 12<\/h2>\n<p>Maintenant, en ce qui concerne le front-end, il est facile de consid\u00e9rer le front-end comme tout ce que l&rsquo;utilisateur voit devant lui, que ce soit dans la zone administrative ou non.<\/p>\n<p>Cependant, cette s\u00e9rie a clairement indiqu\u00e9 que nous divisons ce que l&rsquo;utilisateur voit entre la zone administrative et la zone publique du site.<\/p>\n<p>Donc, ce que nous allons faire, c&rsquo;est travailler sur la zone du code qui affiche des informations pour l&rsquo;utilisateur sur la zone publique du site. Nous allons commencer par simplement lire les informations et les afficher.<\/p>\n<p>Ensuite, dans le prochain article, nous verrons comment travailler avec la logique conditionnelle concernant certaines des options pour voir s&rsquo;il y a quelque chose que nous devons faire.<\/p>\n<p>Cela dit, passons au code.<\/p>\n<h3>Sur les donn\u00e9es que nous afficherons<\/h3>\n<p>N&rsquo;oubliez pas que le widget, \u00e0 ce stade, a trois choses qui influencent son affichage\u00a0:<\/p>\n<ol>\n<li>le titre du widget,<\/li>\n<li>le contenu du widget,<\/li>\n<li>une bascule pour savoir si nous devons ou non afficher le titre<\/li>\n<\/ol>\n<p>La troisi\u00e8me option consiste principalement \u00e0 montrer comment utiliser un type d&rsquo;\u00e9l\u00e9ment diff\u00e9rent. Parce que, techniquement, si nous ne voulions pas afficher le titre du widget, nous ne mettrions rien dans le widget.<\/p>\n<p>Mais je pense que cela aide \u00e0 montrer comment utiliser diff\u00e9rents types d&rsquo;\u00e9l\u00e9ments et leurs valeurs de mani\u00e8re pratique (ou semi-pratique).<\/p>\n<p>Quoi qu&rsquo;il en soit, cela dit, nous savons que pour chaque instance donn\u00e9e du widget, les donn\u00e9es sont stock\u00e9es avec le <strong>titre<\/strong> ,\u00a0 le <strong>contenu<\/strong> et\u00a0 le nom et les identifiants du <strong>titre d&rsquo;affichage fournis par WordPress.<\/strong><\/p>\n<p>Ainsi, nous utiliserons ceux de notre code frontal pour afficher les valeurs.<\/p>\n<h3>Pr\u00e9paration des fonctions d&rsquo;affichage<\/h3>\n<p>En r\u00e8gle g\u00e9n\u00e9rale, la\u00a0 fonction <strong>widget<\/strong> est responsable de l&rsquo;affichage de la sortie du widget. Mais l&rsquo;une des choses que nous avons essay\u00e9 de faire est de s\u00e9parer les pr\u00e9occupations de notre widget en un ensemble plus cibl\u00e9 de classes et de fonctions.<\/p>\n<p>La premi\u00e8re chose que nous voulons faire est d&rsquo;\u00e9crire une\u00a0 classe <strong>WidgetDisplay<\/strong> qui sera charg\u00e9e, comme cela est s\u00fbrement \u00e9vident, d&rsquo;afficher le contenu du widget.<\/p>\n<p>Pour l&rsquo;instant, cela inclura inconditionnellement le titre, le contenu et la valeur d&rsquo;inclure ou non le titre. WordPress met \u00e9galement \u00e0 disposition certains contenus comme le balisage qui doit appara\u00eetre avant le widget et apr\u00e8s le widget, nous nous assurerons donc de l&rsquo;inclure \u00e9galement.<\/p>\n<p>Mais d&rsquo;abord, <a href=\"https:\/\/gist.github.com\/tommcfarlin\/caf46620cf110e5d55f4a302f1d5a471#file-00-widget-display-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">effa\u00e7ons la classe<\/a> :<\/p>\n<pre><code>&lt;?php\n\nnamespace WordPressWidgetBoilerplateWordPress;\n\nclass WidgetDisplay\n{\n  private $widgetSlug;\n\n  public function __construct(string $widgetSlug)\n  {\n      $this-&gt;widgetSlug = $widgetSlug;\n  }\n\n  public function show($args, $instance)\n  {\n    \/\/ More to come\n  }\n}\n<\/code><\/pre>\n<p>Apr\u00e8s cela, nous devons nous assurer que nous l&rsquo;\u00e9crivons \u00e9galement aux autres classes. Tout d&rsquo;abord, nous nous assurerons de l&rsquo;inclure <a href=\"https:\/\/gist.github.com\/tommcfarlin\/caf46620cf110e5d55f4a302f1d5a471#file-01-widget-widget-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">dans notre classe Widget<\/a> :<\/p>\n<pre><code>&lt;?php\npublic function widget($args, $instance)\n{\n    return $this-&gt;widgetDisplay-&gt;show($args, $instance);\n}<\/code><\/pre>\n<p>Et puis nous <a href=\"https:\/\/gist.github.com\/tommcfarlin\/caf46620cf110e5d55f4a302f1d5a471#file-02-widget-admin-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">l&rsquo;ajouterons \u00e0 la classe WidgetAdmin<\/a> (puisque c&rsquo;est l\u00e0 que r\u00e9sident les principales fonctions de l&rsquo;API Widget &#8211; cela d\u00e9l\u00e8gue simplement la responsabilit\u00e9 \u00e0 la classe appropri\u00e9e):<\/p>\n<pre><code>&lt;?php\n\npublic function __construct($widgetSlug)\n{\n    parent::__construct($widgetSlug);\n    $this-&gt;widgetSerializer = new WidgetSerializer($this-&gt;getWidgetSlug());\n    $this-&gt;widgetDisplay = new WidgetDisplay($this-&gt;getWidgetSlug());\n}<\/code><\/pre>\n<p>\u00c0 ce stade, nous n&rsquo;affichons encore rien. Nous sommes proches et nous nous concentrerons l\u00e0-dessus bient\u00f4t.<\/p>\n<h3>Affichage des donn\u00e9es<\/h3>\n<p>En supposant que vous puissiez ajouter le code ci-dessus sans erreur, il est temps d&rsquo;afficher le contenu du widget.<\/p>\n<p>Nous pouvons le faire de plusieurs fa\u00e7ons, d&rsquo;un simple <strong>var_dump<\/strong> \u00e0 un travail r\u00e9el pour afficher le contenu d&rsquo;une mani\u00e8re plus conviviale. Et je suis beaucoup plus fan de ce dernier.<\/p>\n<p>Alors faisons \u00e7a.<\/p>\n<p>Dans la\u00a0 fonction <strong>show<\/strong> de votre\u00a0 classe <strong>WidgetDisplay<\/strong>, ajoutez <a href=\"https:\/\/gist.github.com\/tommcfarlin\/caf46620cf110e5d55f4a302f1d5a471#file-04-widget-display-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">le code suivant<\/a> :<\/p>\n<pre><code>&lt;?php\npublic function show($args, $instance)\n{\n    include_once 'Views\/Widget.php';\n}<\/code><\/pre>\n<p>Et puis la vue pour le mod\u00e8le peut \u00eatre aussi simple <a href=\"https:\/\/gist.github.com\/tommcfarlin\/caf46620cf110e5d55f4a302f1d5a471#file-03-widget-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">que ceci<\/a> :<\/p>\n<pre><code>&lt;div id=\"&lt;?php echo $args['id']; ?&gt;\"&gt;\n    &lt;h3 class=\"widget-title\"&gt;&lt;?php echo $instance['title']; ?&gt;&lt;\/h3&gt;\n    &lt;p&gt;&lt;?php echo $instance['content']; ?&gt;&lt;\/p&gt;\n    &lt;pre&gt;&lt;?php echo $instance['display-title']; ?&gt;&lt;\/pre&gt;\n&lt;\/div&gt;&lt;!-- #&lt;?php echo $args['id']; ?&gt;--&gt;<\/code><\/pre>\n<p>Cela garantira que le balisage appropri\u00e9 pour tout le contenu avant le widget, le contenu du widget et le contenu est correctement rendu.<\/p>\n<p>Encore une fois, rappelez-vous que nous affichons du contenu qui ne sera pas dans la version finale de ceci, mais nous nous rapprochons et nous en parlerons dans le prochain article.<\/p>\n<p>Je vous recommande de jouer avec l&rsquo;\u00a0 option <strong>Afficher le titre<\/strong> pour voir comment il s&rsquo;affiche sur le front-end compte tenu du balisage que nous avons fourni.<\/p>\n<p>Pour l&rsquo;instant, la sortie du widget devrait ressembler \u00e0 ceci\u00a0:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-160763-61e7125f80aab.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-160763-61e7125f80aab.png\" alt=\"Widgets WordPress : refactorisation, partie 12\" ><\/a><\/p>\n<p>Mais c&rsquo;est tout ce qu&rsquo;il y a \u00e0 couvrir dans ce post.<\/p>\n<h2>Dans le refactor final<\/h2>\n<p>La derni\u00e8re chose que nous allons examiner apr\u00e8s cela est de resserrer une partie de la logique conditionnelle avec un mot sur la mise en cache des donn\u00e9es (puisque nous en faisons d\u00e9j\u00e0 un peu dans les articles pr\u00e9c\u00e9dents).<\/p>\n<p>Pour l&rsquo;instant, cependant, n&rsquo;h\u00e9sitez pas \u00e0 jouer avec ce que nous avons ici avec le code que nous n&rsquo;avons pas inclus (comme ce qui peut \u00eatre affich\u00e9 avant ou apr\u00e8s le widget.<\/p>\n<p>Ils ont \u00e9t\u00e9 d\u00e9lib\u00e9r\u00e9ment exclus de cet exemple, mais ils ne le seront peut-\u00eatre pas toujours en fonction du travail que vous effectuez.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Source d&rsquo;enregistrement:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nous allons travailler sur la zone du code qui affiche des informations pour l&rsquo;utilisateur sur la zone publique du site.<\/p>\n","protected":false},"author":1,"featured_media":234981,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[717,841,862],"tags":[1167],"class_list":["post-231341","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-developpeur","category-tutoriels","category-wordpress-3","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/231341","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/comments?post=231341"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/231341\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/234981"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=231341"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=231341"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=231341"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}