Статьи

Использование Polymer в WordPress: создание собственного компонента Google Maps

Веб-компоненты — это набор стандартов для создания пользовательских HTML-элементов многократного использования. Polymer — это библиотека JavaScript с открытым исходным кодом для создания веб-приложений с использованием веб-компонентов. Созданный этими умными людьми из Google, он предоставляет ряд дополнительных функций по сравнению с обычными веб-компонентами, а при использовании с полифиллом поддерживает последнюю версию всех основных браузеров .

В этом уроке я покажу вам, как легко использовать веб-компоненты и Polymer в WordPress. Сначала я покажу, как интегрировать Polymer в вашу установку WordPress, а затем продемонстрирую, как добавить работающий компонент Google Maps в боковую панель вашего сайта. Это может быть полезно для любого сайта (например, для ресторана), который должен предоставить посетителям указания к их помещениям.

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

Смотреть Создание собственной темы WordPress
Создайте свою собственную тему — от дизайна до профессиональной темы

Как всегда, весь код этого руководства доступен в репозитории GitHub .

Почему полимер?

Поскольку встроенная поддержка веб-компонентов становится все лучше, вас могут попросить, если Polymer по-прежнему актуален. Краткий ответ на этот вопрос — Да!

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

Короче, Полимер по-прежнему очень актуален. Это мощный фреймворк, который используется в производстве такими крупными компаниями, как USA Today, Coca Cola и Electronic Arts.

Настройка WordPress

Прежде чем мы начнем, нам нужно настроить нашу среду, в которой будет работать WordPress. В этом уроке я буду использовать виртуальную машину ScotchBox Vagrant , оснащенную некоторыми предустановленными инструментами для запуска вашей установки WordPress.

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

Мы начинаем с того, что в нашей системе установлены Git , Vagrant и Virtual Box . Затем мы можем клонировать репозиторий GitHub с предварительно заполненным Vagrantfile ScotchBox.

git clone https://github.com/scotch-io/scotch-box sitepoint-wp-polymer 

Теперь мы готовы к бегству. После загрузки нашего компьютера мы должны удалить статический файл по умолчанию /public/index.php и установить WordPress.

 cd sitepoint-wp-polymer/public rm index.php git clone https://github.com/WordPress/WordPress.git . 

Теперь нам нужно сделать копию файла wp-config-sample.php . Назовите его wp-config.php .

 cp wp-config-sample.php wp-config.php 

и измените следующие значения:

 // wp-config.php // ... define('DB_NAME', 'scotchbox'); define('DB_USER', 'root'); define('DB_PASSWORD', 'root'); // ... 

Теперь вы готовы запустить браузер и зайти на сайт http://192.168.33.10. Вам будет предложено ввести учетные данные администратора и название сайта. Не стесняйтесь заполнять их по своему усмотрению.

Использование Polymer в WordPress: установка WordPress

Добавление базовой темы SitePoint

Итак, у нас есть настроенный WordPress, теперь нам нужна тема. Это будет тема « Двадцать семнадцать» , но она довольно общая и включает в себя гораздо больше, чем обычно требуется. Хорошей альтернативой здесь является использование базовой темы SitePoint WordPress .

Эта тема была создана в ответ на вопрос «Как будет выглядеть идеальная базовая тема WordPress?». Его функции включают в себя:

  • Нет жира. Никаких пустяков. Speedy.
  • Минимальный дизайн. Это ваша работа, чтобы сделать это красиво.
  • Никаких «милых» функций, которые вы никогда не используете.
  • SEO дружественный по своей сути.
  • Супер для мобильных устройств.
  • 100% с открытым исходным кодом и бесплатное использование.

Базовая тема SitePoint WordPress является отличной отправной точкой для новых проектов. Это мобильное устройство, простое в использовании и 100% бесплатное. Чтобы следовать вместе с остальным учебным пособием, перейдите на домашнюю страницу темы и загрузите ее сейчас .

