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

调用sulu_snippet_load_by_area返回null,求问题排查方案

解决sulu_snippet_load_by_area()返回空内容的问题

问题描述

我遇到了和Stack Overflow上《Empty snippet when using "sulu_snippet_load_by_area"》一文相同的问题:调用sulu_snippet_load_by_area()时返回空内容。我已创建了如下代码片段模板:

<?xml version="1.0" ?>
<template xmlns="http://schemas.sulu.io/template/template"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://schemas.sulu.io/template/template http://schemas.sulu.io/template/template-1.0.xsd">

    <key>test</key>

    <meta>
        <title lang="en">Test</title>
        <title lang="de">Test</title>
    </meta>

    <areas>
        <area key="test-default">
            <meta>
                <title lang="en">Test</title>
                <title lang="de">Test</title>
            </meta>
        </area>
    </areas>

    <properties>
        <property name="title" type="text_line" mandatory="true">
            <meta>
                <title lang="en">Title</title>
                <title lang="de">Titel</title>
            </meta>

            <tag name="sulu.node.name"/>
        </property>

        <property name="entry" type="text_line" mandatory="true">
            <meta>
                <title lang="de">Entry</title>
                <title lang="en">Entry</title>
            </meta>
        </property>

    </properties>
</template>

且在Webspace的Snippet区域创建了对应片段及其他片段,但调用该函数始终无法获取内容,请问问题出在哪里?


排查及解决步骤

1. 确认片段已发布

Sulu中仅已发布状态的片段会被sulu_snippet_load_by_area()加载。进入Snippet管理界面,检查你创建的片段状态是否为“已发布”,草稿状态的内容不会返回给前端。

2. 验证区域Key完全匹配

调用函数时传入的区域Key必须和模板中定义的test-default完全一致,包括大小写、连字符等符号。示例正确调用:

{% set snippets = sulu_snippet_load_by_area('test-default') %}

避免拼写错误(如test_default或Test-Default)。

3. 检查语言上下文匹配

片段与语言绑定,确保调用时的当前请求语言,或显式传入的语言参数,与创建片段时选择的语言一致。如需指定语言,可这样调用:

{% set snippets = sulu_snippet_load_by_area('test-default', null, 'de') %}

第三个参数为语言代码,替换为你实际使用的语言(如en)。

4. 确认模板正确注册

模板文件需放在对应版本的Sulu模板目录:

  • Sulu 2.x:config/templates/snippets 或 app/Resources/templates/snippets
  • Sulu 1.x:app/Resources/templates/snippets

放置完成后清除系统缓存:

bin/console cache:clear

确保系统已识别该模板,否则片段无法正确关联到对应区域。

5. 验证Webspace关联

若项目存在多个Webspace,需确保创建的片段属于当前请求的Webspace,或调用时显式指定Webspace Key:

{% set snippets = sulu_snippet_load_by_area('test-default', 'your_webspace_key') %}

替换your_webspace_key为你的Webspace实际Key(可在config/webspaces目录的配置文件中查看)。

6. 检查遍历逻辑

即使函数返回了片段,错误的遍历逻辑也会导致内容不显示。确保正确遍历结果:

{% set snippets = sulu_snippet_load_by_area('test-default') %}
{% for snippet in snippets %}
    <h2>{{ snippet.title }}</h2>
    <p>{{ snippet.entry }}</p>
{% endfor %}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 12:35:09