Composer u Drupalu 8. Prikaz poslednjih tvitova sa Twittera.
Za instalaciju modula i biblioteka najbolje je koristiti Composer. Composer je menadžer biblioteka koji omogućava upravljanje zavisnostima između biblioteka i modula. Ako modul zavisi od neke biblioteke, Composer automatski preuzima tu biblioteku prilikom instalacije modula. Sa jedne strane, Composer može otežati instalaciju modula, ali sa druge strane olakšava upravljanje bibliotekama jer ih automatski preuzima i povezuje.
Da biste preuzeli i instalirali Composer, posetite zvanični sajt:
https://getcomposer.org/download/
Inače, Drush se sada takođe instalira preko Composera, pa ako ste instalirali Drush, verovatno već imate Composer. Da proverite da li je Composer instaliran, unesite sledeću komandu:
composer --version
Rezultat će prikazati verziju Composera:
Sada uđite u folder vašeg sajta putem konzole i možete raditi sa Composerom.
Prikaz poslednjih Twitter tvitova u Drupal 8
Prvo morate napraviti aplikaciju na Twitteru i dobiti par tokena koji će se koristiti dalje. Aplikaciju možete napraviti ovde:
Verzija 1.0 uskoro neće raditi i neautorizovani zahtevi će biti odbijeni. Zato koristite verziju 1.1 ili noviju Twitter API-ja.
1. Kreiranje developerskog naloga. Registrujte svoj developerski nalog na Twitteru.
Popunite registracioni formular. Ovo je besplatno i neophodno za rad sa Twitter API verzije 1.1. Zatim idite na stranicu My Apps https://apps.twitter.com/ i kliknite na Create New App:
2. Kreiranje Twitter aplikacije. Popunite formular sa podacima o domeni vašeg sajta.
Ako ste preusmereni na stranicu aplikacije, aplikacija je kreirana. Potrebni su nam sledeći podaci:
- Consumer key
- Consumer secret
- Access token
- Access token secret
U Twitter API dokumentaciji možete pročitati za šta služe tokeni i kako se koriste: https://dev.twitter.com/oauth/overview/single-user.
3. Kreiranje Access tokena. OAuth zahteva nekoliko tokena, koje treba generisati.
Ovim ćete kreirati Access Token i Access Token Secret, koje ćemo koristiti u nastavku.
Sada možemo da dobijamo tvitove preko Twitter API-ja. Možemo direktno koristiti Twitter API i preko funkcije drupal_http_request primati odgovore od Twitter servera, ali je bolje i lakše koristiti biblioteku za rad sa Twitterom. Ako se Twitter API promeni, nećemo morati da menjamo kod, već ćemo samo ažurirati biblioteku, a kompatibilnost ostavljamo programerima biblioteke.
U ovom primeru koristićemo biblioteku:
https://packagist.org/packages/j7mbo/twitter-api-php
Da bismo instalirali ovu biblioteku u Drupal, dovoljno je da u composer unesemo komandu:
composer require j7mbo/twitter-api-php
Composer će sam pronaći biblioteku i instalirati sve zavisnosti. Nakon toga možemo odmah koristiti biblioteku u našem kodu.
U nastavku je kod modula koji prikazuje poslednji tvit u bloku. Podešavanja ključeva i tokena sam izdvojio u posebnu konfiguracionu formu:
/admin/structure/twitter-block/settings
Kod modula možete preuzeti u prilozima članka ili sa Github repozitorijuma sajta za učenje Drupala 8 i Bootstrap teme:
https://github.com/Drupalbook/bootstrap
Datoteke modula:
/modules/twitter_block/twitter_block.info.yml - Osnovni fajl modula
name: Twitter Block description: Display Last tweets. type: module core: 8.x package: Custom
/modules/twitter_block/src/Plugin/Block/TwitterBlock.php - Plugin za blok
<?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 - Konfiguraciona forma
<?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 - Kreiranje puta za stranicu konfiguracione forme.
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 - fajl u kojem je navedena zavisnost modula od biblioteke 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" }
Kod modula na Github-u: