web-dev-qa-db-fra.com

Accès par programme au contenu du bloc

Quelqu'un pourrait-il me dire comment accéder par programme au contenu du champ d'un bloc personnalisé?

Jusqu'à présent, j'ai réussi:

use Drupal\block\Entity\Block;
$block = Block::load($block_name);

if ($block) {
  $render = \Drupal::entityTypeManager()
    ->getViewBuilder('block')
    ->view($block);
}

Cependant, cela ne me donne pas accès aux champs et à leurs données.

5
Matthew

Votre code charge un bloc configuré, pas le contenu d'un bloc personnalisé.

Cela chargera les données de champ du contenu du bloc:

$custom_block = \Drupal::entityTypeManager()->getStorage('block_content')->load('1');
$fieldcontent = $custom_block->field_myfield->value;
9
4k4

Je voulais juste expliquer l'exemple de code donné dans l'autre réponse avec plus de détails, ce qui fera gagner du temps à de nombreux utilisateurs.

$custom_block = \Drupal::entityTypeManager()->getStorage('block_content')->load('1');
$fieldcontent = $custom_block->field_myfield->value;
  1. block_content est une table de base de données dans votre projet Drupal
  2. 1 dans load('1') est la valeur d'ID de cette table
  3. field_myfield est un champ de table de la table block_content__body, par exemple block_content__body.body_value

Si vous souhaitez modifier les données du champ block_content__body.body_value dans votre bloc, utilisez simplement ce code.

$custom_block->body->value = 'TEST';
2
webdevfreak