templates/ProfileList/list.html.twig line 1

Open in your IDE?
  1. {% extends 'grid.html.twig' %}
  2. {% macro _get_min(price1, price2, currency) %}
  3.     {% set price1 = price1 is defined and price1 > 0 ? price1 : 999999999 %}
  4.     {% set price2 = price2 is defined and price2 > 0 ? price2 : 999999999 %}
  5.     {% if price1 == 999999999 and price2 == 999999999 %}
  6.         -
  7.     {% elseif price1 == 999999999 %}
  8.         {{price2}} {{ currency }}
  9.     {% elseif price2 == 999999999 %}
  10.         {{price1}} {{ currency }}
  11.     {% else %}
  12.         {{ min([price1,price2]) }} {{ currency }}
  13.     {% endif %}
  14. {% endmacro %}
  15. {%- macro _check_out_price(price1, price2, price3) -%}
  16.     {%- set maxPrice = 999999999 %}
  17.     {%- set price1 = price1 is defined and price1 > 0 ? price1 : maxPrice -%}
  18.     {%- set price2 = price2 is defined and price2 > 0 ? price2 : maxPrice -%}
  19.     {%- set price3 = price3 is defined and price3 > 0 ? price3 : maxPrice -%}
  20.     {%- if price1 != maxPrice or price2 != maxPrice or price3 != maxPrice -%}
  21.         1
  22.     {%- else -%}
  23.         0
  24.     {%- endif -%}
  25. {%- endmacro -%}
  26. {% block title %}{{ seo_title() }}{% endblock %}
  27. {% block metaDescription %}
  28.     <meta name="description" content="{{ seo_description() }}">
  29. {% endblock %}
  30. {% set listingPage = profiles.currentPage is defined and profiles.currentPage > 1 %}
  31. {% set isFirstPage = profiles.currentPage is defined and profiles.currentPage == 1 %}
  32. {# {% block canonical %}<link rel="canonical" href="{{ canonical_url() }}{{ listingPage ? 'page' ~ profiles.currentPage ~ '/' : ''}}">{% endblock %} #}
  33. {% block name_page %}girls-list{% endblock %}
  34. {% block current_menu_map %} current{% endblock %}
  35. {% block canonical %}
  36.     {# Обрезаем каноникал #}
  37.     {% set activeUri = app.request.requestUri %}
  38.     {% if
  39.         city.equals(default_city()) and
  40.         app.request.attributes.get('_route_params')|length == 2 and
  41.         'page' in activeUri and
  42.         'list_approved' not in app.request.attributes.get('_route') and
  43.         'list_new' not in app.request.attributes.get('_route') and
  44.         'list_with_comments' not in app.request.attributes.get('_route') and
  45.         'list_with_video' not in app.request.attributes.get('_route') and
  46.         'list_with_selfie' not in app.request.attributes.get('_route') and
  47.         'list_price_high' not in app.request.attributes.get('_route') and
  48.         'list_price_low' not in app.request.attributes.get('_route')
  49.     %}
  50.         {# Если город стандартный и без категорий - выводим `/`
  51.             Если _route_params|lenght = 3 и _route_params.page not indefind - работаем
  52.             Если отключен язык то _route_params|lenght = 2
  53.             #}
  54.         {% set canonicalUrl = '/' %}
  55.     {% else %}
  56.         {# Если город другой или есть категория - выводим `/{city}/{cat}/`#}
  57.         {% if 'page' in activeUri %}
  58.             {% set page = 'page' ~ app.request.attributes.get('page') %}
  59.             {% set urlAfterCheckPage = activeUri|slice(0, (activeUri|length - page|length - 1)) %}
  60.         {% else %}
  61.             {% set urlAfterCheckPage = activeUri %}
  62.         {% endif %}
  63.         {% set canonicalUrl = urlAfterCheckPage ? urlAfterCheckPage : '/' %}
  64.     {% endif %}
  65.     <link rel="canonical" href="{{ canonicalUrl }}">
  66. {% endblock %}
  67. {% block stylesheet %}
  68.     {{ parent() }}
  69.     {{ encore_entry_link_tags("scripts/filters", null, 'basicConfig') }}
  70. {% endblock %}
  71. {% block mainContainer %}
  72.     {{ knp_menu_render('breadcrumbs', {'template': '_menu/breadcrumbs.html.twig'}) }}
  73.     <header class="list_heading" role="heading">
  74.         <h1 class="border-line list_heading__title" role="heading">{{ seo_heading() ? seo_heading() : 'Проститутки города Питера' }}</h1>
  75.         <span class="list_heading__count">{{ profiles.totalCount }}</span>
  76.     </header>
  77.     {#
  78.     фича Пустые категории
  79.     {% if source is defined and source %}
  80.         <div class="empty-category level d-flex overflow-hidden mb-4">
  81.             <div class="empty-category__icon d-flex align-items-center justify-content-center">
  82.                 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 34 30"><path fill="#FF3F40" fill-rule="evenodd" d="M.5 29.25L17 .75l16.5 28.5H.5zm27.8-3L17 6.73 5.7 26.25h22.6zm-12.8-4.5v3h3v-3h-3zm0-9h3v6h-3v-6z" clip-rule="evenodd"/></svg>
  83.             </div>
  84.             <div class="flex-fill px-3 px-sm-4 py-3">
  85.                 <p class="m-0">
  86.                     {% if source == 'county' %}К сожалению, все девушки из округа
  87.                         <a href="{{ category_url }}">{{ county.name }}</a>
  88.                         сейчас отдыхают, посмотрите проституток из других округов города
  89.                         {{ city.name|trans }}.
  90.                     {% endif %}
  91.                     {% if source == 'district' %}К сожалению, все девушки из района
  92.                         <a href="{{ category_url }}">{{ district.name }}</a>
  93.                         сейчас отдыхают, посмотрите проституток из других районов города
  94.                         {{ city.name|trans }}.
  95.                     {% endif %}
  96.                     {% if source == 'station' %}К сожалению, все девушки работающие вблизи метро
  97.                         <a href="{{ category_url }}">{{ station.name }}</a>
  98.                         сейчас отдыхают, посмотрите проституток у других станций метро в этом районе города
  99.                         {{ city.name|trans }}.
  100.                     {% endif %}
  101.                     {% if source == 'approved' or source == 'with_comments' or  source == 'with_video' or source == 'elite' or source == 'with_selfie' %}
  102.                         {% if source == 'approved' %}
  103.                             {% set source_name = '<a href="' ~ path('profile_list.list_approved', {city:city.uriIdentity}) ~ '">Проверенные анкеты</a>' %}
  104.                         {% elseif source == 'with_comments' %}
  105.                             {% set source_name = '<a href="' ~ path('profile_list.list_with_comments', {city:city.uriIdentity}) ~ '">Анкеты с отзывами</a>' %}
  106.                         {% elseif source == 'with_video' %}
  107.                             {% set source_name = '<a href="' ~ path('profile_list.list_with_video', {city:city.uriIdentity}) ~ '">Анкеты с видео</a>' %}
  108.                         {% elseif source == 'with_selfie' %}
  109.                             {% set source_name = '<a href="' ~ path('profile_list.list_with_selfie', {city:city.uriIdentity}) ~ '">Анкеты с селфи</a>' %}
  110.                         {% elseif source == 'elite' %}
  111.                             {% set source_name = '<a href="' ~ path('profile_list.list_for_elite_girls', {city:city.uriIdentity}) ~ '" style="pointer-events:none">Элитные проститутки</a>' %}
  112.                         {% else %}
  113.                             {% set source_name = '' %}
  114.                         {% endif %}
  115.                         {% if source_default == 'approved' %}К сожалению, все
  116.                             <a href="{{ category_url }}">проверенные девушки</a>
  117.                             сейчас отдыхают, посмотрите раздел
  118.                             {{ source_name|raw }}
  119.                         {% endif %}
  120.                         {% if source_default == 'with_comments' %}К сожалению, все
  121.                             <a href="{{ category_url }}">девушки, у которых есть отзывы</a>
  122.                             сейчас отдыхают, посмотрите раздел
  123.                             {{ source_name|raw }}
  124.                         {% endif %}
  125.                         {% if source_default == 'with_video' %}К сожалению, все
  126.                             <a href="{{ category_url }}">девушки, у которых есть видео</a>
  127.                             сейчас отдыхают, посмотрите раздел
  128.                             {{ source_name|raw }}
  129.                         {% endif %}
  130.                         {% if source_default == 'with_selfie' %}
  131.                             К сожалению, все <a href="{{ category_url }}">девушки, у которых есть селфи</a> сейчас отдыхают, посмотрите раздел {{ source_name|raw }}
  132.                         {% endif %}
  133.                     {% endif %}
  134.                     {% if source == 'by_params' %}К сожалению, раздел пуст. Посмотрите другие анкеты, которые мы подобрали для Вас.
  135.                     {% endif %}
  136.                     {% if source == 'service' %}К сожалению, все девушки, которые практикуют услугу
  137.                         <a href="{{ category_url }}">{{ service.name }}</a>
  138.                         сейчас отдыхают. Но мы подобрали для Вас девушек которые не против оказать Вам похожие услуги, взгляните!
  139.                     {% endif %}
  140.                     {% if source == 'city' %}К сожалению, данный раздел пуст. Взгляните на другие анкеты, которые мы нашли для Вас в городе
  141.                         {{ city.name|trans }}.
  142.                     {% endif %}
  143.                     {% if source == 'country' %}К сожалению, данный раздел пуст. Взгляните на анкеты которые мы подобрали для Вас.
  144.                     {% endif %}
  145.                     {% if source == 'massage_service' %}К сожалению, все девушки для которых массаж — это призвание сейчас отдыхают. Посмотрите проституток, которые также готовы сделать Вам массаж.
  146.                     {% endif %}
  147.                 </p>
  148.             </div>
  149.         </div>
  150.     {% endif %}#}
  151.     <div aria-hidden="true" class="no-display" style="display: none;">
  152.         <svg xmlns="http://www.w3.org/2000/svg">
  153.             <symbol id="close" viewBox="0 0 25 24">
  154.                 <path fill="#B5B5B5" d="m17.19 6-4.52 4.51L8.16 6 6.67 7.49l4.51 4.5-4.5 4.52L8.15 18l4.51-4.51L17.2 18l1.48-1.49L14.16 12l4.51-4.51L17.2 6Z"/>
  155.             </symbol>
  156.             <symbol id="expand" viewBox="0 0 20 20">
  157.                 <path fill="#B5B5B5" d="M15 8.41 13.59 7 10 10.58 6.41 7 5 8.41l5 5 5-5Z"/>
  158.             </symbol>
  159.             <symbol id="range-off" viewBox="0 0 25 24">
  160.                 <rect width="24" height="4" x=".34" y="10" fill="#A3A3A3" rx="2"/>
  161.                 <circle cx="4.34" cy="12" r="3" fill="#fff" stroke="#A3A3A3" stroke-width="2"/>
  162.                 <circle cx="20.34" cy="12" r="3" fill="#fff" stroke="#A3A3A3" stroke-width="2"/>
  163.             </symbol>
  164.             <symbol id="range-on" viewBox="0 0 25 24">
  165.                 <rect width="24" height="4" x=".34" y="10" fill="#A3A3A3" rx="2"/>
  166.                 <rect width="12" height="4" x="6.34" y="10" fill="#f7901d" rx="2"/>
  167.                 <circle cx="6.34" cy="12" r="3" fill="#fff" stroke="#f7901d" stroke-width="2"/>
  168.                 <circle cx="18.34" cy="12" r="3" fill="#fff" stroke="#f7901d" stroke-width="2"/>
  169.             </symbol>
  170.             <symbol id="filter" viewBox="0 0 24 24">
  171.                 <path d="M6.96 6h10l-5 6.3-5-6.3Zm-2.75-.39L9.96 13v6a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1v-6l5.74-7.39A1 1 0 0 0 18.91 4H5.01a1 1 0 0 0-.8 1.61Z" />
  172.             </symbol>
  173.             <symbol id="filter-arrow" viewBox="0 0 24 24">
  174.                 <path d="M5.7924 16.6699L4 14.8999L12 6.99992L20 14.8999L18.2076 16.6699L12 10.5399L5.7924 16.6699Z" fill="#B5B5B5"/>
  175.             <symbol>
  176.         </svg>
  177.     </div>
  178.     <div id="filter-form-root">
  179.         <button class="filter_hide_button rounding" type="button" id="filter_hide_button">
  180.             <svg class="filter_hide_button__icon" fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><use xlink:href="#filter"></use></svg>
  181.             <span class="filter_hide_button__text" data-filter-hide-text-show>Фильтры</span>
  182.             <svg class="filter_hide_button__rotate" fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill-rule="evenodd" clip-rule="evenodd" d="M7.45 9.87a.84.84 0 0 1 1.24 0l3.3 3.5 3.32-3.5a.84.84 0 0 1 1.23 0c.34.36.34.95 0 1.3l-3.92 4.16a.84.84 0 0 1-1.24 0l-3.93-4.15a.96.96 0 0 1 0-1.31Z" /></svg>
  183.         </button>
  184.         <div class="filter_hide_block" id="filter_hide_block">
  185.             {# Форма полей фильтрации #}
  186.             <form name="profile_filter_form" method="post" action="/filter/" class="filter_form" id="filter-form" data-process-url="/profile_ctr/increase-shows/" data-main-class="profile_filter">
  187.                 <div class="profile_filter">
  188.                     <button class="profile_filter__mobile_button" type="button">
  189.                         <svg class="profile_filter__mobile_button__icon" fill="#666" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><use xlink:href="#filter"></use></svg>
  190.                         <span class="profile_filter__mobile_button__text">Фильтры</span>
  191.                         <svg class="profile_filter__mobile_button__icon profile_filter__mobile_button__icon-arrow" fill="#666" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" style="transform:rotate(180deg)"><use xlink:href="#filter-arrow"></use></svg>
  192.                     </button>
  193.                     <div class="profile_filter__item rounding profile_filter__item--loading"></div>
  194.                     <div class="profile_filter__item rounding profile_filter__item--loading"></div>
  195.                     <div class="profile_filter__item rounding profile_filter__item--loading"></div>
  196.                     <div class="profile_filter__item rounding profile_filter__item--loading"></div>
  197.                     <div class="profile_filter__item rounding profile_filter__item--loading"></div>
  198.                     <div class="profile_filter__item rounding profile_filter__item--loading"></div>
  199.                     <div class="profile_filter__item rounding profile_filter__item--loading"></div>
  200.                     <div class="profile_filter__item rounding profile_filter__item--loading"></div>
  201.                     <div class="profile_filter__item rounding profile_filter__item--loading"></div>
  202.                     <div class="profile_filter__item rounding profile_filter__item--loading"></div>
  203.                     <div class="profile_filter__item rounding profile_filter__item--loading"></div>
  204.                     <div class="profile_filter__item rounding profile_filter__item--loading"></div>
  205.                     <div class="profile_filter__item rounding profile_filter__item--loading"></div>
  206.                     <div class="profile_filter__item rounding profile_filter__item--loading"></div>
  207.                     <div class="profile_filter__item rounding profile_filter__item--loading"></div>
  208.                 </div>
  209.             </form>
  210.         </div>
  211.         <div class="profile_filter__tags__container fade_slider__container">
  212.             <div class="profile_filter__tags d-none fade_slider" id="filter_tags">
  213.             <button class="profile_filter__tag" type="button" data-all>Сбросить фильтры</button>
  214.             </div>
  215.         </div>
  216.         <div class="profile_filter__line" id="filter_line">
  217.             <div class="profile_filter__line__title">Найдено <span class="profile_filter__line__title__count">{{ profiles.totalCount }} {{ profiles.totalCount|incline_numeral(['анкета', 'анкеты', 'анкет']) }}</span></div>
  218.             <button class="profile_filter__line__reset" type="button" id="filter_line_reset">Сбросить фильтры <svg class="profile_filter__line__reset_icon" fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 14 14"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.7 1.7A1 1 0 0 0 12.3.3L7 5.58 1.7.29A1 1 0 0 0 .3 1.71L5.58 7l-5.3 5.3a1 1 0 1 0 1.42 1.4L7 8.42l5.3 5.3a1 1 0 0 0 1.4-1.42L8.42 7l5.3-5.3Z" fill="#f7901d"/></svg>
  219.             </button>
  220.         </div>
  221.     </div>
  222.     {% block mainList %}
  223.         <div class="models-items-row flex-wrap" id="profile-list">
  224.             {% include 'ProfileList/list.profiles.html.twig' with { 'top_profile': profile_top_placement() } %}
  225.         </div>
  226.     {% endblock %}
  227.     {%- if profiles and profiles.totalCount > profiles.currentPage * profiles.currentLimit -%}
  228.         {%- block showMore -%}
  229.             {%- include 'ProfileList/_show_more.profiles.html.twig' -%}
  230.         {%- endblock showMore -%}
  231.     {%- endif -%}
  232.     {{ porpaginas_render(profiles) }}
  233.     {# {% set stations_circle = station_pages_linkage_circle() %}
  234.     {% if stations_circle is not null %}
  235.         <div class="station-pages-linkage-circle">
  236.             {% if stations_circle[0] is defined and stations_circle[0] is not null %}<a href="{{ stations_circle[0].href }}"><i class="prev"></i>{{ stations_circle[0].text }}</a>{% endif %}
  237.             {% if stations_circle[0] is defined and stations_circle[0] is not null
  238.                 and stations_circle[1] is defined and stations_circle[1] is not null %}<i class="sep"></i>{% endif %}
  239.             {% if stations_circle[1] is defined and stations_circle[1] is not null %}<a href="{{ stations_circle[1].href }}">{{ stations_circle[1].text }}<i class="next"></i></a>{% endif %}
  240.         </div>
  241.     {% endif %} #}
  242.     {% if profiles and profiles.currentPage >= 2 %}
  243.         {% set excludeRecommendationProfileIds = [] %}
  244.         {{ include('components/_profile_recommendations.html.twig') }}
  245.     {% endif %}
  246.     {% if isFirstPage %}
  247.     {{ include('components/seo_text.html.twig', { "type": 'top', "noindex": true }) }}
  248.     {{ include('components/seo_text.html.twig', { "type": 'bottom', "noindex": true }) }}
  249.     {% endif %}
  250.     {% set cities_circle = city_main_pages_linkage_circle() %}
  251.     {% if cities_circle is not null %}
  252.         <div class="city_main_pages_linkage_circle">
  253.             <h3>Также рекомендуем:</h3>
  254.             {% if cities_circle[0] is not null %}<a href="{{ cities_circle[0].href }}">{{ cities_circle[0].text }}</a>{% endif %}
  255.             {% if cities_circle[1] is not null %}<a href="{{ cities_circle[1].href }}">{{ cities_circle[1].text }}</a>{% endif %}
  256.         </div>
  257.     {% endif %}
  258.     {% set circle = inner_linkage_circle() %}
  259.     {% if circle is not null %}
  260.         <div class="inner_linkage_circle">
  261.             <h3>Также интересуются:</h3>
  262.             <a href="{{ circle[0].href }}">{{ circle[0].text }}</a>
  263.             <a href="{{ circle[1].href }}">{{ circle[1].text }}</a>
  264.         </div>
  265.     {% endif %}
  266. {% endblock %}
  267. {% block javascripts %}
  268.     {% set excludeRecommendationProfileIds = [] %}
  269.     {{ parent() }}
  270.     {{ encore_entry_script_tags('scripts/filters', null, 'basicConfig') }}
  271.     {%- set route = app.request.get('_route') -%}
  272.     {%- if 'profile_search.page' not in route and not (app.request.method == 'GET' and app.request.isXmlHttpRequest()) -%}
  273.         <script>
  274.             window._lD = {
  275.                 formUrl: "{{ path('profile_filters.form', {city: city.uriIdentity}) }}",
  276.                 setLastViewedListing: '{{ app.request.attributes.get('_route') }}',
  277.                 listingData: [
  278.                     ['listing', '{{ listing }}'],
  279.                     ['listingParams', '{{ listing_parameters|json_encode() }}'.replaceAll('&quot;', '"')],
  280.                 ],
  281.                 cityUrl: "{{city.uriIdentity}}"
  282.             }
  283.             window._spb_s = {
  284.                 stations: {
  285.                     {%- for station in stations() -%}
  286.                         "{{ station.name|trans }}": "{{ path('profile_list.list_by_station', {'city': station.city.uriIdentity, 'station': station.uriIdentity}) }}"{% if not loop.last %},{% endif %}
  287.                     {%- endfor -%}
  288.                 }
  289.             };
  290.             document.addEventListener("DOMContentLoaded", () => {
  291.                 new window._filterLoader({
  292.                     formUrl: "{{ path('profile_filters.form', {city: city.uriIdentity}) }}",
  293.                     defaultProfilesCount: "{{ profiles.totalCount }}"
  294.                 });
  295.             })
  296.         </script>
  297.         {# {% endif %} #}
  298.     {%- endif -%}
  299.     {# <script>
  300.         document.addEventListener('DOMContentLoaded', function() {
  301.             {% if profiles and profiles.totalCount > 0 %}
  302.                 {%- set profilesId = profiles|map(p => p.id)|join(',') -%}
  303.                 window.increase_shows({
  304.                     profiles: [{{ profilesId }}],
  305.                     route: '{{ app.request.attributes.get('_route') }}',
  306.                 })
  307.             {% endif %}
  308.         });
  309.     </script> #}
  310. {% endblock %}