Extra Block Types (EBT) - New Layout Builder experience❗

Extra Block Types (EBT) - styled, customizable block types: Slideshows, Tabs, Cards, Accordions and many others. Built-in settings for background, DOM Box, javascript plugins. Experience the future of layout building today.

Demo EBT modules Download EBT modules

❗Extra Paragraph Types (EPT) - New Paragraphs experience

Extra Paragraph Types (EPT) - analogical paragraph based set of modules.

Demo EPT modules Download EPT modules

Scroll

Composer в Drupal 8. Вывод последних твитов из Twitter.

21/11/2019, by Ivan

Для установки модулей и библиотек лучше всего использовать composer. Composer - это менеджер библиотек, он позволяет управлять зависимостями одних библиотек, модулей, от других библиотек, модулей. Если у модуля есть зависимость от библиотеки, то composer автоматически скачать эту библиотеку при установке модулей. С одной стороны composer усложняет установку модулей, но с другой нам становится проще в плане установки библиотек, потому что теперь они будут скачивать и подключаться сами.

Для того чтобы скачать и установать composer перейдите на официальный сайт:

https://getcomposer.org/download/

Кстати, Drush теперь тоже ставится через Composer, если вы устанавливали Drush, то composer у вас уже есть. Проверить что у вас установлен composer можно коммандой:

composer --version

В результате должна появиться версия composer:

drupal composer

Теперь заходим в папку нашего сайта через консоль и можем работать с Composer.

Вывод последних твитов Twitter в Drupal 8

Для начала вы должны создать application в Twitter и получить пару токенов, которые будут использоваться дальше. Вы можете создать application здесь:

https://apps.twitter.com/

Версия 1.0 скоро перестанет работать и неавторизованные запросы будут отклоняться. Так что используйте версию 1.1 или более позднюю версию Twitter API.

1. Создание аккаунта разработчика. Настройте свой аккаунт разработчика на Twitter.

Заполняем форму регистрации. Это бесплатно и это необходимый шаг, чтобы выполняться запросы к API Twitter версии 1.1. Заходите теперь на страницу My Apps https://apps.twitter.com/ и нажимайте Create New App:

twitter app block

2. Создание Twitter application. Заполняйте форму создания application с указанием домена вашего сайта.

drupal

Если вас перенаправлило на страницу application, значит application создался. Теперь нам потребуются следующие данные:

  • Consumer key
  • Consumer secret
  • Access token
  • Access token secret

В документации Twitter API есть описание для чего нужен токен и как его использовать https://dev.twitter.com/oauth/overview/single-user..

3. Создание Access token. OAuth требует несколько токенов. Так что вам нужно их сгенерировать.

Drupal

Это создаст Access Token, Access Token Secret, которые мы будем дальше использовать.

Теперь мы можем получать наши твиты через Twitter API. Мы можем использовать напрямую Twitter API и через drupal_http_request получать ответы от серверов Twitter. Но лучше и проще использовать библиотеку для работы с Twitter. Если Twitter API измениться, то нам не нужно будет разбираться в тонкостях нового v1.2 API, мы просто обновим библиотеку, а поддержку совместимости оставим разработчикам библиотеки.

В данной статье мы будем использовать эту библиотеку

https://packagist.org/packages/j7mbo/twitter-api-php

Для того чтобы установить эту библиотеку в Drupal, нам нужно только написать в composer команду:

composer require j7mbo/twitter-api-php

Composer сам найдет библиотеку и установит ее зависимости, если они есть. И мы сразу сможем использовать эту библиотеку у себя в коде.

Ниже код модуля для вывода последнего твита в блоке. Настройки ключей и токенов, я вынес в отдельную конфигурационную форму:

/admin/structure/twitter-block/settings

Код модуля можно скачать в прикрепленных файлах статьи или с Github репозитория учебного сайта по верстке Drupal 8 темы на основе Bootstrap:

https://github.com/Drupalbook/bootstrap

Файлы модуля:

/modules/twitter_block/twitter_block.info.yml - Основной файл модуля

name: Twitter Block
description: Display Last tweets.
type: module
core: 8.x
package: Custom

/modules/twitter_block/src/Plugin/Block/TwitterBlock.php - Плагин блока

<?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'),
    );
 
    // Set here the Twitter account from where getting latest tweets
    $screen_name = 'netglooweb';
 
    // Get timeline using 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 - Конфигурационная форма

<?php
 
namespace Drupal\twitter_block\Form;
 
use Drupal\Core\Form\ConfigFormBase;
use Drupal\Core\Form\FormStateInterface;
 
/**
 * Configure example settings for this site.
 */
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 - создаем путь для нашей страницы конфигурационной формы.

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 - файл в котором мы прописываем зависимость нашего модуля от библиотеки 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"
}

Код модуля на Github:

https://github.com/levmyshkin/twitter_block