logo

Dodatni tipovi blokova (EBT) - Novo iskustvo rada sa Layout Builder-om❗

Dodatni tipovi blokova (EBT) – stilizovani, prilagodljivi tipovi blokova: slajdšouvi, kartice sa tabovima, kartice, akordeoni i mnogi drugi. Ugrađena podešavanja za pozadinu, DOM Box, javascript dodatke. Iskusite budućnost kreiranja rasporeda već danas.

Demo EBT moduli Preuzmite EBT module

❗Dodatni tipovi pasusa (EPT) – Novo iskustvo rada sa pasusima

Dodatni tipovi pasusa (EPT) – analogni skup modula zasnovan na pasusima.

Demo EPT moduli Preuzmite EPT module

Scroll

Composer u Drupalu 8. Prikaz poslednjih tvitova sa Twittera.

27/05/2025, by Ivan

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:

drupal composer

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:

https://apps.twitter.com/

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:

twitter app block

2. Kreiranje Twitter aplikacije. Popunite formular sa podacima o domeni vašeg sajta.

drupal

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.

Drupal

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:

https://github.com/levmyshkin/twitter_block