在安企CMS的日常运营中,我们经常需要构建灵活多样的导航菜单,以适应网站不断变化的内容结构和用户需求。虽然安企CMS提供了强大的navList标签来管理后台配置的导航,但在某些特定场景下,比如我们需要根据一个存储着完整路径信息的字符串来动态生成多级导航,或者渲染一个深度远超两级的面包屑导航时,内置标签可能无法完全满足我们的精细化需求。

这时,安企CMS模板引擎内置的split过滤器就派上了大用场。它能帮助我们把看似普通的路径字符串,巧妙地“切割”成一个个独立的导航元素,进而灵活渲染。

认识 split 过滤器

split过滤器是一个非常实用的字符串处理工具。它的核心功能是将一个字符串按照指定的分隔符切分成一个数组(或称为切片)。想象一下,如果你有一个用逗号、斜杠或任何其他字符连接起来的词语列表,split就能把它们一个个地拆开,让你能单独处理每一个词。

它的基本使用方式很简单:{{ 你的字符串变量|split:"你的分隔符" }}

例如,如果你有一个字符串"Apple,Banana,Orange",并希望按逗号分割:

{% set fruits_string = "Apple,Banana,Orange" %}
{% set fruits_array = fruits_string|split:"," %}
{# 此时 fruits_array 将是一个包含 ["Apple", "Banana", "Orange"] 的数组 #}

通过split处理后,fruits_array就变成了一个可以被for循环遍历的数组,每个元素都是原始字符串中的一个部分。

场景设定:管理多级导航路径字符串

假设我们的网站有一个复杂的分类层级,例如“首页 > 产品 > 电子设备 > 相机”,我们希望在每个产品详情页或分类页面顶部动态显示这样一个完整的导航路径,并且每个部分都应该是可点击的链接。

我们可以利用安企CMS“内容管理”模块中的“文档分类”或“页面管理”中的“自定义字段”功能,为每个分类或页面添加一个名为FullNavPath的自定义字段。在这个字段中,我们将导航路径以特定的格式存储为一个字符串,例如:

首页|/ > 产品|/products/ > 电子设备|/products/electronics/ > 相机|/products/electronics/cameras/

这个字符串包含了导航的层级信息、显示文本和对应的链接。这里我们使用了“ > ”作为层级分隔符,以及“ | ”作为标题和链接的分隔符。

实战演练:切割并渲染动态导航

现在,我们有了存储好的路径字符串,接下来就是如何在模板中利用split过滤器将其切割并渲染出来。

步骤一:获取导航路径字符串

首先,我们需要在模板中获取到之前在后台自定义字段中存储的FullNavPath字符串。如果是在分类详情页,我们可以通过categoryDetail标签来获取:

{# 假设我们正在一个分类详情页,并已在该分类的自定义字段中设置了 FullNavPath #}
{% categoryDetail currentCategory with name="FullNavPath" %}
{% set fullPathString = currentCategory %} {# currentCategory现在就是我们的路径字符串 #}

步骤二:第一次切割——拆分导航项

有了完整的路径字符串,我们先用“ > ”作为分隔符,将整个路径拆分成一个个独立的导航项。

{% set pathSegments = fullPathString|split:" > " %}
{# 此时 pathSegments 会是类似这样的数组:["首页|/", "产品|/products/", "电子设备|/products/electronics/", "相机|/products/electronics/cameras/"] #}

步骤三:循环渲染并再次切割——提取标题与链接

pathSegments现在是一个数组,每个元素都是一个标题|链接格式的字符串。我们需要遍历这个数组,对每个元素再次使用split过滤器,将标题和链接分别提取出来,并渲染成HTML链接。

”`twig