周梦康 发表于 2016-05-11 2674 次浏览 标签 : twig

先定义一个宏,比如分页宏

{# options
page
pageCount
url: %p for page number placeholder
size: lg, sm
#}

{% macro pager(options) %}
{% set urlParts = options.url | split('%p') %}
{% set p = options.page %}
{% set count = options.pageCount %}
{% if p < 1 %}
  {% set p = 1 %}
{% elseif p > count %}
  {% set p = count %}
{% endif %}
{% if count > 1 %}
<ul class="pagination {% if options.size is defined %}pagination-{{ options.size }}{% endif %}">
  {% if p > 1 %}
  <li><a href="{{ urlParts | join(p - 1) }}" rel="prev" {{ options.attr | raw }}>◀</a></li>
  {% else %}
  <li class="disabled"><span>◀</span></li>
  {% endif %}
  
  {% if p - 1 > 5 %}
    {% for i in 1..2 %}
    <li><a href="{{ urlParts | join(i) }}" {{ options.attr | raw }}>{{ i }}</a></li>
    {% endfor %}
    <li class="disabled"><span>…</span></li>
    {% for i in (p - 2)..(p - 1) %}
    <li><a href="{{ urlParts | join(i) }}" {{ options.attr | raw }}>{{ i }}</a></li>
    {% endfor %}
  {% elseif p > 1 %}
    {% for i in 1..(p - 1) %}
    <li><a href="{{ urlParts | join(i) }}" {{ options.attr | raw }}>{{ i }}</a></li>
    {% endfor %}
  {% endif %}

  <li class="active"><span>{{ p }}</span></li>
  
  {% if count - p > 5 %}
    {% for i in (p + 1)..(p + 2) %}
    <li><a href="{{ urlParts | join(i) }}" {{ options.attr | raw }}>{{ i }}</a></li>
    {% endfor %}
    <li class="disabled"><span>…</span></li>
    {% for i in (count - 1)..count %}
    <li><a href="{{ urlParts | join(i) }}" {{ options.attr | raw }}>{{ i }}</a></li>
    {% endfor %}
  {% elseif p < count %}
    {% for i in (p + 1)..(count) %}
    <li><a href="{{ urlParts | join(i) }}" {{ options.attr | raw }}>{{ i }}</a></li>
    {% endfor %}      
  {% endif %}

  {% if p < count %} 
  <li><a href="{{ urlParts | join(p + 1) }}" rel="next" {{ options.attr | raw }}>▶</a></li>
  {% else %}
  <li class="disabled"><span>▶</span></li>
  {% endif %}
</ul>
{% endif %}
{% endmacro %}

然后在模板最顶端导入定义该宏的文件

{% import '/module/macro.html.twig' as macro %}

最后就可以使用该分页宏了

{{ macro.pager({
  'page': page,
  'pageCount': pageCount,
  'url': '/articles'~query_tag~'?' ~ query ~ 'p=%p',
  'size': 'lg'
}) }}

http://my.oschina.net/veekit/blog/276800

👇 下面是我的公众号,高质量的博文我会第一时间同步到公众号,给个关注吧!

评论列表