Как создать несколько элементов управления в пользовательском интерфейсе в одном элементе управления

Вопрос или проблема

Я пытаюсь создать элемент управления с множественными значениями, например:

  • типография – Цвет, шрифт, Размер и т. д….

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

Что-то вроде этого (не говорю о CSS):

Введите описание изображения здесь

Спасибо

Существует 2 способа обработки шаблонов элементов управления настроек:
1. Использование PHP-шаблона
2. Использование JS-шаблона.

Скриншот, который вы выложили выше, из плагина Kirki.
Kirki использует JS-шаблоны, так что вы можете увидеть, как это сделано здесь.
Для простоты я бы посоветовал вам взглянуть на этот элемент управления, поскольку элемент управления типографикой слишком сложен (он получает шрифты Google и изменяет раскрывающиеся списки в зависимости от других параметров): https://github.com/aristath/kirki/blob/2.3.5/includes/controls/class-kirki-controls-multicolor-control.php

Вам в основном нужно создать разметку для всех этих полей ввода отдельно… или, как в случае с многоцветным элементом управления выше, использовать цикл.

А затем идет часть JS API WordPress Customizer. Если вы взглянете на файл https://github.com/aristath/kirki/blob/2.3.5/assets/js/controls/multicolor.js, отвечающий за многоцветный элемент управления, вы заметите, что на линии 8 он получает варианты элемента управления (где я выбрал для размещения аргументы, которые мне нужны), а затем на линиях 47-59 он выполняет цикл для этих вариантов и обрабатывает их соответствующим образом.

Конечно, этот код немного сложнее, чем нужно, но это просто потому, что он работает с цветоотборниками. Вы можете значительно упростить его, если работать с текстовыми полями, радио-кнопками и/или раскрывающимися полями, например.

Основные шаги, которые следует выполнить для создания подобного элемента управления:

  • Создайте пользовательский элемент управления и используйте underscore.js шаблоны для него. Это означает использование метода content_template() для добавления вашего шаблона.
  • Откройте свои данные для JS API Customizer: Внутри вашего элемента управления вам нужно будет использовать метод to_json(). Например, в плагине Kirki посмотрите здесь: https://github.com/aristath/kirki/blob/2.3.5/includes/class-kirki-customize-control.php#L124-L150
  • Напишите пользовательский JS-скрипт для своего элемента управления и подключите его с помощью действия customize_controls_enqueue_scripts.
  • Внутри вашего пользовательского JS-скрипта для вашего элемента управления получите данные, которые вы открыли из вашего контроля с помощью метода to_json(), и затем вы можете использовать эти данные для любого нужного назначения. Если вы хотите сохранить несколько значений для вашего контроля, вам придется сохранить их как JS Object, получая значение каждого из ваших полей ввода и сохраняя его значение как элемент в объекте, используя ID поля или что-то другое в качестве ключа в объекте.

.

Ответ или решение

Создание нескольких элементов управления кастомайзера в одном контроле — это задача, которая требует глубокой интеграции как с PHP, так и с JavaScript. В этом контексте, когда вы хотите создать комплексную функцию, такую как управление типографикой, вам потребуется объединить различные элементы управления (например, цвет, семейство шрифтов, размер шрифта) в единый интерфейс. Для достижения этого стоит рассмотреть два основных подхода: использование PHP-шаблонов и использование шаблонов на JavaScript.

Теоретическая часть

Использование PHP и JavaScript в кастомайзере WordPress не только обеспечивает более надежную работу пользовательских интерфейсов, но и позволяет вам лучше управлять поведением и логикой элементов управления.

  1. PHP Templates: С помощью PHP-шаблонов вы можете определить разметку, которая будет использоваться для отображения ваших контролов в кастомайзере. Основное внимание уделяется отображению и структурированию данных, чтобы они легко воспринимались пользователем.

  2. JS Templates: JavaScript-шаблоны, напротив, позволяют динамически управлять поведением элементов управления, модифицируя их в зависимости от действий пользователя. Это подход предпочтителен для более сложных контролов, где требуется динамическое обновление интерфейса без перезагрузки страницы.

Поэтому в этом контексте объединение нескольких контролов в один — это идеальный пример, когда применение JavaScript может значительно улучшить взаимодействие с пользователем.

Пример

Рассмотрим популярный плагин Kirki для WordPress, который даёт нам великолепный пример реализации сложных контролов на JavaScript. Когда мы внедряем контроль за типографикой (например, цвет, шрифт и размер), мы часто сталкиваемся с необходимостью получения данных с внешних API, таких как Google Fonts, и динамического обновления доступных опций (например, выбор шрифта в зависимости от семейства шрифтов).

Этот сценарий часто реализуется через использование JavaScript-шаблонов и соответствующих скриптов, которые обрабатывают данные в кастомайзере и обновляют их в реальном времени. Например, контрол multicolor в Kirki использует JS для обработки цветовых модификаций, считывая доступные "выборы" и адаптируя интерфейс пользовательских элементов управления.

Применение

  1. Создание бэкенд-части (PHP):

    • Создайте собственный класс контроля в WordPress, который будет определять, какие данные должны быть переданы в интерфейс кастомайзера. Определите ваши настройки и секции. Используйте метод to_json(), чтобы подготовить данные для передачи в JavaScript.
    public function to_json() {
       parent::to_json();
       $this->json['choices'] = $this->choices;
    }
  2. Управление фронтендом (JS):

    • Напишите JavaScript для управления поведением вашего кастомного контрола. Подключите ваш скрипт через экшен customize_controls_enqueue_scripts.
    wp.customize.controlConstructor['your-custom-control'] = wp.customize.Control.extend({
       ready: function() {
           var control = this;
           // реализация логики взаимодействия элементов управления тут
       }
    });
  3. Обработайте данные и события:

    • Ваш JS-скрипт должен обрабатывать события, такие как изменение значений полей, и обновлять соответственные аргументы, используя динамические операции.
  4. Отображение и взаимодействие:

    • Используйте метод content_template(), чтобы вставить необходимые HTML-шаблоны в ваш кастомизированный элемент управления, используя underscore.js.
    control.renderContent = function() {
       // HTML-шаблон для вставки
    };

Таким образом, комбинируя PHP и JavaScript, вы можете создавать мощные и интуитивные элементы управления в WordPress кастомайзере, повышая пользовательский опыт. Помните, что основной акцент должен быть сделан на удобстве использования и надежной обработке различных сценариев использования. Effектность пользовательского интерфейса и простота использования — ключ к успешной интеграции и внедрению новых функций.

Оцените материал
Добавить комментарий

Капча загружается...