savchukoleksii
10/10/2019 - 11:38 AM

Custom paggination snippet

{% assign custom_pagination_delimiter = '%%%' %}
{% assign custom_pagination_elements_values = '' %}

{% assign custom_pagination_range_min = current_page | minus: 2 %}
{% if custom_pagination_range_min < 1 %}
	{% assign custom_pagination_range_min = 1 %}
{% endif %}

{% assign custom_pagination_range_max = current_page | plus: 2 %}
{% if custom_pagination_range_max > pages_count %}
	{% assign custom_pagination_range_max = pages_count %}
{% endif %}

{% for custom_pagination_page_index in (1..pages_count) %}
	{% assign custom_pagination_element_value = '' %}

	{% if custom_pagination_page_index == 1 or custom_pagination_page_index == pages_count %}
		{% assign custom_pagination_element_value = custom_pagination_page_index %}

		{% if custom_pagination_elements_values != '' %}
			{% assign custom_pagination_elements_values = custom_pagination_elements_values | append: custom_pagination_delimiter %}
		{% endif %}

		{% assign custom_pagination_elements_values = custom_pagination_elements_values | append: custom_pagination_element_value %}
	{% endif %}

	{% if custom_pagination_page_index < custom_pagination_range_min or custom_pagination_page_index > custom_pagination_range_max %}
		{% continue %}
	{% endif %}

	{% assign custom_pagination_element_value = custom_pagination_page_index %}

	{% if custom_pagination_elements_values != '' %}
		{% assign custom_pagination_elements_values = custom_pagination_elements_values | append: custom_pagination_delimiter %}
	{% endif %}

	{% assign custom_pagination_elements_values = custom_pagination_elements_values | append: custom_pagination_element_value %}
{% endfor %}

{% assign custom_pagination_elements = custom_pagination_elements_values | split: custom_pagination_delimiter | uniq %}
{% assign custom_pagination_parts = '' %}
{% for custom_pagination_element in custom_pagination_elements %}
	{% assign custom_pagination_index = forloop.index %}

	{% if custom_pagination_index > 0 %}
		{% assign custom_pagination_previous_index = custom_pagination_index | minus: 1 %}
		{% assign custom_pagination_previous_element = custom_pagination_elements[custom_pagination_previous_index] | plus: 0 %}
		{% assign custom_pagination_current_element = custom_pagination_elements[custom_pagination_index] | plus: 0 %}
		{% assign elemets_differens = custom_pagination_current_element | minus: custom_pagination_previous_element %}

		{% if custom_pagination_parts != '' %}
			{% assign custom_pagination_parts = custom_pagination_parts | append: custom_pagination_delimiter %}
		{% endif %}

		{% assign custom_pagination_parts = custom_pagination_parts | append: custom_pagination_previous_element %}

		{% if elemets_differens > 1 %}
			{% assign custom_pagination_parts = custom_pagination_parts | append: custom_pagination_delimiter | append: '...' | append: custom_pagination_delimiter %}
		{% endif %}
	{% endif %}
{% endfor %}

{% assign custom_pagination_parts_string = '' %}
{% assign custom_pagination_parts = custom_pagination_parts | split: custom_pagination_delimiter %}
{% for custom_pagination_part in custom_pagination_parts %}
	{% assign custom_pagination_part = custom_pagination_part | strip %}

	{% if custom_pagination_part == blank %}
		{% continue %}
	{% endif %}

	{% if custom_pagination_parts_string != '' %}
		{% assign custom_pagination_parts_string = custom_pagination_parts_string | append: custom_pagination_delimiter %}
	{% endif %}

	{% assign custom_pagination_parts_string = custom_pagination_parts_string | append: custom_pagination_part %}
{% endfor %}

{% assign custom_pagination_parts = custom_pagination_parts_string | split: custom_pagination_delimiter %}

{% if pages_count > 1 %}
	<ul>
		{% for custom_pagination_part in custom_pagination_parts %}
			{% if custom_pagination_part == '...' %}
				<li>{{ custom_pagination_part }}</li>
			{% else %}
				<li>
					<a href="{{ base_url }}?page={{ custom_pagination_part }}{% if template.suffix %}&view={{ template.suffix }}{% endif %}">
						{{ custom_pagination_part }}
					</a>
				</li>
			{% endif %}
		{% endfor %}
	</ul>
{% endif %}
{% comment %}
  pages_count - total pages number
  current_page - current page in ?page={current_page}
  base_url - base url for pagination links
{% endcomment %}

{% include 'custom-pagination', pages_count: pages_count, current_page: current_page, base_url: blog.url %}