Composer in Drupal 8. Weergave van de laatste tweets van Twitter.
Voor het installeren van modules en bibliotheken is het het beste om Composer te gebruiken. Composer is een pakketbeheerder voor PHP waarmee je afhankelijkheden tussen bibliotheken en modules kunt beheren. Als een module afhankelijk is van een bibliotheek, zal Composer deze automatisch downloaden en installeren. Enerzijds maakt Composer het installatieproces iets complexer, maar anderzijds vereenvoudigt het het beheer van bibliotheken, omdat deze nu automatisch worden opgehaald en geladen.
Om Composer te downloaden en te installeren, ga naar de officiële website:
https://getcomposer.org/download/
Overigens wordt Drush tegenwoordig ook via Composer geïnstalleerd. Als je Drush al hebt geïnstalleerd, heb je Composer dus al. Controleer of Composer aanwezig is met het commando:
composer --version
Hiermee wordt de geïnstalleerde versie van Composer weergegeven:
Ga nu via de console naar de map van je website om met Composer te werken.
De laatste tweets van Twitter weergeven in Drupal 8
Allereerst moet je een Twitter-applicatie aanmaken en een set tokens verkrijgen die later gebruikt zullen worden. Je kunt een applicatie aanmaken via:
Versie 1.0 zal binnenkort niet meer werken, en niet-geautoriseerde verzoeken zullen worden geweigerd. Gebruik dus versie 1.1 of hoger van de Twitter API.
1. Maak een ontwikkelaarsaccount aan. Stel je ontwikkelaarsaccount in op Twitter.
Vul het registratieformulier in. Dit is gratis en vereist om verzoeken te kunnen uitvoeren naar de Twitter API versie 1.1. Ga vervolgens naar https://apps.twitter.com/ en klik op “Create New App”:
2. Maak de Twitter-applicatie aan. Vul het formulier in met de domeinnaam van je website.
Als je wordt doorgestuurd naar de applicatiepagina, is de app aangemaakt. Je hebt nu de volgende gegevens nodig:
- Consumer key
- Consumer secret
- Access token
- Access token secret
In de Twitter API-documentatie vind je uitleg over de tokens en hoe je ze gebruikt.
3. Genereer een Access Token. OAuth vereist meerdere tokens, dus genereer ze via de instellingenpagina.
Hiermee worden de Access Token en Access Token Secret aangemaakt, die we later gebruiken.
Nu kunnen we onze tweets ophalen via de Twitter API. Je kunt dit doen met drupal_http_request()
, maar het is eenvoudiger om een kant-en-klare PHP-bibliotheek te gebruiken. Als Twitter de API wijzigt, hoef je alleen de bibliotheek bij te werken zonder de nieuwe API-structuur te leren.
In dit voorbeeld gebruiken we deze bibliotheek:
https://packagist.org/packages/j7mbo/twitter-api-php
Om deze bibliotheek te installeren in Drupal, voer je het volgende Composer-commando uit:
composer require j7mbo/twitter-api-php
Composer zal automatisch de bibliotheek en eventuele afhankelijkheden downloaden. Daarna kun je deze direct in je code gebruiken.
Hieronder staat de modulecode die de laatste tweet in een blok weergeeft. De instellingen voor de sleutels en tokens worden opgeslagen in een configuratieformulier:
/admin/structure/twitter-block/settings
Je kunt de module downloaden via de bijlagen of via de GitHub-repository van de trainingssite:
https://github.com/Drupalbook/bootstrap
Bestanden van de module:
/modules/twitter_block/twitter_block.info.yml – hoofdbestand van de module
name: Twitter Block description: Display Last tweets. type: module core: 8.x package: Custom
/modules/twitter_block/src/Plugin/Block/TwitterBlock.php – Blokplugin
<?php namespace Drupal\twitter_block\Plugin\Block; use Drupal\Core\Block\BlockBase; /** * Provides a Last tweet block. * * @Block( * id = "twitter_block", * admin_label = @Translation("Twitter block"), * ) */ class TwitterBlock extends BlockBase { public function build() { $content = ''; $config = \Drupal::config('twitter_block.settings'); $settings = [ 'consumer_key' => $config->get('consumer_key'), 'consumer_secret' => $config->get('consumer_secret'), 'oauth_access_token' => $config->get('access_token'), 'oauth_access_token_secret' => $config->get('access_token_secret'), ]; $screen_name = 'netglooweb'; $url = 'https://api.twitter.com/1.1/statuses/user_timeline.json'; $getfield = "?count=1"; $requestMethod = 'GET'; $twitter = new \TwitterAPIExchange($settings); $user_timeline = $twitter ->setGetfield($getfield) ->buildOauth($url, $requestMethod) ->performRequest(); $messages = json_decode($user_timeline); if (!empty($messages)) { foreach ($messages as $message) { $content .= '<div class="twitter-message">' . $message->text . '</div>'; } } return ['#markup' => $content]; } }
/modules/twitter_block/src/Form/TwitterBlockSettingsForm.php – Configuratieformulier
<?php namespace Drupal\twitter_block\Form; use Drupal\Core\Form\ConfigFormBase; use Drupal\Core\Form\FormStateInterface; class TwitterBlockSettingsForm extends ConfigFormBase { public function getFormId() { return 'twitter_block_admin_settings'; } protected function getEditableConfigNames() { return ['twitter_block.settings']; } public function buildForm(array $form, FormStateInterface $form_state) { $config = $this->config('twitter_block.settings'); $form['consumer_key'] = [ '#type' => 'textfield', '#title' => $this->t('Consumer key'), '#default_value' => $config->get('consumer_key'), ]; $form['consumer_secret'] = [ '#type' => 'textfield', '#title' => $this->t('Consumer secret'), '#default_value' => $config->get('consumer_secret'), ]; $form['access_token'] = [ '#type' => 'textfield', '#title' => $this->t('Access token'), '#default_value' => $config->get('access_token'), ]; $form['access_token_secret'] = [ '#type' => 'textfield', '#title' => $this->t('Access token secret'), '#default_value' => $config->get('access_token_secret'), ]; return parent::buildForm($form, $form_state); } public function submitForm(array &$form, FormStateInterface $form_state) { $this->config('twitter_block.settings') ->set('consumer_key', $form_state->getValue('consumer_key')) ->set('consumer_secret', $form_state->getValue('consumer_secret')) ->set('access_token', $form_state->getValue('access_token')) ->set('access_token_secret', $form_state->getValue('access_token_secret')) ->save(); parent::submitForm($form, $form_state); } }
/modules/twitter_block/twitter_block.routing.yml – Route voor de configuratiepagina:
twitter_block.settings: path: '/admin/structure/twitter-block/settings' defaults: _form: '\Drupal\twitter_block\Form\TwitterBlockSettingsForm' _title: 'Twitter API Settings' requirements: _permission: 'administer site configuration'
/modules/twitter_block/composer.json – afhankelijkheid van de bibliotheek j7mbo/twitter-api-php
{ "name": "drupal/twitter_block", "type": "drupal-module", "description": "Displays Last tweets.", "homepage": "https://drupalbook.org/ru/drupal/composer-v-drupal-8-vyvod-poslednih-tvitov-iz-twitter", "license": "GPL-2.0+", "require": { "j7mbo/twitter-api-php": "dev-master" }, "minimum-stability": "dev" }
Code van de module op GitHub: