{% extends "base/class.php.twig" %}
{% block file_path %}
\Drupal\{{module}}\Plugin\Block\{{class}}.
{% endblock %}
{% block namespace_class %}
/**
* @file
* Contains \Drupal\{{module}}\Plugin\Derivative\{{class}}.php.
*/
namespace Drupal\{{module}}\Plugin\Derivative;
{% endblock %}
{% block use_class %}
use Drupal\Component\Plugin\Derivative\DeriverBase;
use Drupal\Core\Entity\EntityStorageInterface;
use Drupal\Core\Plugin\Discovery\ContainerDeriverInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
{% endblock %}
{% block class_declaration %}
/**
* Provides block plugin definitions.
*
* @see \Drupal\{{module}}\Plugin\Block\{{class}}
*/
class {{class}} extends DeriverBase implements ContainerDeriverInterface
{% endblock %}
{% block class_properties %}
/**
* The node storage.
*
* @var \Drupal\Core\Entity\EntityStorageInterface
*/
protected $nodeStorage;
{% endblock %}
{% block class_construct %}
/**
* Creates a new NodeBlock.
*
* @param \Drupal\Core\Entity\EntityStorageInterface $node_storage
* The node storage.
*/
public function __construct(EntityStorageInterface $node_storage)
{
$this->nodeStorage = $node_storage;
}
{% endblock %}
{% block class_create %}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container, $base_plugin_id)
{
return new static(
$container->get('entity.manager')->getStorage('node')
);
}
{% endblock %}
{% block class_methods %}
/**
* {@inheritdoc}
*/
public function getDerivativeDefinitions($base_plugin_definition)
{
$nodes = $this->nodeStorage->loadByProperties(['type' => 'article']);
foreach ($nodes as $node) {
$this->derivatives[$node->id()] = $base_plugin_definition;
$this->derivatives[$node->id()]['admin_label'] = t('Node block: ') . $node->label();
}
return $this->derivatives;
}
{% endblock %}