我很难获得一个基本的if语句来处理jekyll网站的自定义分页。这是我的代码:
{% if paginator.total_pages > 1 %}
{% for page in (1..paginator.total_pages) %}
{% if page == paginator.page %}
({{ page }})
{% elsif page >= 6 and page <= 10 %}
{{ page }}
{% else %}
{{ paginator.page }}
{% endif %}
{% endfor %}
{% endif %}
假设当前页面是数字8,我得到以下输出:
8 8 8 8 8 6 7 (8) 9 10 8 8 8 8 8 8 8
现在,如果我用{% elsif page >= 6 and page <= 10 %}
替换{% elsif page >= (paginator.page - 2) and page <= (paginator.page + 2) %}
,我会得到以下输出:
8 8 8 8 8 8 8 (8) 8 8 8 8 8 8 8 8 8
有人可以解释为什么基本算术不能对变量(paginator.page
)起作用,以及我如何解决这个问题?
答案 0 :(得分:1)
好的,完全重写我的回答,我会留下旧的东西,以便在历史记录中参考故障排除步骤。
根据这个:Liquid and Arithmetic Liquid拥有捕获变量和算术的方法。感谢OP的发现。只是惊讶于我在他们自己的文档中找不到这个。
好的,因为Liquid显然需要and
,而不是&&
我会尝试从if语句中获取算法。
{% for page in (1..paginator.total_pages) %}
{% assign two_less = (paginator.page - 2) %}
{% assign two_more = (paginator.page + 2) %}
{% if page == paginator.page %}
({{ page }})
{% elsif page >= two_less and page <= two_more %}
{{ page }}
...
我认为您可能会看到Liquid模板语言出现问题。在Liquid中and
之前就存在问题,即使在字符串中也是如此。请参阅此已结束的问题:https://github.com/Shopify/liquid/issues/13
我会试试这个:
{% elsif (page >= (paginator.page - 2)) && (page <= (paginator.page + 2)) %}
and
和&&
在ruby中略有不同,可能Liquid对and
有一些特殊意义。
旧回答
它基本上完全按照你的要求去做。你在评论中说“我知道价值是8,因为它打印了16次”。那是无效的调试。所有你知道的是
page = 8 #at the time of execution
并且您的if
声明确定每次都需要打印该值。因此,您假设“{8”来自if
语句的各个分支,但您的if
语句更有可能继续评估打印“8”的分支。您可以在此处执行的最简单的调试是添加:
{% if paginator.total_pages > 1 %}
{% for page in (1..paginator.total_pages) %}
{% if page == paginator.page %}
({{ page }})
{{ puts "if" }}
{% elsif page >= (paginator.page - 2) and page <= (paginator.page + 2) %}
{{ page }}
{{ puts "else if" }}
{% else %}
{{ paginator.page }}
{{ puts "else" }}
{% endif %}
{% endfor %}
{% endif %}
我不使用Jekyll所以我不是100%确定我的语法,但是你看到我想要实现的目标?这将告诉您输出值来自if
语句的位置。如果它来自你怀疑的算术,它会告诉你。我怀疑的是,你会发现它永远不会像你假设的那样进入if
的那一部分。另外,我不确定你为什么会这样做
8 8 8 8 8 6 7 (8) 9 10 8 8 8 8 8 8 8
您希望前五个和后七个元素评估为8
而不是:
1 2 3 4 5 6 7 (8) 9 10 11 12 13 14 15 16 17
另外,只是为了确保你得到的变量返回类型,你希望改变
(paginator.page - 2) and page <= (paginator.page + 2)
为:
(paginator.page.to_i - 2) and page <= (paginator.page.to_i + 2)
所以我的回答几乎就是mcfinnigan所说的,算术与变量确实有效。所以你要么没有从方法paginator.page
得到一个整数,要么在if
语句的逻辑中有一些其他的缺陷。
修改强> ----- (删除了关于“paginator.number”的部分,因为它似乎不适用于用户的情况)
如果您可以进行我建议的调试并发布输出,我可以扩展和改进这个答案。