You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Drupal 8中如何在自定义区块中添加PHP代码

在Drupal 8自定义区块中添加获取基础URL的PHP代码实现方法

嘿,我来帮你搞定这个需求!首先得提醒你:Drupal 8不推荐直接在区块里写裸PHP代码(这会带来严重的安全风险,比如代码注入漏洞),最规范、安全的做法是通过自定义模块创建区块插件,下面一步步教你实现:

第一步:创建自定义模块的基础结构

先在你的Drupal站点的modules/custom/目录下新建一个模块文件夹,比如命名为custom_base_url_block,然后创建以下文件:

  • custom_base_url_block.info.yml(模块信息文件,必填)
  • src/Plugin/Block/BaseUrlBlock.php(区块插件类文件,核心逻辑)

第二步:编写模块信息文件

打开custom_base_url_block.info.yml,粘贴以下内容:

name: 'Custom Base URL Block'
type: module
description: 'A custom block that displays the site base URL'
core_version_requirement: ^8 || ^9 || ^10
package: Custom

这个文件是告诉Drupal这是一个合法的模块,指定了模块名称、描述、兼容的Drupal版本等信息。

第三步:编写自定义区块插件类

打开src/Plugin/Block/BaseUrlBlock.php,粘贴以下代码:

<?php

namespace Drupal\custom_base_url_block\Plugin\Block;

use Drupal\Core\Block\BlockBase;

/**
 * Provides a 'Base URL' block.
 *
 * @Block(
 *   id = "base_url_block",
 *   admin_label = @Translation("Base URL Block"),
 *   category = @Translation("Custom")
 * )
 */
class BaseUrlBlock extends BlockBase {

  /**
   * {@inheritdoc}
   */
  public function build() {
    // 获取站点的绝对基础URL
    $base_url = \Drupal\Core\Url::fromRoute('<front>', [], ['absolute' => TRUE])->toString();

    // 返回渲染数组,Drupal会自动处理成HTML
    return [
      '#markup' => '<p>站点基础URL:' . $base_url . '</p>',
    ];
  }

}

代码解释:

  • 我们继承了Drupal核心的BlockBase类,这是创建自定义区块的标准方式
  • 通过@Block注解定义了区块的ID、后台显示名称和分类
  • 在build()方法里,用\Drupal\Core\Url::fromRoute()方法获取首页的绝对URL,这就是站点的基础URL
  • 最后返回一个渲染数组,把基础URL输出成HTML

第四步:启用模块并添加区块

  1. 登录Drupal后台,进入扩展页面(路径:/admin/modules)
  2. 在列表里找到Custom Base URL Block模块,勾选后点击“安装”
  3. 进入结构 > 区块布局页面(路径:/admin/structure/block)
  4. 在你想要放置区块的区域(比如侧边栏、页脚),点击“放置区块”按钮
  5. 在弹出的列表里找到“Base URL Block”,点击“放置区块”,设置好显示规则后保存即可

(不推荐)如果非要用PHP代码区块快速实现(仅开发环境使用)

如果你只是在开发环境临时测试,可以这样做:

  1. 先启用核心的PHP筛选器模块(在扩展页面搜索“PHP filter”)
  2. 进入结构 > 区块布局,点击“放置区块”,选择“自定义HTML”区块
  3. 在区块内容的文本格式里选择“PHP代码”(注意:生产环境绝对不要开启这个文本格式!)
  4. 在内容框里输入以下代码:
<?php
// 获取基础URL并输出
$base_url = \Drupal\Core\Url::fromRoute('<front>', [], ['absolute' => TRUE])->toString();
echo '<p>站点基础URL:' . $base_url . '</p>';
?>
  1. 保存区块即可看到效果

再次强调:生产环境绝对不要使用PHP代码区块,这会给站点带来极大的安全隐患!

内容的提问来源于stack exchange,提问作者Vamshi M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:17:42