И пока вы там, вы можете проверить набор платных тем, которые предлагает SitePoint . Все они построены на основе базовой темы и включают тему электронной коммерции, тему ресторана, тему портфолио, тему бизнеса и тему строительства.

После загрузки базовой темы SitePoint WordPress разархивируйте ее и скопируйте / вставьте в папку wp-content/themes . Затем создайте новую папку с именем sitepoint-base-child в wp-content/themes . В этом каталоге создайте файл style.css файл functions.php .

 cd wp-content/themes/ mkdir sitepoint-base-child cd sitepoint-base-child touch functions.php style.css 

Откройте style.css и скопируйте его в него:

 /* Theme Name: SitePoint Base Child Author: Almir B. Author URI: http://almirbijedic.rocks Template: sitepoint-base Version: 1.0.0 Text Domain: ab-sitepoint-base */ 

И в functions.php :

 <?php //functions.php add_action( 'wp_enqueue_scripts', 'sp_theme_enqueue_styles' ); function sp_theme_enqueue_styles() { wp_enqueue_style( 'parent-style', get_template_directory_uri() . '/style.css' ); } 

Это поставит в очередь базовый CSS из родительской темы.

Мы только что создали дочернюю тему, роль которой заключается в реализации функций поверх базовой темы без необходимости изменения базовых файлов. Все настройки входят в эту дочернюю тему.

Последний шаг — перейти на панель администратора , затем в главном меню « Внешний вид»> «Темы» и нажать « Активировать» под дочерней темой Sitepoint Base.

Использование Polymer в WordPress: активировать базовую дочернюю тему Sitepoint

Включая Полимер в WordPress

Теперь, когда это сделано, мы должны установить Полимер с беседкой . Убедитесь, что вы находитесь в public/wp-content/themes/sitepoint-base-child папке public/wp-content/themes/sitepoint-base-child , а затем запустите:

 bower init 

Вы можете ответить с ответом по умолчанию на каждый вопрос. Далее нам нужно установить зависимости:

 bower install --save Polymer/polymer#^2.0.0 PolymerElements/paper-input#2.0-preview 

Это установит Polymer и компонент ввода бумаги , так что у нас будет готовый компонент ввода, разработанный из причудливого материала. Важно использовать тег #2.0-preview для ввода бумаги, а также для элемента Google Map позже, так как в противном случае он не будет работать с последней версией Polymer (версия 2.0).

Чтобы использовать Polymer, мы должны включить его, используя импорт HTML, и мы также включим polyfill для веб-компонентов, чтобы поддерживать старые браузеры.

enqueue к файлу functions.php в дочерней теме и добавьте enqueue в существующую функцию enqueue .

 <?php //functions.php add_action( 'wp_enqueue_scripts', 'sp_theme_enqueue_styles' ); function sp_theme_enqueue_styles() { wp_enqueue_style( 'parent-style', get_template_directory_uri() . '/style.css' ); wp_enqueue_script( 'polymer', get_stylesheet_directory_uri() . '/bower_components/webcomponentsjs/webcomponents-lite.js' ); } 

WordPress не имеет функции постановки в очередь для импорта HTML, но мы можем подключиться к ловушке wp_head, которая выводит элемент <head> страницы.

 <?php //functions.php add_action( 'wp_enqueue_scripts', 'sp_theme_enqueue_styles' ); function sp_theme_enqueue_styles() { wp_enqueue_style( 'parent-style', get_template_directory_uri() . '/style.css' ); wp_enqueue_style( 'polymer', get_stylesheet_directory_uri() . '/bower_components/webcomponentsjs/webcomponents-lite.min.js' ); } add_action( 'wp_head', 'include_polymer_elements' ); function include_polymer_elements() { ?> <link rel="import" href="<?php echo get_stylesheet_directory_uri() ?>/bower_components/polymer/polymer.html"> <link rel="import" href="<?php echo get_stylesheet_directory_uri() ?>/bower_components/paper-input/paper-input.html"> <?php } 

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

Регистрация виджета

Чтобы создать новый виджет, мы создадим новый дочерний класс из класса WP_Widget, а затем зарегистрируем его с помощью ловушки widgets_init .

Создайте новую папку в своей дочерней теме, назовите ее lib и добавьте в нее файл с именем sitepoint-map-widget.php .

 mkdir lib cd lib touch sitepoint-map-widget.php 

Скопируйте в этот файл следующее:

 <?php // lib/sitepoint-map-widget.php class SitepointMapWidget extends WP_Widget { function __construct() { // Instantiate the parent object parent::__construct( false, 'Google Paper Input' ); } function widget( $args, $instance ) { echo '<paper-input raised always-float-label label="Floating label"></paper-input>'; } } 

Все, что мы здесь сделали, — это создали новый дочерний класс WP_Widet и вызвали родительский конструктор, чтобы дать виджету собственное имя. Кроме того, функция widget — это та, которая выполняет фактический вывод. Сейчас мы просто выведем элемент <paper-input>, который является элементом из коллекции paper-input-elements .

И последнее, но не менее важное: нам нужно включить этот новый PHP-файл в начало нашего файла functions.php :

 <?php // functions.php require_once( 'lib/sitepoint-map-widget.php' ); // ... 

а затем зарегистрировать виджет в конце файла:

 <?php // functions.php // ... add_action( 'widgets_init', 'sp_register_widgets' ); function sp_register_widgets() { register_widget( 'SitepointMapWidget' ); } 

Теперь мы можем зайти в админ панель WordPress. В главном меню перейдите в « Внешний вид»> «Виджеты» , и там вы увидите виджет с именем « Google Paper Input» слева.

Перетащите его в раздел основной боковой панели справа, над остальными виджетами по умолчанию из темы SitePoint Base.

Использование Polymer в WordPress: виджет для боковой панели

Теперь вы можете посетить домашнюю страницу, а справа над окном поиска вы увидите вход дизайна материала с меткой.

Использование полимера в WordPress: ввод бумаги

И таким образом мы заключили Привет, Мир Полимера ! пример. Мы уже многое изучили — установили Polymer, интегрировали его с WordPress и включили пример виджета, всего в несколько строк кода, — но в следующем разделе мы продолжим это и реализуем наш компонент Google Map.

Знакомство с библиотекой веб-компонентов

Теперь мы воспользуемся коллекцией готовых веб-компонентов, доступных на WebComponents.org . Поиск по «Google Map» приведет нас к элементу, который нам нужен . Посмотрев последнюю часть URL этой страницы, мы можем узнать название пакета в бауэре.

Убедитесь, что вы находитесь в каталоге sitepoint-base-child и выполните следующую команду:

 bower install --save GoogleWebComponents/google-map#2.0-preview 

Теперь создайте новую папку в вашем каталоге sitepoint-base-child и назовите ее webcomponents . Здесь мы будем хранить все наши вещи, связанные с полимерами.

 mkdir webcomponents 

Создание нового полимерного компонента

Создайте новый файл в папке webcomponents и назовите его sitepoint-map.html .

 cd webcomponents touch sitepoint-map.html 

Каждый компонент Polymer организован в отдельные файлы HTML, представляющие новый пользовательский тег HTML. Этот HTML-файл состоит из трех заметных разделов:

1. Импорт зависимостей

 // sitepoint-map.html <link rel="import" href="../bower_components/google-map/google-map.html"> <link rel="import" href="../bower_components/paper-input/paper-input.html"> 

Здесь у нас есть элемент Google Maps, который мы установили несколько минут назад, а также элемент paper-input из нашего Hello, World! пример.

