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

如何创建集成Drupal 8头部、菜单、页脚的PHP页面并插入自定义代码

创建带Drupal 8头部、菜单和页脚的自定义页面

嘿,我明白你想快速搭建一个带有Drupal 8默认头部、菜单和页脚的页面,同时插入自己的PHP代码——其实不用单独写一个独立的PHP页面,Drupal 8有一套标准的方式来实现这个,既符合架构规范,又能保证系统的安全性和兼容性。下面是具体的实现步骤:

1. 创建自定义模块(必须步骤)

Drupal 8的所有自定义页面都需要依托模块来实现,先创建一个简单的自定义模块:

  • 在modules/custom目录下创建custom_page文件夹(如果custom目录不存在就自己新建)
  • 在custom_page里创建custom_page.info.yml文件,内容如下:
name: 'Custom Page'
type: module
description: 'A custom page with Drupal header, menu and footer'
core_version_requirement: ^8 || ^9
package: Custom

2. 定义页面路由

路由用来告诉Drupal某个URL对应哪个处理逻辑,在custom_page里创建custom_page.routing.yml:

custom_page.default:
  path: '/custom-page'
  defaults:
    _controller: '\Drupal\custom_page\Controller\CustomPageController::build'
    _title: 'My Custom Page'
  requirements:
    _access: 'TRUE' # 允许所有用户访问,也可以换成具体权限比如'access content'

3. 创建控制器处理PHP逻辑

控制器是处理自定义PHP代码的核心地方,同时负责准备页面内容。在custom_page/src/Controller目录下创建CustomPageController.php:

<?php

namespace Drupal\custom_page\Controller;

use Drupal\Core\Controller\ControllerBase;

/**
 * Controller for custom page.
 */
class CustomPageController extends ControllerBase {

  /**
   * Build the custom page content.
   */
  public function build() {
    // 这里写你的自定义PHP代码,比如查询数据库、处理业务逻辑等
    $custom_data = $this->myCustomLogic();

    // 返回渲染数组,Drupal会自动调用主题渲染头部、菜单和页脚
    return [
      '#theme' => 'custom_page',
      '#custom_data' => $custom_data,
      '#attached' => [
        // 如果需要加载自定义CSS/JS,可以在这里添加
      ],
    ];
  }

  /**
   * 自定义PHP逻辑示例
   */
  private function myCustomLogic() {
    // 示例:生成自定义消息和时间戳
    return [
      'message' => 'Hello from custom PHP code!',
      'timestamp' => date('Y-m-d H:i:s'),
    ];
  }

}

4. 创建模板文件渲染内容

模板用来控制页面的显示布局,同时会自动继承主题的page模板,从而包含Drupal默认的头部、菜单和页脚。在custom_page/templates目录下创建custom-page.html.twig:

{# 继承主题的page模板,自动引入头部、菜单、页脚 #}
{% extends "page.html.twig" %}

{# 替换page模板的content区域,插入自定义内容 #}
{% block content %}
  <div class="custom-page-content">
    <h2>{{ 'Custom Content Area'|t }}</h2>
    <p>{{ custom_data.message }}</p>
    <p>{{ 'Current Time: @time'|t({'@time': custom_data.timestamp}) }}</p>
    
    {# 这里可以直接添加HTML内容,或者调用其他Drupal元素 #}
  </div>
{% endblock %}

5. 启用模块并访问页面

  • 登录Drupal后台,进入“扩展”页面,找到“Custom Page”模块并启用
  • 访问http://your-drupal-site/custom-page,就能看到带有Drupal默认头部、菜单和页脚,同时包含你自定义PHP逻辑的页面了

不推荐的方式:独立PHP页面(仅作参考)

如果你非要写一个独立的PHP页面,需要先加载Drupal的核心系统,但这种方式容易引发安全问题和兼容性问题,不建议使用。示例代码如下:

<?php

// 加载Drupal的自动加载器
require_once '/path/to/your/drupal/docroot/autoload.php';

// 初始化Drupal核心
$kernel = \Drupal\Core\DrupalKernel::createFromRequest(Request::createFromGlobals(), \Drupal\Core\Site\Settings::getInstance(), 'prod');
$kernel->boot();
$kernel->prepareLegacyRequest(Request::createFromGlobals());

// 获取Drupal渲染器
$renderer = \Drupal::service('renderer');

// 构建自定义内容
$content = [
  '#markup' => '<p>My standalone custom content</p>',
];

// 渲染完整页面(包含头部、菜单、页脚)
$page = [
  '#theme' => 'page',
  '#content' => $content,
];

print $renderer->renderRoot($page);

这种方式跳过了Drupal的核心权限验证、会话管理等机制,可能导致功能异常,所以优先使用前面的模块方式实现。

内容的提问来源于stack exchange,提问作者Javier Rodríguez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:57:11