আমার কাছে এটির খুব বেসিক ব্লক রয়েছে যা কেবলমাত্র নোডের আইডি দেখায়।
<?php
/**
* @file
* Contains \Drupal\mymodule\Plugin\Block\ExampleEmptyBlock.
*/
namespace Drupal\mymodule\Plugin\Block;
use Drupal\Core\Block\BlockBase;
use Drupal\Core\Cache\Cache;
/**
* @Block(
* id = "example_empty",
* admin_label = @Translation("Example: empty block")
* )
*/
class ExampleEmptyBlock extends BlockBase {
/**
* {@inheritdoc}
*/
public function build() {
$node = \Drupal::routeMatch()->getParameter('node');
$build = array();
if ($node) {
$config = \Drupal::config('system.site');
$build = array(
'#type' => 'markup',
'#markup' => '<p>' . $node->id() . '<p>',
'#cache' => array(
'tags' => $this->getCacheTags(),
'contexts' => $this->getCacheContexts(),
),
);
}
return $build;
}
/**
* {@inheritdoc}
*/
public function getCacheTags() {
$node = \Drupal::routeMatch()->getParameter('node');
return Cache::mergeTags(parent::getCacheTags(), ["node:{$node->id()}"]);
}
/**
* {@inheritdoc}
*/
public function getCacheContexts() {
return Cache::mergeContexts(parent::getCacheContexts(), ['user.node_grants:view']);
}
}
তবে একবার ক্যাশে হয়ে গেলে, ব্লকটি একই থাকে, আমি কোন নোডে যাই না কেন। আমি কীভাবে প্রতি নোড আইডিতে ফলাফলটি সঠিকভাবে ক্যাশে করব?
getCacheTags()
BlockBase থেকে, আপনি শুধু প্রয়োজন একটি ট্যাগ আপনার নোড প্রতিনিধিত্ব যোগ করুন (নোড: {NID})। দুঃখিত আমি এখনই তাড়াহুড়ো করছি, আমি আরও পরে আরও ভাল করে ব্যাখ্যা করতে পারি,