logo

Extra Block Types (EBT) - Neue Erfahrung im Layout Builder❗

Extra Block Types (EBT) - gestylte, anpassbare Blocktypen: Diashows, Registerkarten, Karten, Akkordeons und viele andere. Eingebaute Einstellungen für Hintergrund, DOM Box, Javascript Plugins. Erleben Sie die Zukunft der Layouterstellung schon heute.

Demo EBT-Module EBT-Module herunterladen

❗Extra Absatztypen (EPT) - Erfahrung mit neuen Absätzen

Extra Paragraph Types (EPT) - analoger, auf Absätzen basierender Satz von Modulen.

Demo EPT-Module EPT-Module herunterladen

Scroll

Composer in Drupal 8. Anzeige der neuesten Tweets von Twitter.

27/05/2025, by Ivan

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:

drupal composer

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:

https://apps.twitter.com/

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“:

twitter app block

2. Twitter-Anwendung erstellen. Füllen Sie das Formular aus und geben Sie die Domain Ihrer Website an.

drupal

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.

Drupal

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:

https://github.com/levmyshkin/twitter_block