Polymer gebruiken in WordPress:een aangepast Google Maps-component bouwen

Webcomponenten zijn een reeks standaarden voor het maken van aangepaste, herbruikbare HTML-elementen. Polymer is een open-source JavaScript-bibliotheek voor het bouwen van webapplicaties met behulp van webcomponenten. Het is gemaakt door die slimme mensen bij Google en biedt een aantal extra functies boven vanilla-webcomponenten en ondersteunt bij gebruik met een polyfill de nieuwste versie van alle belangrijke browsers.

In deze tutorial laat ik je zien hoe gemakkelijk het is om gebruik te maken van webcomponenten en Polymer in WordPress. Ik ga beginnen met u te laten zien hoe u Polymer integreert in uw WordPress-installatie, daarna ga ik demonstreren hoe u een werkende Google Maps-component aan de zijbalk van uw site kunt toevoegen. Dit kan handig zijn voor elke site (bijvoorbeeld die van een restaurant) die bezoekers een routebeschrijving naar hun pand moet geven.

Na het lezen kunt u deze techniek op uw eigen site toepassen. En u bent niet beperkt tot een Google Map-widget, u kunt kiezen uit het brede scala aan kant-en-klare componenten, of zelfs uw eigen componenten schrijven.

Zoals altijd is alle code voor deze tutorial beschikbaar in een GitHub-repository.

Waarom polymeer?

Omdat native ondersteuning voor webcomponenten steeds beter wordt, kan het je vergeven worden te vragen of Polymer nog steeds relevant is. Het korte antwoord op die vraag is Ja!

Polymer maakt gebruik van een verscheidenheid aan polyfills van webcomponenten - die hopelijk op een dag vol zullen zijn - maar het is veel meer dan dat. Polymer is een wrapper rond de webcomponenten-API waarmee we nieuwe componenten met een veel hogere snelheid kunnen ontwikkelen en implementeren dan we anders zouden kunnen. Het biedt verschillende extra functies via vanilla-webcomponenten, zoals eenrichtings- en tweerichtingsgegevensbinding, berekende eigenschappen en bewegingsgebeurtenissen. Het wordt geleverd met een zeer gepolijste CLI die kan worden gebruikt voor taken als het opzetten van een project, het uitvoeren van tests of het uitvoeren van een lokale server, en het kan gebruik maken van een breed scala aan vooraf gebouwde elementen, zoals het geliefde materiaal ontwerpelementen bibliotheek.

Kortom, Polymer is nog steeds erg relevant. Het is een krachtig raamwerk dat bij de productie wordt gebruikt door grote bedrijven zoals USA Today, Coca Cola en Electronic Arts.

WordPress instellen

Voordat we beginnen, moeten we onze omgeving instellen waarop WordPress wordt uitgevoerd. Voor deze tutorial gebruik ik de ScotchBox Vagrant VM, uitgerust met een aantal vooraf geïnstalleerde tools om je WordPress-installatie een kickstart te geven.

Als je WordPress al hebt geïnstalleerd, of liever een andere methode gebruikt, kun je dit stukje overslaan. Als je een beetje hulp nodig hebt bij de installatie, maar niet de zwervende route wilt volgen die hieronder wordt beschreven, probeer dan te Googlen op "WordPress lokaal installeren" en zoek naar een up-to-date zelfstudie.

We beginnen met ervoor te zorgen dat Git, Vagrant en Virtual Box op ons systeem zijn geïnstalleerd. We kunnen dan de GitHub-repo klonen met ScotchBox's vooraf ingevulde Vagrantfile.

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

Nu zijn we klaar om vagrant up uit te voeren . Nadat onze machine is opgestart, moeten we de standaard /public/index.php . verwijderen statisch bestand en installeer WordPress.

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

Nu moeten we een duplicaat maken van de wp-config-sample.php het dossier. Noem het wp-config.php .

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

en bewerk de volgende waarden:

// wp-config.php

// ...

define('DB_NAME', 'scotchbox');
define('DB_USER', 'root');
define('DB_PASSWORD', 'root');

// ...

Nu bent u klaar om uw browser op te starten en naar http://192.168.33.10 te gaan. U wordt gevraagd om de inloggegevens van het beheerdersaccount en de sitetitel in te voeren. Voel je vrij om deze naar eigen inzicht in te vullen.

Het SitePoint-basisthema toevoegen

Dus we hebben WordPress ingesteld, nu hebben we een thema nodig. Out of the box zal dit het Twenty Seventeen-thema zijn, maar dit is vrij algemeen en bevat veel meer dan je normaal gesproken nodig hebt. Een goed alternatief hier is om het SitePoint WordPress-basisthema te gebruiken.

Dit thema is gemaakt als antwoord op de vraag "Hoe zou het perfecte WordPress-basisthema eruit zien?". De functies zijn onder meer:​​

  • Geen vet. Geen rommel. Snel.
  • Minimaal ontwerp. Het is jouw taak om het mooi te maken.
  • Geen 'schattige' functies die je eigenlijk nooit gebruikt.
  • SEO-vriendelijk tot in de kern.
  • Super mobielvriendelijk.
  • 100% open source en gratis te gebruiken.

Het SitePoint WordPress-basisthema is een geweldig startpunt voor nieuwe projecten. Het is mobielvriendelijk, gebruiksvriendelijk en 100% gratis. Om de rest van deze tutorial te volgen, ga je naar de startpagina van het thema en download je het nu.

En terwijl je daar bent, wil je misschien ook de reeks betaalde thema's bekijken die SitePoint biedt. Deze zijn allemaal gebaseerd op het basisthema en omvatten een e-commercethema, restaurantthema, portfoliothema, zakelijk thema en constructiethema.

