Статьи

Настройки JavaScript API: Предварительный просмотр

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

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

WordPress.com недавно добавил кнопки «Редактировать» в некоторых редактируемых областях, которые сразу же становятся заметны при запуске настройщика. Когда пользователь нажимает эти кнопки, он показывает им соответствующий элемент управления.

Две кнопки редактирования в WordPresscom Customizer
Новая кнопка «Изменить» в окне предварительного просмотра настройщика на WordPress.com,

Это приятное улучшение пользовательского интерфейса, которого мы также можем достичь с помощью JavaScript API Customizer для нашей темы. И вы обнаружите, что это не так сложно, как вы могли себе представить. Итак, давайте кратко рассмотрим, как это работает.

В последнем уроке мы только записали код в файл customizer-control.js , который влияет на внутренние интерфейсы Customizer. В этом руководстве мы также будем использовать другой файл, customizer-preview.js , который загружается в окне предварительного просмотра. Вы должны создать и загрузить эти два файла. В противном случае я советую вам следовать первому учебнику этой серии, прежде чем продолжить.

Прежде всего, мы добавляем пару кнопок редактирования рядом с названием сайта.

1
2
3
4
5
6
7
<h1 class=»site-title»>
    <a href=»<?php echo esc_url( home_url( ‘/’ ) ); ?>» rel=»home»><?php bloginfo( ‘name’ );
    <?php if ( is_customize_preview() ) : ?>
    <button class=»customizer-edit» data-control='{ «name»:»blogname» } »><?php esc_html_e( ‘Edit Text’, ‘cjs’ );
    <button class=»customizer-edit» data-control='{ «name»:»header_textcolor», «color»: true } »><?php esc_html_e( ‘Edit Color’, ‘cjs’ );
    <?php endif;
</h1>

Используя is_customize_preview() , эта кнопка будет отображаться только в окне предварительного просмотра настройщика. Каждой из этих кнопок присваивается имя class .customizer-edit , что позволит нам выбрать эти кнопки и связать их с помощью события Click позже.

Кроме того, мы также добавили эти кнопки с атрибутом data-control содержащим имя или идентификатор зарегистрированных настроек в настройщике. Имя в этом атрибуте поможет нам определить правильные настройки и элементы управления, которые будут позже предоставлены пользователю.

Пример использования атрибута управления данными
Две кнопки редактирования, чтобы настроить заголовок и цвет заголовка.

Поскольку презентация не является нашей главной задачей на данный момент, две наши кнопки «Редактировать» в окне предварительного просмотра выглядят не так хорошо, как кнопки на WordPress.com. Вы можете добавить стили таким образом, чтобы они соответствовали дизайну вашей темы в целом.

Далее мы определяем пользовательское событие; Событие, которое сообщает об одной из этих кнопок, нажимается. Добавьте следующий код в файл customizer-preview.js .

1
2
3
4
5
var customize = wp.customize;
 
$( document.body ).on( ‘click’, ‘.customizer-edit’, function(){
    customize.preview.send( ‘preview-edit’, $( this ).data( ‘control’ ) );
});

Код связывает каждую из этих кнопок с событием click , используя метод .preview.send() для приведения Event. Метод .preview.send() принимает два параметра, а именно пользовательское имя события и аргумент. В нашем случае мы определили новое событие с именем preview-edit и передаем аргумент с данными, полученными из атрибута data-control кнопки.

Мы можем прослушивать пользовательское приведение типа Event из .preview.send() через другой метод Customizer, называемый .previewer.bind() обратите внимание на средство previewer с помощью er . Этот метод похож на метод jQuery .on() , в котором мы определяем имя события для прослушивания и функцию, которая будет запускаться при запуске события. Добавьте .previewer.bind() в customizer-control.js следующим образом.

1
2
3
4
5
var customize = wp.customize;
 
customize.previewer.bind( ‘preview-edit’, function( data ) {
 
} );

Затем мы преобразуем данные, передаваемые в формат соответствия JSON, выбираем элемент управления на основе name извлеченного из данных, и фокусируемся на элементе управления с помощью метода Customizer .focus() .

1
2
3
4
5
6
7
8
var customize = wp.customize;
 
customize.previewer.bind( ‘preview-edit’, function( data ) {
    var data = JSON.parse( data );
    var control = customize.control( data.name );
 
    control.focus();
} );

Теперь, как вы можете видеть ниже, когда мы нажимаем, например, кнопку «Редактировать текст», он показывает настройку «Заголовок сайта» и фокусирует курсор на вводе.

Обновление названия сайта
Кнопка Изменить в действии.

Кроме того, если мы посмотрим на исходный код в нем , метод .focus() принимает параметр с именем completeCallback . Этот параметр запускается последовательно после выполнения функции .focus() . Мы можем использовать этот параметр, например, чтобы добавить эффект анимации.

01
02
03
04
05
06
07
08
09
10
11
12
13
customize.previewer.bind( ‘preview-edit’, function( data ) {
 
    var data = JSON.parse( data );
    var control = customize.control( data.name );
 
    control.focus( {
        completeCallback : function() {
            setTimeout( function() {
                control.container.addClass( ‘shake animated’ );
            }, 300 );
        }
    } );
} );

Общий опыт теперь чувствует себя более живым.

Финальная версия опыта
Элемент ввода улучшен с помощью CSS анимации

Мы упомянули ряд API JavaScript Customizer:

  • .preview.send() для приведения пользовательского события.
  • .previewer.bind() для привязки .previewer.bind() с пользовательским событием.
  • .focus() для фокусировки на элемент ввода элемента управления, а также на параметр completeCallback .

В этом уроке мы используем эти методы, чтобы позволить пользователям нашей темы быстро редактировать текст Заголовка сайта, нажимая кнопку «Редактировать текст» в окне предварительного просмотра.

У нас осталась одна кнопка, чтобы вызвать элементы управления цветом. Но я оставлю это здесь как вызов; используйте те же три метода, чтобы сделать функцию «Редактировать цвет». Если есть сомнения, не стесняйтесь взглянуть на исходный код .