Twig索引页在一个类别中添加数字

问题描述 投票:0回答:1

在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平台,因此我无法使用/创建自定义功能。必须完成...

twig
1个回答
1
投票

如果您覆盖currect_first_letter,则应该能够解决此问题。

© www.soinside.com 2019 - 2024. All rights reserved.