2. Шаблон

 // sitepoint-map.html <link rel="import" href="../bower_components/google-map/google-map.html"> <link rel="import" href="../bower_components/paper-input/paper-input.html"> <dom-module id="sitepoint-map"> <template> <style> google-map { height: 300px; } </style> <google-map id="spMap" fit-to-marker mouse-events="true" on-google-map-mousemove="trackCoords" on-google-map-mouseout="resetCoords" api-key="[[clientId]]"> <google-map-marker latitude="37.78" longitude="-122.4" draggable="true"></google-map-marker> </google-map> <paper-input raised id="coords" label="Coordinates"></paper-input> </template> </dom-module> 

Идентификатор элемента <dom-module> является фактическим именем элемента, то есть именем его тега. Рекомендуется присвоить ему то же имя, что и имя файла. Внутри этого у нас есть тег <template>, который представляет, из чего будет состоять новый пользовательский элемент. Это всегда можно разбить на основные элементы HTML. Тег <google-map> — это не что иное, как набор сценариев, стандартных элементов HTML и других пользовательских элементов HTML, которые можно снова разбить таким же образом.

Идентификатор элемента позволяет нам легко получить к нему доступ из скрипта (см. Следующий раздел), используя синтаксис this.$.id . В нашем случае мы будем использовать this.$.coords для ссылки на элемент input.

Затем следующие атрибуты тега <google-map> — это два события: google-map-mouseover которое запускается, когда пользователь наводит курсор мыши на наш виджет, и google-map-mouseout которое запускается, когда мышь покидает карту. Это не имеет большого практического значения, а демонстрирует, как мы привязываемся к событиям, запускаемым компонентом. Все, что нам нужно сделать, это добавить ключевое слово on-event-name и передать имя функции из нашего компонента, который мы хотим запустить. Это рекомендуемая рекомендация, так как мы исключаем необходимость добавлять идентификатор к элементу исключительно с целью нацеливания на него для добавления прослушивателя событий. Вы можете увидеть полный список доступных методов, событий и свойств здесь .

Мы также передаем атрибут fit-to-marker , который указывает карте изменить размер и перецентрировать, чтобы показать все маркеры внутри карты.

Вы также заметите, что мы указываем атрибут client-id . Вы должны будете заполнить это с вашим собственным идентификатором клиента. Чтобы получить один из них, пожалуйста, следуйте официальным инструкциям Google . Когда вы перейдете по этой ссылке, начните с нажатия кнопки GET A KEY .

  1. Сценарий
 // sitepoint-map.html <link rel="import" href="../bower_components/google-map/google-map.html"> <link rel="import" href="../bower_components/paper-input/paper-input.html"> <dom-module id="sitepoint-map"> <template> ... </template> <script> class SitepointMap extends Polymer.Element { static get is() { return 'sitepoint-map'; } static get properties() { return { clientId: String } } trackCoords(e) { this.$.coords.value = e.detail.latLng.lat() + ", " + e.detail.latLng.lng(); } resetCoords() { this.$.coords.value = "" } } window.customElements.define(SitepointMap.is, SitepointMap); </script> </dom-module> 

Минимум для создания элемента — вот эта часть:

 class SitepointMap extends Polymer.Element { static get is() { return 'sitepoint-map'; } } window.customElements.define(SitepointMap.is, SitepointMap); 

Где имя класса должно совпадать с идентификатором элемента <dom-template>. Рекомендуется использовать верблюд с этим именем и возвращать идентификатор элемента <dom-template> из статической функции is .

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

 <sitepoint-map client-id="..."></sitepoint-map> 

Будет clientId как clientId , то есть верблюд внутри компонента.

Если бы мы использовали случай верблюда, как это:

 <sitepoint-map clientId="..."></sitepoint-map> 

Затем внутри компонента атрибут сглаживается на все строчные буквы, поэтому вместо ссылки будет clientid .

После свойств у нас есть два пользовательских метода, которые используются как обратные вызовы для событий mousemove и mousemove соответственно. Метод trackCoords просто берет долготу и широту положения мыши на карте и отображает ее во входных данных.

Теперь, когда у нас есть веб-компонент, осталось сделать несколько вещей.

Импортировать компонент <sitepoint-map>

