簡體   English   中英

如何在Drupal 8中使用PHP代碼格式顯示自定義塊的內容

[英]How to show content of a custom block using PHP code format in Drupal 8

我在使用PHP代碼格式的代碼塊中添加了一些自定義代碼,以在特定頁面上顯示該代碼塊。 我已經檢查了Devel PHP頁面上所有工作正常的東西,但內容未顯示在頁面上。 下面的代碼獲取目標節點的字段值。

    $refer = $_SERVER[HTTP_REFERER];
    $parsed = parse_url($refer);
    $alias = array_pop($parsed);
    $dst = \Drupal::service('path.alias_manager')->getPathByAlias($alias , $langcode);
    $nid = array_pop(explode('/', $dst));
    $dest_node = node_load($nid);

    $body = $dest_node->get('body')->getValue();
    print $body; //have tried other printing methods also but invain

希望這可以澄清問題。 謝謝

您確定它可以在Devel中運行嗎? 我剛剛嘗試執行您的代碼,並且此行:

$body = $dest_node->get('body')->getValue();

返回Array

嘗試改用這個:

$body = $dest_node->body->value;

首先,您的第一段代碼(獲取當前節點)可以僅替換為一行:

$node = \Drupal::service('current_route_match')->getParameter('node');

整個塊可以通過以下方式更改:

if ($node = \Drupal::service('current_route_match')->getParameter('node')) {
  print $node->body->value;
}

PS並且使用PHP文本過濾器絕對不是一個好主意。 您可以輕松編寫自己的自定義模塊,以提供所需的塊。 最簡單的塊插件需要幾行代碼:

/**
 * @file
 * Contains \Drupal\my_module\Plugin\Block\MyBlock.
 */

namespace Drupal\my_module\Plugin\Block;

use Drupal\Core\Block\BlockBase;

/**
 * Provides my super block.
 *
 * @Block(
 *   id = "my_module_block",
 *   admin_label = @Translation("My Block"),
 *   category = @Translation("My Module"),
 * )
 */

class MyBlock extends BlockBase{

  /**
   * Builds and returns the renderable array for this block plugin.
   *
   * @return array
   *   A renderable array representing the content of the block.
   *
   * @see \Drupal\block\BlockViewBuilder
   */
  public function build() {
    if ($node = \Drupal::service('current_route_match')->getParameter('node')) {
      return [ '#markup' => $node->body->value ];
    }
  }
}

該文件MyBlock.php必須放置在名為my_module的自定義模塊內的/src/Plugin/Block/目錄中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM