0

After adding a block file to src/Plugin/Block I can't add the block on the Block Layout admin page. When I filter by block name I can see it, but then when I try to place it I can't get to the configure block screen (pressing the 'Place block' button produces no effect). I do not get any errors.

What could be the reason for such a behaviour?

The block file contents:

 <?php namespace Drupal\Core\Block\BlockBase; use Drupal\Core\Link; use Drupal\Core\Plugin\ContainerFactoryPluginInterface; use Drupal\Core\Session\AccountInterface; use Drupal\core\Url; use Symfony\Component\DependencyInjection\ContainerInterface; /** * Provides a block with a link to start the toru. * * @Block( * id = "iai_tour_link", * admin_label = @Translation("Link for the IAI Product Guide tour"), * category = @Translation("Links"), * context = { * "node" = @ContextDefinition( * "entity:node", * label = @Translation("Current Node") * ) * } * ) */ class TourLinkBlock extends BlockBase implements ContainerFactoryPluginInterface{ /** * The current user. * * @var \Drupal\Core\Session\AccountInterface; * */ protected $currentUser; /** * Constructs an TourLinkBlock object. * * @param array $configuration * A configuration array containing information about the plugin instance. * @param string $plugin_id * The plugin_id for the plugin instance. * @param mixed $plugin_definition * The plugin implementation definition. */ public function __construct(array $configuration, $plugin_id, $plugin_definition, AccountInterface $current_user){ parent::__construct($configuration, $plugin_id, $plugin_definition); $this->currentUser = $current_user; } /** * {@inheritdoc} */ public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition){ return new static( $configuration, $plugin_id, $plugin_definition, $container->get('current_user') ); } public function build(){ $node = $this->getContextValue('node'); if ($this->currentUser->hasPermission('access tour') && $node->getType() == 'book'){ $url = Url::fromRoute('<current>', array(), array('query' => array('tour' => 1))); $build['tour_link']= [ '#type' => 'markup', '#markup' => Link::fromTextAndUrl(t('Take the tour!'), $url)->toString(), ]; $build['#attached']['library'][] = 'tour/tour'; return $build; } } } 
3
  • 2
    When the code isn't working it probably does produce an error. Check the error log and try to open the place block form in a new tab to see the error on the screen when you have enabled displaying of errors. Commented Apr 10, 2019 at 13:32
  • It's funny as the error didn't show when I navigated through Reports - Recent log messages. It showed though when I opened the place block button in a new tab. So that part of your comment should be treated as the answer to my question. Thanks :-) Commented Apr 10, 2019 at 14:20
  • Usually you need to look in a javaScript console to see these errors. Or else, you can disable JavaScript, which will force page reloads, and show you the errors (if you have error reporting enabled). Commented Feb 21, 2021 at 2:43

1 Answer 1

1

Fix the namespaces:

delete: namespace Drupal\Core\Block\BlockBase;

add: namespace Drupal\MY_COOL_MODULE\Plugin\Block; use Drupal\Core\Block\BlockBase;

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.