在SaaS平台上,我尝试为具有很多类别的网站创建索引页/站点地图。因为它是SaaS平台,所以我无法使用/创建自定义函数。它必须在前端完成。
我试图做的是将类别列表分为字母和数字组成的列表。因此,以A开头的类别名称将进入类别“ A”,以数字开头的类别(例如18年)将进入名为“ 0-9”的类别。所以我会得到这样的索引页:
[A]
- Alpha
- Anton
- etc..
[B]
- Beta
- Brave
- etc..
[C]
- Charlie
- Cooking
- etc..
[0-9]
- 1 year
- 20 years
- 99 years
- etc..
我设法使所有字母都起作用。但是,它并不总是将数字放在[0-9]类别中。我的脚本有时会为例如0或7等创建单独的索引。例如:
[0]
- 1 year
- 18 years
- etc..
[1]
- 2 years
- 22 years
也索引号是错误的。因此它在0下显示1,在1下显示2。
[0-9] - 1 year - 18 years - 2 years - 22 years
我只是看不出为什么。所以我的问题是如何将[数字]类别放在一个称为[0-9]的单一类别中,而不是将它们放在一个单独的类别中?
到目前为止,我的代码看起来像(某些过滤器是特定的平台过滤器:]
{# ---------------- BEGINING ------------------- #} {% set all_categories = [] %} {% for category in shop.categories %} {% set all_categories = all_categories | merge({ (0): category }) %} {% for sub in category.subs %} {% set all_categories = all_categories | merge({ (0): sub }) %} {% for sub_sub in sub.subs %} {% set all_categories = all_categories | merge({ (0): sub_sub }) %} {% for sub_sub_sub in sub_sub.subs %} {% set all_categories = all_categories | merge({ (0): sub_sub_sub }) %} {% endfor %} {% endfor %} {% endfor %} {% endfor %} {% set categories = all_categories %} {# ---------------- SORT LOGIC ------------------- #} {# 'categories' array will be sorted and saved as 'grouped_categories' variable #} {% set sorted_categories = [] %} {% for key in categories | keys %} {% set sorted_categories = sorted_categories | merge({ (key): categories[key].title }) %} {% endfor %} {% set sorted_categories = sorted_categories | sort %} {% set first_letter = '' %} {% set grouped_categories = [] %} {% set new_group = [] %} {% for i in sorted_categories | keys %} {% if(categories[i].title) %} {% set currect_first_letter = categories[i].title | first | upper %} {% if(currect_first_letter != first_letter) %} {% if(new_group) %} {% set grouped_categories = grouped_categories | merge({ (first_letter): new_group }) %} {% endif %} {% set first_letter = currect_first_letter %} {% set new_group = [categories[i]] %} {% else %} {% set new_group = new_group | merge({ (0): categories[i] }) %} {% endif %} {% endif %} {% endfor %} {% set grouped_categories = grouped_categories | merge({ (first_letter): new_group }) %} {# ---------------- USING ------------------- #} <div class="single-letter"> <span class="custom-title">{{ "All themes" }}:</span> <ul> {% for letter in grouped_categories[1:] | keys %} <li><a href="#letter-{{ letter}}">{{ letter }}</a></li> {% endfor %} {% for letter in grouped_categories[:1] | keys %} <li><a href="#letter-{{ letter}}">{{ '0-9' }}</a></li> {% endfor %} </ul> </div> {% for letter in grouped_categories[1:] | keys %} <div id="letter-{{letter}}" class="letter-wrap"> <h3 class="title">{{ letter }}</h3> <div class="group"> <ul> {% for category in grouped_categories[letter] %} <li><a href="{{ category.url }}">{{ category.title }}</a></li> {% endfor %} </ul> </div> </div> {% endfor %} {% for letter in grouped_categories[:1] | keys %} <div id="letter-{{letter}}" class="letter-wrap"> <h3 class="title">{{ '0-9' }}</h3> <div class="group"> <ul> {% for category in grouped_categories[letter] %} <li><a href="{{ category.url }}">{{ category.title }}</a></li> {% endfor %} </ul> </div> </div> {% endfor %} {# ---------------- THE END ------------------- #}
按要求更新
更新的代码
{% set first_letter = '' %} {% set grouped_categories = [] %} {% set new_group = [] %} {% for i in sorted_categories | keys %} {% if(categories[i].title) %} {% set currect_first_letter = categories[i].title | first | upper %} {# ----- ADDED THIS LINE ------- #} {% if currect_first_letter in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] %} {% set currect_first_letter = '0-9' %} {% endif %} {# ----------------------------- #} {% if(currect_first_letter != first_letter) %} {% if(new_group) %} {% set grouped_categories = grouped_categories | merge({ (first_letter): new_group }) %} {% endif %} {% set first_letter = currect_first_letter %} {% set new_group = [categories[i]] %} {% else %} {% set new_group = new_group | merge({ (0): categories[i] }) %} {% endif %} {% endif %} {% endfor %} {% set grouped_categories = grouped_categories | merge({ (first_letter): new_group }) %}
结果是:
[0-9] - 1 year - 20 years - 99 years - Alpha - Anton - Beta - Brave - etc..
所以所有内容都放在
[0-9]
下
在SaaS平台上,我尝试为具有很多类别的网站创建索引页/站点地图。由于它是SaaS平台,因此我无法使用/创建自定义功能。必须完成...
如果您覆盖currect_first_letter
,则应该能够解决此问题。