调用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

