У цій частині ми розглянемо, як визначити атрибути, отримати їхні значення та оновити їх. За допомогою атрибутів ми можемо прийняти вхідні дані від редактора, зберегти їх і вивести на свій розсуд. У попередньому кроці ми розглянули компоненти WordPress, де їх знайти та як їх реалізувати. У цій публікації ми додамо підказки для підключення до атрибутів – збережених даних.
Визначення атрибутів
Атрибути додаються як об’єкти в масиві до attributes
властивості в registerBlockType()
. Ключем кожного атрибута є ім’я атрибута, і ви повинні мати властивість type
як мінімум.
Власність type
може бути будь-якою з наведених нижче; null
, boolean
, object
, array
, number
, string
або integer
.
Ви можете додатково надати властивість default
для визначення початкового значення вашого атрибута. Якщо ви не вкажете значення за замовчуванням, атрибут за умовчанням матиме значення null
.
Ще одна властивість атрибута source
працює разом із selector
властивістю, але це вибагливі речі, які ми розглянемо докладніше нижче.
Наприклад, визначення двох атрибутів; exampleText
як рядок і postIds
як масив виглядатиме так:
Все, що вам потрібно зберегти для свого блоку (введення від користувача/редактора), потребує атрибута. Ви вирішуєте, як ви структуруєте свої дані, визначаючи окремі атрибути для кожного або об’єднуючи їх усі в об’єкт. Це буде лише різниця в тому, як ви отримуєте їхні дані та як ви їх оновлюєте.
Отримання значень атрибутів
Атрибути доступні як атрибути для ваших блоків edit
і save
функцій. Якщо ви дотримувалися цієї серії з попереднього кроку, пам’ятайте, що ми оновили функції, щоб передати властивості як параметр.
Зазвичай вилучати атрибути з реквізитів, оскільки ви зазвичай часто звертаєтеся до них. Наприклад, виведення атрибута, викликаного exampleText
, виглядатиме так:
Оновлення значень атрибутів
Щоб оновити атрибути, у нас є метод, доступний у props, який називається setAttributes()
. Ця функція приймає об’єкт, до якого ви можете додати будь-який атрибут, який бажаєте оновити. Ви можете оновити лише один атрибут, кілька або всі одночасно. Якщо у вас визначено кілька атрибутів і викликається setAttributes()
оновлення лише одного з них, інші не торкаються.
Якщо у вас є досвід роботи з React, ви, ймовірно, одразу помітите схожість між setAttributes()
і setState()
. Вони працюють точно так само, але різниця полягає в тому, що стан у React – це просто щось, що зберігається локально в цьому компоненті, а атрибути фактично зберігаються як дані поза компонентом.
Щоб оновити атрибут, ви зазвичай видаляєте функцію з пропсів і називаєте її так: Нижче ми оновлюємо exampleText
атрибут на «Привіт».
const { setAttributes } = props;
setAttributes({ exampleText: 'Hi' });
Природно, ви запускаєте setAttributes()
зсередини якусь дію. Звичайний приклад — це всередині onChange
prop на якомусь полі введення, яке використовується для зберігання значення exampleText
атрибута.
Обов’язково зберігайте атрибути в тому типі, який ви визначили в атрибуті. Вам не пощастить, наприклад, спробувати зберегти об’єкти в рядковий атрибут.
Давайте спробуємо це на практиці! Розпочніть npm run start
, якщо ви ще цього не зробили.
Відображення атрибута у спеціальному введенні тексту та оновлення значення атрибута
На попередньому кроці ми додали деякі компоненти в edit
, наприклад, введення тексту, але нічого не було збережено. Давайте додамо атрибут і один текстовий ввід для нього в наш блок. Ми обидва переконаємося, що введений текст показує поточне значення, і щоразу, коли вхідні дані змінюються, ми оновлюємо атрибут.
Додавання введення тексту та його onChange
проп
Ми руйнуємо attributes
і setAttributes
від props
того, як будемо використовувати обидва. Потім ми використовуємо TextControl
компонент із wp.components
пакету WordPress. Пропускаємо до нього дві підставки; value
встановить значення введення (як спочатку, так і під час введення) і дію щодо події введення onChange
.
У value
ми встановлюємо йому значення нашого атрибута; attributes.exampleText
. У onChange
випадку, якщо ми запускаємо функцію, передаючи введене значення нашого введення як параметр newtext
(вхідне значення є властивістю, яку повертає компонент). У цій функції ми викликаємо setAttributes()
та оновлюємо атрибут exampleText
до того, що було введено у вхідних даних.
Це базовий React – крім того факту, що ми працюємо з атрибутами, а не станом. Якщо вищесказане вас збентежило, я рекомендую переглянути короткий посібник із React, оскільки він, ймовірно, пояснює це краще, ніж я!
Оновіть редактор і подивіться, як працює блок! У вас має бути стандартний спосіб введення тексту, який буде збережено, коли ви натиснете «Зберегти/Оновити» під час редагування допису.
Результат у інтерфейсі та в базі даних
Якщо ви переглядаєте свою публікацію у інтерфейсі, вона все одно має повторювати символ div із «:)», тому що це те, що ми все ще маємо в нашій save
функції. Але щось сталося за кадром! Блок коментарів нашого блоку тепер містить значення нашого атрибута в JSON.
Ви не можете побачити блоки коментарів у шаблоні, який виконує звичайний the_content()
виклик. Щоб переглянути блоки коментарів, у вас є два варіанти. Або перегляньте в post_content
таблиці бази даних публікацій. Або додайте echo get_the_content()
шаблон і перегляньте його в інструменті перевірки/налагодження.
Очевидно, ми також маємо доступ до атрибутів save
із пропсів.
Відображення вхідного значення вsave
Давайте відобразимо значення атрибута всередині div у нашій save
функції:
Примітка. Після внесення цієї зміни ви отримаєте зламаний блок у публікації, до якої ви вже додали цей блок. Це відбувається тому, що редактор стикається з виходом, відмінним від save
того, що ми визначили зараз. Видаліть блок і додайте його знову. Введіть щось під час введення тексту, оновіть публікацію та перегляньте її у інтерфейсі.
І це, власне, суть. Ви вирішуєте, які атрибути вам потрібні, щоб зберегти бажане у вашому блоці. У edit
ньому ви візуалізуєте способи введення користувачем, піклуючись про те, щоб поточні значення відображалися та оновлювали їх щоразу, коли вони змінювалися. І save
ви витягуєте збережені атрибути та відтворюєте результат так, як вам заманеться.
У цій серії посібників ми торкнемося багатьох інших компонентів і атрибутів. Але давайте розглянемо ще один компонент у цій публікації, щоб зрозуміти, що таке властивість атрибута source
.
RichText і властивість атрибутаsource
Компонент WordPress RichText
надає текстову область без полів із підтримкою форматування тексту. Ви можете віддати перевагу використанню цього замість (потворного?) стандартного введення тексту або текстового поля. Але пам’ятайте, що з цим RichText
потрібно поводитись дещо по-іншому, оскільки є кілька властивостей, про які вам потрібно знати, і є різниця в тому, як ми отримуємо значення в нашій save
функції.
Додавання RichText
компонента
Найпростішою формою RichText
є реалізація цього, як із введенням тексту:
Ми деструктуруємо RichText
компонент із wp.blockEditor
пакунка, але в іншому описане вище ідентично тому, що ми зробили зі стандартним введенням тексту.
Поводження save
зRichText
Однак у save
функції вам потрібно знову використати RichText
компонент, щоб отримати значення атрибута. Ми викликаємо RichText.Content
і встановлюємо проп value
для нашого атрибута:
Це виведе все, що було введено в RichText
редакторі безпосередньо без жодного HTML-коду.
Коли ви працюєте з RichText
ним, ви, швидше за все, захочете керувати обгорткою HTML навколо тексту, наприклад a <p>
або a <h2>
, як у інтерфейсі, так і в редакторі. Для цього ми можемо використовувати проп під назвою tagName
.
Компонент RichText
також дозволяє кілька інших реквізитів. Ви можете визначити текст-заповнювач, який відображатиметься (зникає), коли він порожній, за допомогою placeholder
опори. Компонент також дозволяє контролювати параметри форматування поля (які кнопки відображаються на панелі інструментів).
RichText
зtagName
За допомогою prop tagName
ви можете заздалегідь визначити, у який тег HTML буде загорнуто його вивід. Коли ви використовуєте tagName
, ви повинні використовувати однакові tagName
prop і значення в обох edit
і save
.
Скажімо, ви хочете помістити значення свого атрибута в <h2>
, що в редакторі змусить будь-який вхід мати значення h2. У edit
ви можете зробити:
І в save
:
Наведене вище тепер виведе все, що було введено в RichText
області всередині <h2>
тегу.
Використанняsource
Очевидно, що ви можете поєднати декілька форматованих текстів для блоку, наприклад, один для заголовка та один для абзацу. Тільки пам’ятайте, що кожному знадобиться свій атрибут. Наприклад:
Однак зараз ви почнете стикатися з деякими проблемами. Незважаючи на те, що ви можете виконувати форматування тексту в редакторі, нічого (або деякі) з вашого форматування не буде збережено. Коли ви переглядаєте публікацію у інтерфейсі, вона просто відображатиметься як h2
і p
без будь-якого форматування (курсив, жирний шрифт, посилання). Навіть блок коментарів для вашого блоку не містить форматування. Це складна справа з RichText
. Щоб вирішити це, нам потрібно попрацювати з властивістю атрибута source
.
Властивість source
, що дозволяє WordPress отримувати та інтерпретувати вміст безпосередньо з вмісту публікації. Якщо атрибут не source
налаштовано, його буде збережено та витягнуто з блоку коментарів HTML.
Під час роботи з RichText
ми зазвичай встановлюємо source
значення html
, яке використовує бібліотеку WordPress для аналізу розмітки HTML. Властивість source
працює разом з іншою властивістю атрибута; selector
який визначає тег HTML, з якого він має видобувати.
Для прикладу ми встановили source
як html
у нашому параграфі RichText
та встановили selector
як p
(інакше за замовчуванням буде корінь блоку блоку).
attributes: {
...
myRichText: {
type: 'string',
source: 'html',
selector: 'p'
}
},
Тепер наш другий RichText
повинен успішно зберегти все своє форматування тексту. Ви також помітите, що блок коментарів тепер відображає лише myRichHeading
атрибут у JSON. Атрибут myRichText
повністю зник з блоку коментарів. Це відбувається тому, що source
WordPress тепер аналізує вміст публікації замість блоку коментарів для значення атрибута.
Чесно кажучи, я взагалі не так багато працював з source
атрибутом і рекомендую уникати його, якщо можна. Документація WordPress пояснює дещо більше про джерело та атрибути, які ви хочете перевірити самостійно.
У цій публікації ми ознайомилися з основами атрибутів; як їх визначити, оновити та вивести їхні значення. У наступних кроках ми розглянемо більше різних компонентів і способи додавання налаштувань за межами самого вмісту блоку; на панелі інструментів і бічній панелі редактора (називається Інспектор).