Na het downloaden van het SitePoint WordPress-basisthema, pak het uit en kopieer/plak het naar dewp-content/themes map. Maak vervolgens een nieuwe map met de naam sitepoint-base-child , in wp-content/themes . Maak in die map een style.css . aan bestand en een functions.php het dossier.

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

Open style.css en kopieer dit erin:

/*
 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
*/

En in 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' );
}

Hierdoor wordt de basis-CSS van het bovenliggende thema in de wachtrij geplaatst.

We hebben zojuist een child-thema gemaakt, waarvan de rol het is om functionaliteiten bovenop het basisthema te implementeren zonder de basisbestanden te hoeven wijzigen. Alle aanpassingen passen in dit child-thema.

Een laatste stap is om naar het beheerdersdashboard te gaan en vervolgens naar Uiterlijk> Thema's in het hoofdmenu aan de zijkant en klik op Activeren onder, Sitepoint Base Child-thema.

Inclusief polymeer in WordPress

Nu dat klaar is, moeten we Polymer met prieel installeren. Zorg ervoor dat u zich in de public/wp-content/themes/sitepoint-base-child . bevindt map, en voer dan uit:

bower init

U kunt op elke vraag antwoorden met het standaardantwoord. Vervolgens moeten we de afhankelijkheden installeren:

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

Hiermee worden Polymer en de papierinvoercomponent geïnstalleerd, zodat we direct een invoercomponent kunnen hebben die is ontworpen voor luxe materiaal. Het is belangrijk om de #2.0-preview . te gebruiken tag voor de papierinvoer en later ook voor het Google Map-element, omdat het anders niet werkt met de nieuwste versie van Polymer (versie 2.0).

Om Polymer te kunnen gebruiken, moeten we het opnemen met behulp van een HTML-import, en we zullen ook de polyfill voor webcomponenten opnemen, om oudere browsers te ondersteunen.

Ga naar de functions.php bestand in het child-thema en voeg een enqueue naar de bestaande enqueue functie.

<?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 heeft geen wachtrijfunctie voor het in de wachtrij plaatsen van HTML-import, maar we kunnen inhaken op de wp_head-hook die wordt uitgevoerd in het -element van de pagina.

<?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
}

Dat is alles wat we nodig hadden om Polymer-elementen in WordPress te gaan gebruiken. Laten we nu een WordPress-widget maken, zodat we deze kunnen uitproberen voor een testrit.

Een widget registreren

Om een ​​nieuwe widget te maken, zullen we een nieuwe onderliggende klasse van de WP_Widget-klasse maken en deze vervolgens registreren met de widgets_init-hook.

Maak een nieuwe map in je child-thema, noem deze lib , en voeg het een bestand toe met de naam sitepoint-map-widget.php .

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

Kopieer het volgende naar dat bestand:

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

Het enige dat we hier hebben gedaan, is een nieuwe onderliggende klasse van WP_Widet . maken en riep de bovenliggende constructor om de widget een aangepaste naam te geven. Bovendien is de widget functie is degene die de daadwerkelijke uitvoer doet. Voor nu zullen we gewoon een -element uitvoeren, wat een element is uit de paper-input-elements-verzameling.

Last but not least moeten we dit nieuwe PHP-bestand bovenaan onze functions.php . opnemen bestand:

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

// ...

en registreer vervolgens een widget aan het einde van het bestand:

<?php
// functions.php

// ...

add_action( 'widgets_init', 'sp_register_widgets' );
function sp_register_widgets() {
  register_widget( 'SitepointMapWidget' );
}

Nu kunnen we naar het beheerdersdashboard van WordPress gaan. Ga vanuit het hoofdmenu naar Vormgeving> Widgets , en daar zou je een widget moeten zien met de naam Google Paper Input aan de linkerkant.

Sleep het naar de Hoofdzijbalk sectie aan de rechterkant, boven de rest van de standaardwidgets van het SitePoint Base-thema.

Nu kunt u de startpagina bezoeken en aan de rechterkant, rechts boven het zoekvak, ziet u een materiaalontwerpinvoer met een label.

En zo hebben we Polymer's Hello, World! . afgesloten voorbeeld. We hebben al veel behandeld:Polymer installeren, het integreren met WordPress en een voorbeeldwidget toevoegen, allemaal in slechts een paar regels code, maar in de volgende sectie gaan we verder en implementeren we onze Google Map-component.

Introductie van de Web Components-bibliotheek

Nu zullen we gebruik maken van de verzameling kant-en-klare webcomponenten, beschikbaar op WebComponents.org. Zoeken naar "Google Map" leidt ons naar het element dat we nodig hebben. Door naar het laatste deel van de URL van die pagina te kijken, kunnen we de naam van het pakket in prieel achterhalen.

Zorg ervoor dat u zich in de sitepoint-base-child . bevindt directory en voer het volgende commando uit:

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

Maak nu een nieuwe map in uw sitepoint-base-child map en noem deze webcomponents . Hier bewaren we al onze polymeergerelateerde spullen.

mkdir webcomponents

Een nieuwe polymeercomponent maken

Maak een nieuw bestand in de webcomponents map en noem deze sitepoint-map.html .

cd webcomponents
touch sitepoint-map.html

Elke Polymer-component is georganiseerd in afzonderlijke HTML-bestanden, die een nieuwe aangepaste HTML-tag vertegenwoordigen. Dit HTML-bestand bestaat uit drie opvallende secties:

1. De import van afhankelijkheden

// 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">

Hier hebben we het Google Maps-element dat we zojuist hebben geïnstalleerd, evenals de paper-input element uit onze Hello, World! voorbeeld.

2. De sjabloon

// 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>

De ID van het element is de werkelijke naam van het element—d.w.z. zijn tagnaam. Het beste is om het dezelfde naam te geven als de naam van het bestand. Daarbinnen hebben we een