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

如何在单页面<head>区域添加Schema.org Event JSON对象

动态添加Schema.org Event到的实现方法

你的思路完全正确,通过template_preprocess_html钩子追加内容到head占位符是可行的方案,具体实现步骤如下:

  • 第一步:限定仅在首页执行
    先做页面判断,只在首页添加Event数据,避免影响其他页面。

  • 第二步:动态构建Event JSON数据
    根据需求生成带动态日期的Schema Event对象,日期可以通过逻辑计算、数据库读取或配置调用的方式生成,灵活适配时间变化。

  • 第三步:转换为标准script标签
    把生成的JSON数据包裹成<script type="application/ld+json">标签,确保格式符合Schema.org的要求。

  • 第四步:追加到head占位符变量
    获取现有head_placeholder的内容,将新的script标签追加进去,或者直接通过#attached方式添加到html_head数组。

以下是具体的代码示例,放在你的主题或自定义模块的.theme文件里:

function YOUR_THEME_NAME_preprocess_html(&$variables) {
  // 仅在首页执行
  if (\Drupal::service('path.matcher')->isFrontPage()) {
    // 动态生成Event数据示例,可替换为你的业务逻辑
    $events = [
      [
        '@context' => 'https://schema.org',
        '@type' => 'Event',
        'name' => '春季线下沙龙',
        'startDate' => date('c', strtotime('+1 week')), // 一周后开始
        'endDate' => date('c', strtotime('+1 week +2 hours')), // 持续2小时
        'location' => [
          '@type' => 'Place',
          'name' => '城市创意中心'
        ]
      ],
      [
        '@context' => 'https://schema.org',
        '@type' => 'Event',
        'name' => '线上技术分享会',
        'startDate' => date('c', strtotime('+2 week')), // 两周后开始
        'endDate' => date('c', strtotime('+2 week +3 hours')), // 持续3小时
        'location' => [
          '@type' => 'VirtualLocation',
          'url' => 'https://example.com/webinar'
        ]
      ]
    ];

    // 遍历生成每个Event的script标签
    foreach ($events as $index => $event) {
      $json = json_encode($event, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT);
      // 通过#attached方式添加到head区域,这是Drupal推荐的资源附加方式
      $variables['page']['#attached']['html_head'][] = [
        [
          '#type' => 'html_tag',
          '#tag' => 'script',
          '#attributes' => ['type' => 'application/ld+json'],
          '#value' => $json,
        ],
        'custom_schema_event_' . ($index + 1)
      ];
    }
  }
}

注意事项:

  • 替换YOUR_THEME_NAME为你的实际主题名称
  • 动态日期部分可根据需求调整,比如从实体、视图或配置中获取真实活动数据
  • 确保JSON格式符合Schema.org规范,可通过Schema.org官方验证工具检查正确性
  • 测试时查看页面源代码,确认script标签是否正确出现在区域

内容的提问来源于stack exchange,提问作者Jim D

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 13:55:36