WordPress-widgetit: Refaktorointi, osa 13
Olemme vihdoin WordPress Widget Boilerplaten uudelleenmuodostusta käsittelevän sarjan viimeisessä viestissä. Tämän viestin loppuun mennessä olemme saaneet koodimme kehityshaaran valmiiksi ja olemme valmiita yhdistämään kaiken päähaaraan.
Työtä on kuitenkin vielä vähän. Nimittäin :
Viimeinen asia, jota tarkastelemme tämän jälkeen, on ehdollisen logiikan tiukentaminen ja sana välimuistiin tallentamisesta (koska teemme sitä jo aiemmissa viesteissä).
Joten nämä ovat kaksi asiaa, joita aiomme tarkastella tässä viestissä. Tarkastellaan erityisesti käyttöliittymän ehdollisen logiikan käsittelyä ja sitten perusvälimuistin toteuttamista.
WordPress Widget Boilerplate: Refactoring osa 13
Ennen kuin siirrymme viimeiseen yksityiskohtiin, haluan varmistaa, että käytät koodin viimeisintä versiota, koska uskon, että tällä hetkellä koodin on oltava valmis viimeistä muutoskierrosta varten.
Joten jos sinulla ei ole koodia käynnissä koneellasi, nyt on aika. Viimeinen koodin bitti, jota meidän on työstettävä, on melko pieni.
Mutta on tärkeää varmistaa, että käytät uusinta versiota. Joten kun olet hankkinut uusimman koodin, olemme valmiita päättämään tämän.
1 Etuosan renderöiminen
Muista, että edellisessä viestissä näytimme yleiset widgetin tiedot – otsikon, sisällön ja sen, pitäisikö otsikko näyttää vai ei – näyttämällä arvot käyttöliittymässä.
Mutta nyt on aika määrittää tiedot varmistaaksemme, että emme ainoastaan hahmonna tietoja widgetin hallinta-alueen vaihtoehtojen perusteella, vaan myös jos tietoja on ollenkaan.
Joten aloitamme yksinkertaisimmalla vaihtoehdolla: vaihtoehdolla, jonka avulla voimme vaihtaa, jos otsikko näytetään. Toisin sanoen oletetaan, että arvot täytetään ja tämä vaihtoehto on valittu taustaohjelmassa.
Muista, että Widget.php- tiedosto näyttää tällä hetkellä tältä :
<?php
/*
* This file is part of WordPress Widget Boilerplate
* (c) Tom McFarlin <tom@tommcfarlin.com>
*
* This source file is subject to the GPL license that is bundled
* with this source code in the file LICENSE.
*/
?>
<div id="<?php echo $args['id']; ?>">
<h3 class="widget-title"><?php echo $instance['title']; ?></h3>
<p><?php echo $instance['content']; ?></p>
<pre><?php echo $instance['display-title']; ?></pre>
</div><!-- #<?php echo $args['id']; ?>-->
Joten aiomme muokata tätä osaa ensin. Tietysti se on suhteellisen helppo esitellä, eikö? Eli logiikka menee näin:
- Jos otsikon näyttämisvaihtoehto on valittuna, näytämme otsikon; muuten emme.
Tämä voidaan ratkaista yksinkertaisella if – lauseella arvioimalla käytettävissämme olevan näyttö-otsikko- vaihtoehdon arvo. Koska olemme rakentaneet funktion koko tässä sarjassa, jos vaihtoehto on valittuna, siinä on vaihtoehto on ; muuten se on tyhjä.
Tämä tarkoittaa, että voimme määrittää tällaisen ehdon samaan koodiin, jonka olemme jakaneet yllä :
<?php
/*
* This file is part of WordPress Widget Boilerplate
* (c) Tom McFarlin <tom@tommcfarlin.com>
*
* This source file is subject to the GPL license that is bundled
* with this source code in the file LICENSE.
*/
?>
<div id="<?php echo $args['id']; ?>">
<?php if (isset($instance['display-title']) && 'on' === $instance['display-title']): ?>
<h3 class="widget-title"><?php echo $instance['title']; ?></h3>
<?php endif; ?>
<p><?php echo $instance['content']; ?></p>
</div><!-- #<?php echo $args['id']; ?>-->
Tällä tavalla, jos vaihtoehto on valittuna, otsikko tulee näkyviin.
Seuraus tähän
Yksi asia on mielestäni mainitsemisen arvoinen, että on aikoja, jolloin ihmiset voivat aktivoida widgetejä, mutta valita, ettei niillä ole sisältöä. Toki voit väittää, että jos he tekevät niin, se on heidän vikansa.
Siinä on totuus.
Mutta uskon myös, että huolehtiminen käyttäjistä, jotka ehkä keksivät asioita tai ovat vahingossa tehneet jotain, jota he eivät tienneet voivansa auttaa heitä. Ehkä se tekee meistä vastuullisia kehittäjiä (tai ehkä se tekee meistä aggressiivisempia – valitse, minä olen edellisen puolella).
Joten tässä tapauksessa mielestäni kannattaa varmistaa, että otsikko ja sisältö eivät ole tyhjiä. Jos ne ovat, älä renderöi mitään.
Koodi näyttää sitten tältä :
<?php
/*
* This file is part of WordPress Widget Boilerplate
* (c) Tom McFarlin <tom@tommcfarlin.com>
*
* This source file is subject to the GPL license that is bundled
* with this source code in the file LICENSE.
*/
?>
<?php if (empty($instance['title']) && empty($instance['content'])): return;
endif; ?>
<div id="<?php echo $args['id']; ?>">
<?php if (isset($instance['display-title']) && 'on' === $instance['display-title']): ?>
<h3 class="widget-title"><?php echo $instance['title']; ?></h3>
<?php endif; ?>
<p><?php echo $instance['content']; ?></p>
</div><!-- #<?php echo $args['id']; ?>-->
Ja tämä päättää tämän etupään osalta. Mutta entä välimuisti, josta puhuimme aikaisemmassa viestissä?
2 Esittelyssä välimuisti
Välimuistin tallentaminen tällaiselle widgetille on mielestäni valinnainen, mutta koska olemme rakentaneet Boilerplateen perustoiminnot välimuistin tyhjentämiseksi, seuraa loogisesti tietojen välimuistin tallentamisen toimintojen käyttöönotto, eikö niin?
Joten tehdään se. Ei senkään pitäisi olla vaikeaa. Todellisuudessa otamme vain otsikon, sisällön ja valintaruudun ja tallennamme widgetin tietyn esiintymän arvot välimuistiin.
Tätä varten meidän on löydettävä widget – toiminto ja tehtävä seuraava:
Ensin esittelemme toiminnon widgetin välimuistiin tallentamiseen :
<?php
/**
* Caches the values for the instance of this widget.
*
* @param array $args argument provided by WordPress that may be useful in rendering the widget
* @param array $instance the values of the widget
*/
private function cacheWidget($args, $instance)
{
$cache = [];
$cache['widget_id'] = $args['widget_id'];
$cache['title'] = empty($instance['title'])? '': $instance['title'];
$cache['content'] = empty($instance['content'])? '': $instance['content'];
$instance['display-title'] = isset($instance['display-title'])? $instance['display-title']: '';
$cache['display-title'] = $instance['display-title'];
wp_cache_set($this->getWidgetSlug(), $cache, 'widget');
}
Sitten esittelemme toiminnon widgetin välimuistiversion noutamiseen :
<?php
/**
* @return array the cached instance of this widget if it's not empty
*/
private function getCachedWidget()
{
$cache = wp_cache_get($this->getWidgetSlug(), 'widget');
if (!empty($cache)) {
return $cache;
}
return [];
}
Sitten palaamme alkuperäiseen toimintoon varmistaaksemme, että näytämme sen, mitä tarvitaan. Jos välimuisti on tyhjä, emme tee muuta kuin näytämme arvot sellaisenaan.
<?php
/**
* Displays the widget based on the contents of the included template.
*
* @param array $args argument provided by WordPress that may be useful in rendering the widget
* @param array $instance the values of the widget
*/
public function widget($args, $instance)
{
// Get a cached version of the widget. If it's empty, cache what we have.
$cache = $this->getCachedWidget();
if (empty($cache)) {
$this->cacheWidget($args, $instance);
}
return $this->widgetDisplay->show($args, $instance);
}
Ja se päättää täysin uudelleen muotoillun Widget Boilerplaten toiminnot.
Loppu
Tämä erityisen vakava on kestänyt kauan. Henkilökohtaisesti on ollut todella hyvä käydä uudelleen WordPress Widget Boilerplatessa ja saattaa se nykyaikaisempien standardien tasolle.
Minun on vielä tehtävä muutamia asioita, kuten päivitettävä README-tiedosto ja annettava sitten muutama lisäohje ennen kuin yhdistän sen päähaaraan, mutta jos olet seurannut koko sarjaa, olet todennäköisesti mukana kaiken kanssa. Lisäksi arvostan aikaasi sen parissa, ja toivon, että siitä oli sinulle hyötyä jollain tasolla.
Tämän sanottuani aion siirtyä lyhyempään premium-sisältöön, koska tämä sarja ja viimeinen olivat melko pitkiä. Kuten tavallista, voit aina ottaa minuun yhteyttä tai tarjota pull-pyyntöjä tarpeen mukaan – se on avoimen lähdekoodin ja se on myös tervetullut parannuksiin.
Toistaiseksi tämä kuitenkin päättää tämän sarjan.