imdb_api-1.0.x-dev/src/Plugin/Block/ActorsBornToday.php

src/Plugin/Block/ActorsBornToday.php
<?php

namespace Drupal\imdb_api\Plugin\Block;

use Drupal\Core\Block\BlockBase;
use Drupal\Core\Cache\Cache;
use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;

/**
 * Provides a 'ActorsBornTodayBlock' block.
 *
 * @Block(
 *  id = "actors_born_today",
 *  admin_label = @Translation("Actors born today"),
 * )
 */
class ActorsBornToday extends BlockBase implements ContainerFactoryPluginInterface {

  /**
   * Drupal\imdb_api\Plugin\ImdbItemsListManager definition.
   *
   * @var \Drupal\imdb_api\Plugin\ImdbItemsListManager
   */
  protected $pluginManagerImdbItemsListActor;

  /**
   * The cache factory.
   *
   * @var \Drupal\Core\Cache\CacheFactoryInterface
   */
  protected $cacheFactory;

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
    $instance = new static($configuration, $plugin_id, $plugin_definition);
    $instance->pluginManagerImdbItemsListActor = $container->get('plugin.manager.imdb_items_list.actor');
    $instance->cacheFactory = $container->get('cache_factory');
    return $instance;
  }

  /**
   * {@inheritdoc}
   */
  public function build() {
    $build = [];
    $build['#theme'] = 'imdb_api__actors__with_known_for';
    $build['#attached']['library'][] = 'imdb_api/actor.teaser';

    //$cache_bin = $this->cacheFactory->get('default');

    $born_today = $this->pluginManagerImdbItemsListActor->createInstance('born_today', ['shuffle' => TRUE, 'limit' => 2, 'options' => [
      'day' => date('d'),
      'month' => date('m'),
    ]]);

    $list = $born_today->getList();
    foreach ($list as $key => $entity) {
      // Passing actor entity.
      $build['#actors'][$key]['entity'] = $entity;

      // Known For section.
      foreach ($entity->getKnownFor() as $known_for_key => $known_for) {
        $build['#actors'][$key]['known_for'][$known_for_key]['title'] = $known_for->title->title;
        $build['#actors'][$key]['known_for'][$known_for_key]['year'] = $known_for->title->year;

        $build['#actors'][$key]['known_for'][$known_for_key]['characters'] = [];
        if (isset($known_for->summary->characters)) {
          foreach ($known_for->summary->characters as $character) {
            $build['#actors'][$key]['known_for'][$known_for_key]['characters'][] = $character;
          }
        }

        // Passing Known For image.
        $build['#actors'][$key]['known_for'][$known_for_key]['image'] = $known_for->title->image->url;
      }

      // Passing actor's image.
      $build['#actors'][$key]['image'] = $entity->getImage()->url;
    }

    // Providing cache metadata.
    $build['#cache'] = [
      'bin' => 'render',
      'keys' => [
        'actors_born_today',
        date('Y-m-d'),
      ],
      'contexts' => ['imdb_api_date'],
      'tags' => [
        'imdb_api:list:actors',
        'imdb_api:list:actors:born_today',
      ],
      //'max-age' => Cache::PERMANENT,
      'max-age' => 120,
    ];

    return $build;
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc