如何在Drupal 8中使用PHP代码格式显示自定义块的内容

时间:2016-04-29 17:01:10

标签: drupal drupal-8

我使用PHP代码格式在块中添加了一些自定义代码,以在特定页面上显示该块。我已经检查了Devel PHP页面上所有正常工作但内容没有在页面上显示的内容。下面的代码获取目标节点的字段值。

value

希望这澄清了这个问题。 感谢

2 个答案:

答案 0 :(得分:0)

你确定它在Devel中有效吗?我刚刚尝试执行你的代码,这一行:

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

返回数组

尝试使用此代码:

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

答案 1 :(得分:0)

首先,您的第一个代码块(获取当前节点)可以只用一行代替:

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

可以通过以下方式更改整个块:

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

P.S。使用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必须放在名为/src/Plugin/Block/的自定义模块中的my_module目录中。