templates/ProfileList/_show_more.profiles.html.twig line 1

Open in your IDE?
  1. {% set totalPages = (profiles.totalCount / profiles.currentLimit)|round(0, 'ceil') %}
  2. {% set innerText = innerText is defined ? innerText : 'Показать ещё' %}
  3. <div class="load-more-container d-flex-c mb-4" id="showmore_container">
  4.     <button class="load-more btn btn-main{{ totalPages == 1 or totalPages == profiles.currentPage ? ' d-none' : '' }}"
  5.         type="button"
  6.         id="load-more-btn"
  7.         data-currentPage="{{ profiles.currentPage }}"
  8.         data-totalPages="{{ totalPages }}"
  9.         data-perPage="{{ profiles.currentLimit }}"
  10.         data-itemsInRow="{{ profiles.currentLimit >= 3 ? 3 : profiles.currentLimit }}"
  11.         data-url="{{ app.request.requestUri }}"
  12.         {# data-filter-url="{{ path('profile_list.filter_list', {city: app.request.attributes.get('city').uriIdentity}) }}" #}
  13.     >{{ innerText }}</button>
  14. </div>
  15. <script type="text/javascript">
  16.     document.addEventListener('DOMContentLoaded', function() {
  17.         window.moreLoader = new MoreLoader({
  18.             'btnMoreSelector': '#load-more-btn',
  19.             'containerSelector': '#profile-list',
  20.             'receiveRenderedResponse': true,
  21.             'responseCallback': function(response) {
  22.                 const profileListRoot = document.getElementById('profile-list');
  23.                 const existIdSet = new Set([...profileListRoot.querySelectorAll('.profile-card')].map(el => {
  24.                     const id = +el.dataset.profileId;
  25.                     return isNaN(id) ? null : id;
  26.                 }).filter(id => id !== null));
  27.                 const div = document.createElement('div');
  28.                 div.innerHTML = response;
  29.                 const profileListResponse = [...div.querySelectorAll('.profile-card')];
  30.                 const responseIdList = [];
  31.                 {# // Добавляем только новые элементы и собираем их ID #}
  32.                 profileListResponse.forEach(el => {
  33.                     const profileId = +el.dataset.profileId;
  34.                     if (!isNaN(profileId) && !existIdSet.has(profileId)) {
  35.                         profileListRoot.appendChild(el);
  36.                         responseIdList.push(profileId);
  37.                     }
  38.                 });
  39.                 if (responseIdList.length < 4) {
  40.                     setTimeout(()=>{
  41.                         window.moreLoader.showMore();
  42.                     }, 10)
  43.                 }
  44.                 document.querySelectorAll('.pagination').forEach(function (el) {
  45.                     el.style.display = 'none';
  46.                 });
  47.             },
  48.             'templateSelector': null,
  49.             {% set route = app.request.get('_route') is null and "massagers" in app.request.pathInfo ? 'masseur_list.page' : app.request.get('_route') %}
  50.             {% set urlPath = '._pagination' in route ? route : route ~ '._pagination' %}
  51.             {% set routeParams = app.request.get('_route_params') ?? [] %}
  52.             'url': '{{ path(urlPath, routeParams|merge({city: city.uriIdentity, page: profiles.currentPage + 1})) }}',
  53.             'urlCity': '{{ city.uriIdentity }}',
  54.             'urlPagePartTemplate': 'page%N%/',
  55.             'currentPage': {{ profiles.currentPage }},
  56.             'totalPages': {{ (profiles.totalCount / profiles.currentLimit)|round(0, 'ceil') }},
  57.             'perPage': 5,
  58.             'itemsInRow': 2,
  59.             'recordsArrayName': 'profiles',
  60.         });
  61.     });
  62. </script>
  63. {% include 'ShowMore/_show_more.base.html.twig' %}