Điều gì đã thay đổi trong cách thực hiện một khối?


7

Tài liệu cho Drupal 8 liệt kê các móc sau đây là các móc cần thiết để thực hiện một khối.

Những gì tôi không tìm thấy là hook_block_info(), trong Drupal 7 cho phép hiển thị các khối được xác định từ các mô-đun, và hook_block_view()được gọi khi một khối được xác định từ một mô-đun được hiển thị trong một trang.

Làm thế nào để các mô-đun phơi bày các khối, trong Drupal 8? Làm thế nào là các khối được kết xuất?


Câu hỏi này là một phần của một loạt các câu hỏi có mục đích làm nổi bật sự khác biệt giữa Drupal 7 và Drupal 8.
kiamlaluno

Câu trả lời:


11

Sử dụng khối "Powered by Drupal" làm ví dụ:

Drupal 7

mô-đun / hệ thống / 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

lõi / mô-đun / hệ thống / 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'),
    );
  }
}

hook_block_info()được thay thế bằng một chú thích , chứa tất cả các siêu dữ liệu cần thiết trong @Pluginphần docblock. hook_block_view()được thay thế bằng BlockPluginInterface::build()phương pháp.

Cấu trúc thư mục là chìa khóa ở đây. Tất cả các khối phải được đặt vào một thư mục cụ thể trong thư mục mô-đun của chúng (src / Plugin / Block).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.