Composer in Drupal 8. Anzeige der neuesten Tweets von Twitter.
Zur Installation von Modulen und Bibliotheken ist es am besten, Composer zu verwenden. Composer ist ein Bibliotheksmanager, der es ermöglicht, Abhängigkeiten von Bibliotheken und Modulen zu verwalten. Wenn ein Modul eine Abhängigkeit von einer Bibliothek hat, lädt Composer diese automatisch beim Installieren der Module herunter. Einerseits macht Composer die Modulinstallation etwas komplexer, andererseits wird die Verwaltung von Bibliotheken einfacher, da sie automatisch geladen und eingebunden werden.
Um Composer herunterzuladen und zu installieren, besuchen Sie die offizielle Webseite:
https://getcomposer.org/download/
Übrigens wird Drush jetzt ebenfalls über Composer installiert. Wenn Sie Drush bereits installiert haben, ist Composer schon vorhanden. Sie können überprüfen, ob Composer installiert ist, mit dem Befehl:
composer --version
Sie sollten daraufhin die Composer-Version sehen:
Jetzt öffnen Sie die Konsole im Verzeichnis Ihrer Drupal-Seite und können mit Composer arbeiten.
Anzeige der neuesten Twitter-Tweets in Drupal 8
Zunächst müssen Sie eine Anwendung bei Twitter anlegen und Token erzeugen, die Sie später verwenden. Die Anwendung können Sie hier erstellen:
Die API-Version 1.0 funktioniert bald nicht mehr, nicht autorisierte Anfragen werden abgelehnt. Nutzen Sie daher die API-Version 1.1 oder neuer.
1. Entwicklerkonto erstellen. Richten Sie Ihr Entwicklerkonto bei Twitter ein.
Füllen Sie das Registrierungsformular aus. Dies ist kostenlos und notwendig für API-Anfragen mit Version 1.1. Gehen Sie nun auf „My Apps“ https://apps.twitter.com/ und klicken Sie auf „Create New App“:
2. Twitter-Anwendung erstellen. Füllen Sie das Formular aus und geben Sie die Domain Ihrer Website an.
Wenn Sie auf die Anwendungsseite weitergeleitet werden, wurde die App erfolgreich erstellt. Nun benötigen wir folgende Daten:
- Consumer Key
- Consumer Secret
- Access Token
- Access Token Secret
Die Twitter API-Dokumentation erklärt die Bedeutung und Verwendung dieser Tokens:
https://dev.twitter.com/oauth/overview/single-user.
3. Access Token erstellen. OAuth erfordert mehrere Tokens, die Sie generieren müssen.
Dies erzeugt den Access Token und Access Token Secret, die wir später verwenden.
Jetzt können wir Tweets über die Twitter API abrufen. Man kann die API direkt per drupal_http_request nutzen, besser und einfacher ist es aber, eine Bibliothek zu verwenden. So müssen Sie bei API-Änderungen nur die Bibliothek aktualisieren und sich nicht mit neuen Details beschäftigen.
Wir verwenden diese Bibliothek:
https://packagist.org/packages/j7mbo/twitter-api-php
Um diese Bibliothek in Drupal zu installieren, führen Sie einfach folgenden Composer-Befehl aus:
composer require j7mbo/twitter-api-php
Composer lädt die Bibliothek und ihre Abhängigkeiten automatisch herunter. Sie können die Bibliothek dann sofort im Code nutzen.
Unten sehen Sie den Code eines Moduls, das den letzten Tweet in einem Block anzeigt. Die Schlüssel und Tokens werden in einem eigenen Konfigurationsformular gespeichert:
/admin/structure/twitter-block/settings
Den Modulcode können Sie im Anhang des Artikels oder im Github-Repository des Drupal 8 Bootstrap-Themes herunterladen:
https://github.com/Drupalbook/bootstrap
Dateien des Moduls:
/modules/twitter_block/twitter_block.info.yml – Hauptmoduldatei
name: Twitter Block description: Display Last tweets. type: module core: 8.x package: Custom
/modules/twitter_block/src/Plugin/Block/TwitterBlock.php – Block-Plugin
<?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 { /** * {@inheritdoc} */ public function build() { $content = ''; $config = \Drupal::config('twitter_block.settings'); $settings = array( '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'), ); // Twitter-Account, von dem die Tweets abgerufen werden $screen_name = 'netglooweb'; // Timeline abrufen via TwitterAPIExchange $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 array( '#markup' => $content, ); } }
/modules/twitter_block/src/Form/TwitterBlockSettingsForm.php – Konfigurationsformular
<?php namespace Drupal\twitter_block\Form; use Drupal\Core\Form\ConfigFormBase; use Drupal\Core\Form\FormStateInterface; /** * Konfigurationsformular für Twitter API Einstellungen. */ class TwitterBlockSettingsForm extends ConfigFormBase { /** * {@inheritdoc} */ public function getFormId() { return 'twitter_block_admin_settings'; } /** * {@inheritdoc} */ protected function getEditableConfigNames() { return [ 'twitter_block.settings', ]; } /** * {@inheritdoc} */ public function buildForm(array $form, FormStateInterface $form_state) { $config = $this->config('twitter_block.settings'); $form['consumer_key'] = array( '#type' => 'textfield', '#title' => $this->t('Consumer key'), '#default_value' => $config->get('consumer_key'), ); $form['consumer_secret'] = array( '#type' => 'textfield', '#title' => $this->t('Consumer secret'), '#default_value' => $config->get('consumer_secret'), ); $form['access_token'] = array( '#type' => 'textfield', '#title' => $this->t('Access token'), '#default_value' => $config->get('access_token'), ); $form['access_token_secret'] = array( '#type' => 'textfield', '#title' => $this->t('Access token secret'), '#default_value' => $config->get('access_token_secret'), ); return parent::buildForm($form, $form_state); } /** * {@inheritdoc} */ 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 – definiert den Pfad zum Konfigurationsformular.
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 – definiert die Abhängigkeit des Moduls von der Bibliothek 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" }
Der Modulcode auf Github: