✅ WEB і WordPress новини, теми, плагіни. Тут ми ділимося порадами і кращими рішеннями для сайтів.

Віджети WordPress: рефакторинг, частина 12

15

Що стосується рефакторингу WordPress Widget Boilerplate – особливо з огляду на те, як далеко ми просунулися з моменту початку проекту вісім років тому – ми виконали багато роботи.

Ми привели його до набагато сучаснішого стандарту та значно полегшили роботу з ним, щоб створення майбутніх віджетів стало легшим. І це пов’язано не лише зі стандартом шаблону, але й з об’єктно-орієнтованим стандартом, щоб якість обслуговування та коду була вищою.

У минулому дописі ми завершили більшу частину роботи в області адміністрування та готові розпочати роботу над кодом для інтерфейсу.

Ми сказали:

Далі ми розглянемо відтворення вмісту на інтерфейсі. Ми наближаємось до завершення рефакторингу Boilerplate, але залишилося ще трохи зробити, перш ніж ми будемо готові об’єднати його з основною гілкою кодової бази.

Тож у цій публікації ми збираємося продовжити це. Тепер, якщо ви стежили за цим до цього моменту, ви повинні мати все, що вам потрібно з гілки розробки.

Якщо ні, обов’язково витягніть його, оскільки це те, де ми збираємося підібрати в решті публікації.

Шаблон віджета WordPress: рефакторинг, частина 12

Тепер, коли справа доходить до інтерфейсу, легко уявити інтерфейс як усе, що користувач бачить перед собою, незалежно від того, чи знаходиться це в адміністративній зоні чи ні.

Однак у цій серії було ясно, що ми розподіляємо те, що бачить користувач, між адміністративною областю та загальнодоступною областю сайту.

Отже, ми працюватимемо над частиною коду, яка відображає інформацію для користувача у загальнодоступній частині сайту. Ми збираємося почати з того, що просто прочитаємо інформацію та відобразимо її.

Потім у наступному дописі ми розглянемо роботу з умовною логікою щодо деяких параметрів, щоб побачити, чи потрібно нам щось робити.

З огляду на це, перейдемо до коду.

На даних, які ми будемо відображати

Пам’ятайте, що на даний момент віджет має три речі, які впливають на його відображення:

  1. назва віджета,
  2. вміст віджета,
  3. перемикач того, чи слід відображати назву

Третій варіант полягає насамперед у тому, щоб показати, як використовувати інший тип елемента. Тому що, технічно, якби ми не хотіли показувати назву віджета, ми б просто нічого не додавали до віджета.

Але я думаю, що це допомагає показати використання різних типів елементів та їхніх значень у практичний (або напівпрактичний) спосіб.

У будь-якому випадку, з огляду на це ми знаємо, що для кожного конкретного екземпляра віджета дані зберігаються разом із заголовком, вмістом і  ім’ям відображуваного заголовка та ідентифікаторами, наданими WordPress.

Таким чином, ми будемо використовувати їх у нашому зовнішньому коді для відображення значень.

Підготовка функцій відображення

Як правило, функція віджета відповідає за відображення результату віджета. Але одна з речей, яку ми намагалися зробити, це розділити проблеми нашого віджета на більш цілеспрямований набір класів і функцій.

Перше, що ми хочемо зробити, це написати  клас WidgetDisplay, який буде відповідати за, як очевидно, відображення вмісту віджета.

Наразі це беззастережно включатиме заголовок, вміст і значення того, включати чи ні заголовок. WordPress також надає певний вміст, як-от розмітку, яка має відображатися перед і після віджета, тому ми обов’язково включимо його.

Але спочатку давайте просто заглушимо клас :

<?php

namespace WordPressWidgetBoilerplateWordPress;

class WidgetDisplay
{
  private $widgetSlug;

  public function __construct(string $widgetSlug)
  {
      $this->widgetSlug = $widgetSlug;
  }

  public function show($args, $instance)
  {
    // More to come
  }
}

Після цього нам потрібно переконатися, що ми також пишемо це для інших класів. По-перше, ми обов’язково включимо його в наш клас віджетів :

<?php
public function widget($args, $instance)
{
    return $this->widgetDisplay->show($args, $instance);
}

А потім ми додамо його до класу WidgetAdmin (оскільки саме тут знаходяться основні функції Widget API – він просто делегує відповідальність відповідному класу):

<?php

public function __construct($widgetSlug)
{
    parent::__construct($widgetSlug);
    $this->widgetSerializer = new WidgetSerializer($this->getWidgetSlug());
    $this->widgetDisplay = new WidgetDisplay($this->getWidgetSlug());
}

На даний момент ми ще нічого не відображаємо. Ми близькі, і скоро зосередимося на цьому.

Відображення даних

Якщо припустити, що ви можете додати код вище без помилок, настав час відобразити вміст віджета.

Ми можемо зробити це будь-якою кількістю способів, від простого var_dump до фактичної роботи, щоб відобразити вміст більш зручним для користувача способом. І я набагато більше прихильник останнього.

Тож давайте зробимо це.

У функцію show вашого  класу WidgetDisplay додайте такий код :

<?php
public function show($args, $instance)
{
    include_once 'Views/Widget.php';
}

І тоді вигляд для шаблону може бути таким простим , як це :

<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']; ?>-->

Це забезпечить правильну розмітку для всього вмісту до віджета, вмісту віджета та вмісту, який правильно відтворюється.

Знову ж таки, пам’ятайте, що ми показуємо певний вміст, якого не буде в остаточній версії цього, але ми наближаємося до цього, і ми розглянемо це в наступній публікації.

Я б порекомендував погратися з  опцією Display Title, щоб побачити, як вона відображається на інтерфейсі з урахуванням наданої нами розмітки.

Наразі вихід віджета має виглядати приблизно так:

Віджети WordPress: рефакторинг, частина 12

Але це все, про що йдеться в цій публікації.

До остаточного рефактору

Останнє, що ми збираємося розглянути після цього, це посилення умовної логіки разом зі словом про кешування даних (оскільки ми вже робимо трохи цього в попередніх публікаціях).

Наразі, однак, не соромтеся погратися з тим, що ми маємо тут, разом із кодом, який ми не включили (наприклад, те, що може відображатися до або після віджета.

Їх навмисно виключено з цього прикладу, але вони не завжди можуть залишатися поза увагою, залежно від роботи, яку ви виконуєте.

Джерело запису: tommcfarlin.com

Цей веб -сайт використовує файли cookie, щоб покращити ваш досвід. Ми припустимо, що з цим все гаразд, але ви можете відмовитися, якщо захочете. Прийняти Читати далі