![](/img/trans.png)
[英]How to execute query in Drupal 7 block - through content editor (PHP CODE)
[英]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.