Сначала давайте создадим файл index.html внутри папки webcomponents . Это будет использоваться для импорта всех наших пользовательских компонентов. Мы поставим этот файл в очередь один раз, поэтому нам не нужно беспокоиться о постановке в очередь импорта HTML каждый раз, когда мы добавляем новый компонент. Вместо этого мы можем просто импортировать его в файл index.html , что является более удобным синтаксисом, чем wp_head его с помощью PHP в wp_head .

Затем вставьте это в только что созданный файл index.html:

 // webcomponents/index.html <link rel="import" href="sitepoint-map.html"> 

Вернитесь в файл functions.php , куда мы включаем кнопку бумаги и полимерный HTML-импорт в заголовке. Нам больше не нужен импорт бумажных кнопок, поэтому удалите его, а затем webcomponents index.html из каталога webcomponents :

 <?php // functions.php add_action( 'wp_head', 'include_polymer_elements' ); function include_polymer_elements() { ?> <link rel="import" href="<?php echo get_stylesheet_directory_uri() ?>/bower_components/polymer/polymer.html"> <link rel="import" href="<?php echo get_stylesheet_directory_uri() ?>/webcomponents/index.html"> <?php } 

Теперь вы можете добавлять все свои пользовательские компоненты в index.html . Например, если бы у нас также был пользовательский компонент Календаря Google, или нам просто нужно использовать готовый компонент, такой как paper paper , мы бы сделали это так

 // webcomponents/index.html <link rel="import" href="sitepoint-map.html"> <link rel="import" href="sitepoint-calendar.html"> <link rel="import" href="../bower_components/paper-progress/paper-progress.html"> 

Не копируйте это, это просто пример.

Вывести HTML-тег <sitepoint-map>

Теперь нам нужно вывести HTML-тег <sitepoint-map> вместо бумажного ввода, который мы использовали ранее.

 <?php // lib/sitepoint-map-widget.php class SitepointMapWidget extends WP_Widget { function __construct() { // Instantiate the parent object parent::__construct( false, 'Google Map' ); } function widget( $args, $instance ) { echo '<sitepoint-map client-id="' . GOOGLE_MAP_API_KEY . '"></sitepoint-map>'; } } 

Также не забудьте определить собственную константу GOOGLE_MAP_API_KEY . Лучшее место для этого — верхняя часть файла functions.php в нашей дочерней теме.

 <?php // functions.php require_once( 'lib/sitepoint-map-widget.php' ); define('GOOGLE_MAP_API_KEY', '<your-key-here>'); 

И вуаля! Теперь у нас есть полнофункциональный виджет Google Map для WordPress. Обычно плагины, которые предлагают такую ​​функциональность, могут содержать несколько сотен строк кода PHP. И здесь у нас есть очень хорошая настройка в нашей папке webcomponents , где все централизовано, легко расширяемо и настраиваемо.

Использование Polymer в WordPress: результат Google Map

Вывод

И на этом мы подошли к концу урока. К настоящему времени вы должны знать, как интегрировать Polymer в вашу установку WordPress и как добавить пользовательский компонент. Если вы хотите еще больше отточить свои навыки, следующим шагом для нашего компонента Google Maps будет сопоставление атрибутов виджета WordPress с атрибутами компонента. Таким образом, вы сможете передавать аргументы, такие как положение маркера, идентификатор клиента и т. Д., Из экрана настройки Внешний вид> Виджеты . Почему бы не попытаться реализовать это самостоятельно и дать мне знать, как вы поживаете.

И пока вы занимаетесь этим, потратьте некоторое время, чтобы окунуться в прекрасный мир веб-компонентов, просмотреть библиотеку и найти что-то интересное для интеграции в WordPress. Пожалуйста, поделитесь своими открытиями с нами в комментариях ниже. Я буду настороже!

Эта статья была рецензирована Саймоном Кодрингтоном . Спасибо всем рецензентам SitePoint за то, что они сделали контент SitePoint лучшим! [/ Special]