Was hat sich an der Implementierung eines Blocks geändert?

7

In der Dokumentation zu Drupal 8 sind die folgenden Hooks als diejenigen aufgeführt, die zum Implementieren eines Blocks erforderlich sind.

Was ich nicht finde, ist hook_block_info(), dass in Drupal 7 die aus Modulen definierten Blöcke verfügbar gemacht werden dürfen und hook_block_view()was aufgerufen wurde, als ein aus einem Modul definierter Block auf einer Seite gerendert wurde.

Wie legen Module in Drupal 8 Blöcke frei? Wie werden die Blöcke gerendert?

kiamlaluno
quelle
Diese Frage ist Teil einer Reihe von Fragen, deren Zweck darin besteht, die Unterschiede zwischen Drupal 7 und Drupal 8
hervorzuheben

Antworten:

11

Am Beispiel des Blocks "Powered by Drupal":

Drupal 7

modules / system / system.module

/**
 * Implements hook_block_info().
 */
function system_block_info() {
  $blocks['powered-by'] = array(
    'info' => t('Powered by Drupal'),
    'weight' => '10',
    'cache' => DRUPAL_NO_CACHE,
  );
  return $blocks;
}

/**
 * Implements hook_block_view().
 */
function system_block_view($delta = '') {
  $block = array();
  switch ($delta) {
    case 'powered-by':
      $block['subject'] = NULL;
      $block['content'] = theme('system_powered_by');
      return $block;
  }
}

Drupal 8

core / modules / system / src / Plugin / Block / SystemPoweredByBlock.php

<?php

/**
 * @file
 * Contains \Drupal\system\Plugin\Block\SystemPoweredByBlock.
 */

namespace Drupal\system\Plugin\Block;

use Drupal\block\BlockBase;
use Drupal\Component\Annotation\Plugin;
use Drupal\Core\Annotation\Translation;

/**
 * Provides a 'Powered by Drupal' block.
 *
 * @Plugin(
 *   id = "system_powered_by_block",
 *   admin_label = @Translation("Powered by Drupal"),
 *   module = "system"
 * )
 */
class SystemPoweredByBlock extends BlockBase {

  /**
   * {@inheritdoc}
   */
  public function build() {
    return array(
      '#children' => theme('system_powered_by'),
    );
  }
}

Das hook_block_info()wird durch eine Anmerkung ersetzt , die alle erforderlichen Metadaten im @PluginTeil des Dokumentblocks enthält. hook_block_view()wird durch die BlockPluginInterface::build()Methode ersetzt.

Die Verzeichnisstruktur ist hier der Schlüssel. Alle Blöcke müssen in einem bestimmten Verzeichnis in ihrem Modulordner (src / Plugin / Block) abgelegt werden.

tim.plunkett
quelle