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;
        }
    }
}
  • 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. – 4k4 Apr 10 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 :-) – Tommy Apr 10 at 14:20

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.