如何创建集成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
相关产品推荐
相关产品推荐

