在AnQiCMS的模板中处理Markdown内容,常常会遇到需要先将其转换为HTML,然后在此基础上进一步筛选或移除特定HTML标签的场景。这在创建内容摘要、生成纯文本预览,或者为了实现特定的布局控制时尤为实用。安企CMS提供的模板标签和过滤器能够帮助我们高效、灵活地完成这些操作。
第一步:将Markdown内容转换为HTML
安企CMS模板引擎内置了对Markdown内容渲染的支持。当您的内容通过Markdown编辑器录入后,通常会存储为Markdown格式的文本。要在前端页面将其显示为可浏览的HTML,您需要指示模板引擎进行转换。
对于文档内容字段(archiveDetail 中的 Content),安企CMS默认在Markdown编辑器开启时会自动将其转换为HTML。但如果您需要更明确地控制转换过程,或者针对其他自定义Markdown字段进行转换,可以使用 render=true 参数或 render 过滤器。
例如,在一个文档详情页中,我们通常这样显示文章内容:
{# 假设archiveDetail已经获取了当前文档详情 #}
{%- archiveDetail articleContent with name="Content" render=true %}
{{ articleContent|safe }}
这里,render=true 明确指示模板引擎将 Content 字段中的Markdown文本渲染为HTML。
重要提示: 转换后的HTML字符串如果不经过 |safe 过滤器,可能会被模板引擎再次转义(即将 < 转换为 < 等),导致页面上直接显示HTML代码而非渲染效果。因此,务必在 render 之后添加 |safe,以确保HTML内容正确地在浏览器中渲染。
如果您有其他自定义字段也存储了Markdown内容,并且希望将其渲染为HTML,可以使用 render 过滤器:
{# 假设这是一个名为'custom_markdown_field'的自定义字段 #}
{% archiveDetail customMarkdownField with name="custom_markdown_field" %}
{{ customMarkdownField|render|safe }}
第二步:对生成的HTML进行标签移除
在Markdown转换为HTML之后,您可能需要对生成的HTML内容进行进一步的修改,例如移除某些特定的HTML标签,或者直接获取纯文本。安企CMS提供了两个非常实用的过滤器来完成这项任务:striptags 和 removetags。
移除所有HTML标签 (
striptags) 如果您需要彻底清除所有HTML标签,获取内容的纯文本形式(例如用于生成文章摘要或SEO描述),striptags过滤器是您的首选。它会剥离内容中的所有HTML、XML标签以及HTML注释。{# 假设'htmlContent'是Markdown转换后的HTML内容 #} {% set pureText = htmlContent|striptags %} <p>文章摘要:{{ pureText|truncatechars:100 }}</p>在这个例子中,
htmlContent经过striptags过滤后,所有HTML标签都被移除,只剩下纯文本,然后我们再用truncatechars:100截取前100个字符作为摘要。移除特定的HTML标签 (
removetags) 当您需要更精细地控制,只移除HTML内容中的部分特定标签(例如,保留段落和标题,但移除图片和链接),removetags过滤器则提供了强大的能力。您可以在过滤器后指定要移除的标签名称,多个标签之间用逗号分隔。{# 假设'htmlContent'是Markdown转换后的HTML内容 #} {% set filteredHtml = htmlContent|removetags:"img,a,script" %} <div class="filtered-content">{{ filteredHtml|safe }}</div>这里,
filteredHtml将会是移除了<img>、<a>和<script>标签后的HTML内容。同样,因为结果仍然是HTML,所以需要再次使用|safe过滤器以确保浏览器正确渲染。
综合实践:Markdown转HTML再移除标签
现在,让我们把这两个步骤结合起来,看看如何在AnQiCMS模板中实现Markdown转HTML,然后根据需求移除标签:
假设您有一个Markdown格式的文章内容,希望:
- 将其转换为HTML。
- 移除HTML中的所有图片(
<img>)标签。 - 移除所有超链接(
<a>)标签。 - 最终显示过滤后的HTML内容。
{%- archiveDetail articleContentMarkdown with name="Content" render=true %}
{# 先将Markdown渲染为HTML,并标记为safe,否则removetags无法识别HTML标签 #}
{% set renderedHtml = articleContentMarkdown|safe %}
{# 对渲染后的HTML进行标签移除 #}
{% set finalHtml = renderedHtml|removetags:"img,a" %}
{# 输出最终处理过的HTML内容 #}
<div class="article-body-no-images-links">
{{ finalHtml|safe }}
</div>
通过上述步骤,您的Markdown内容首先被AnQiCMS渲染成了标准的HTML,然后我们针对这个HTML字符串应用了 removetags 过滤器,移除了所有 <img> 和 <a> 标签。最终,页面上展示的是没有图片和链接的HTML内容。
总结
安企CMS模板引擎的Markdown渲染能力结合灵活的过滤器,为内容展示提供了极大的自由度。无论是需要精确过滤HTML标签以提取纯文本摘要,还是为了满足特定的设计需求,这些工具都能帮助您在模板层面轻松实现。理解 render 参数与 render 过滤器、|safe 过滤器以及 striptags 和 removetags 的作用及使用时机,是充分利用AnQiCMS进行内容运营的关键。
常见问题 (FAQ)
1. 为什么我使用了removetags或striptags后,HTML标签没有被移除?
这通常是因为您忘记了在Markdown转换为HTML后,或者在removetags/striptags之前,添加|safe过滤器。如果HTML内容没有被标记为“安全”(即没有经过|safe),模板引擎可能会将其视为普通字符串并自动转义,导致removetags或striptags过滤器无法识别和处理其中的HTML标签。请确保Markdown转换后的HTML内容已使用|safe。
2. 我想获取Markdown内容的纯文本摘要,**实践是什么?
**实践是先将Markdown内容转换为HTML,然后使用striptags过滤器移除所有HTML标签,最后再使用truncatechars过滤器截取所需长度的文本。
例如:
{% archiveDetail articleContent with name="Content" render=true %}
{% set summary = articleContent|safe|striptags|truncatechars:150 %}
<p>{{ summary }}</p>
这样可以确保摘要是基于渲染后的HTML,且不包含任何格式标签,只保留纯文本,并控制了长度。
3. 如果我想在 Markdown 中保留某些 HTML 标签(例如 <strong>),但移除其他标签(例如 <img>),应该如何操作?
Markdown本身并不直接处理“