{% extends 'ProfileList/grid.html.twig' %}
{# {% extends 'grid.html.twig' %} #}
{%- set linkLangSupport = app.request.locale == 'en' ? '/en' : '' -%}
{%- set excludeRecommendationProfileIds = [] -%}
{# {%- block stylesheet_postload -%}{{ encore_entry_link_tags("styles/public-girl-list") }}{{ parent() }}{%- endblock -%} #}
{%- block preloadAnyData -%}
{# {%- set photo = profiles|first|avatar -%}
{%- if photo -%}
<link rel="preload" href="{{ responsive_asset(photo.path, 'profile_media', "200x280", "jpg") }}" as="image">
<link rel="preload" as="image"
href="{{ responsive_asset(photo.path, 'profile_media', "200x280", "jpg") }}"
imagesrcset="{{ responsive_asset(photo.path, 'profile_media', "200x280", "jpg") }} 200w,
{{ responsive_asset(photo.path, 'profile_media', "185x259", "jpg") }} 185w"
imagesizes="(max-width: 1740px) 185px, 200px"
media="(min-width: 1740px)" />
{%- endif -%} #}
{%- endblock -%}
{%- block metaSpecial -%}
{%- if profiles and profiles.currentPage >= 2 -%}
<meta name="yandex" content="noindex, nofollow" />
{%- endif -%}
{%- endblock -%}
{%- block mainContainer -%}
{%- set isMainCity = city.uriIdentity == default_city().uriIdentity -%}
{%- set conditionList = [
'usluga-massage-professionalnyij',
'usluga-massage-rasslablyayuschij',
'usluga-massage-tajskij',
'usluga-massage-urologicheskij',
'/new/',
'/search/',
'/checked/',
'/salons/',
'/usluga-striptiz-ne-profi/',
'/usluga-striptiz-profi/',
'/price/high/',
'/usluga-seks-analnyij/',
'/hair-color-blonde/',
'/hair-color-brunette/',
'/price/low/',
'/video/',
'/comments/',
'/map/',
'/usluga-massage-klassicheskij/',
'/nationality-asian/',
'/usluga-anilingus-delayu/',
'/usluga-gospozha/',
'/selfie/',
'/massagers/',
'/usluga-massage-vetka-sakuryi/',
'/okrug/vostochnyj-vao/',
'/okrug/zapadnyj-zao/',
'/okrug/severnyj-sao/',
'/okrug/severo-zapadnyj-szao/',
'/okrug/tsentralnyij/',
'/okrug/yugo-vostochnyj-yuvao/',
'/usluga-minet-bez-rezinki/',
'/usluga-minet-v-mashine/',
'/usluga-minet-v-prezervative/',
'/usluga-minet-glubokij/',
'/nationality-negress/',
'/main-district/',
'/hair-color-light-brown/',
'/hair-color-red/',
'/usluga-seks-gruppovoj/',
'/usluga-strapon/',
'/usluga-uslugi-semejnoj-pare/',
'/usluga-fisting-analnyij/',
'/usluga-fisting-klassicheskij/',
'/hair-color-brown/',
'/nationality-kazakh/',
'/nationality-mulatto/',
'/nationality-russian/',
'/nationality-tatar/',
'/nationality-ukrainian/',
'/okrug/yugo-zapadnyj-yuzao/',
'/okrug/zelenograd/',
'/body-type-athletic/',
'/body-type-fat/',
'/usluga-seks-klassicheskij/',
'/usluga-rolevyie-igryi/',
'/usluga-eskort/',
'/usluga-trampling/',
'/usluga-fetish/',
'/usluga-bondaj/',
'/usluga-rabyinya/',
'/usluga-porka/',
'/body-type-thin/',
'/body-type-slim/',
'/body-type-tight/',
'/usluga-okonchanie-na-grud/',
'/usluga-okonchanie-na-litso/',
'/usluga-kopro-vyidacha/',
'/usluga-okonchanie-v-rot/',
'/usluga-kunnilingus/',
'/usluga-massage-eroticheskij/',
'/usluga-massage-tochechnyij/',
'/usluga-igrushki/',
'/usluga-zolot-dozhd-vyidacha/',
'/usluga-zolotoj-dozhd-priem/',
'/usluga-legkaya-dominatsiya/',
'/metro-',
'/prostitytki-'
]
%}
{%- set onlyThisPageSeoShow = false -%}
{%- for str in conditionList -%}
{%- if str in app.request.pathInfo -%}
{%- set onlyThisPageSeoShow = true -%}
{%- endif -%}
{%- endfor -%}
{% set route = app.request.attributes.get('_route') %}
{%- set isIndexPage = app.request.pathInfo == '/' -%}
{%- set firstPage = profiles.currentPage == 1 -%}
{%- set isStationPage = route == "profile_list.list_by_station" -%}
{% set mainListingFirstPage = route == 'profile_list.list_by_city' %}
{# {%- set isShowTopSeo = (firstPage and isMainCity and onlyThisPageSeoShow) or isIndexPage -%}
{%- set isShowBottomSeo = (firstPage and isMainCity and onlyThisPageSeoShow ) or isIndexPage -%} #}
{%- set isShowTopSeo = true -%}
{%- set isShowTopOnBottomSeo = true -%}
{%- set isShowBottomSeo = true -%}
{{- knp_menu_render('breadcrumbs', {'template': '__design/v2023/_menu/breadcrumbs.html.twig'}) -}}
<div class="heading d-flex">
<h1 class="heading-title text-title mr-1" role="heading">{{- seo_heading() ? seo_heading() : 'Проститутки и индивидуалки Москвы' -}}</h1>
<span class="heading-count clr-main-text fw-700" data-count-profiles>{{ profiles.totalCount }}</span>
</div>
{# <div aria-hidden="true" class="no-display" style="display: none;">
<svg xmlns="http://www.w3.org/2000/svg">
<symbol id="close" viewBox="0 0 25 24">
<path fill-rule="evenodd" clip-rule="evenodd" d="M19.46 6.7a1 1 0 0 0-1.42-1.4l-5.29 5.29-5.3-5.3a1 1 0 0 0-1.4 1.42L11.33 12l-5.3 5.3a1 1 0 1 0 1.42 1.4l5.29-5.29 5.3 5.3a1 1 0 0 0 1.4-1.42L14.17 12l5.3-5.3Z" fill="#A3A3A3"/>
</symbol>
<symbol id="expand" viewBox="0 0 25 24">
<path fill-rule="evenodd" clip-rule="evenodd" d="M5.54 8.3a1 1 0 0 1 1.42 0l5.29 5.29 5.3-5.3a1 1 0 1 1 1.4 1.42l-6 6a1 1 0 0 1-1.4 0l-6-6a1 1 0 0 1 0-1.42Z" fill="#A3A3A3"/>
</symbol>
<symbol id="range" viewBox="0 0 25 24">
<path d="M21.5 11h-1.18a2.98 2.98 0 0 0-5.64 0h-4.36a2.98 2.98 0 0 0-5.64 0H3.5a1 1 0 1 0 0 2h1.18a2.98 2.98 0 0 0 5.64 0h4.36a2.98 2.98 0 0 0 5.64 0h1.18a1 1 0 0 0 0-2Zm-14 2a1 1 0 1 1 0-2 1 1 0 0 1 0 2Zm10 0a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"/>
</symbol>
</svg>
</div> #}
{%- set isArchivePage = 'profile_list.list_archived' in app.request.attributes.get('_route') -%}
{%- set isFormExist = false -%}{# profile_filter_form is defined and not isArchivePage #}
{%- if isFormExist -%}
<noindex>
<button class="filter_hide_button" type="button" id="filter_hide_button">
<svg class="filter_hide_button__icon" fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><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" /></svg>
<span class="filter_hide_button__text" data-filter-hide-text-show>Показать фильтры</span>
<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>
</button>
<div class="filter_hide_block" id="filter_hide_block">
{# Форма полей фильтрации #}
{{ form_start(profile_filter_form, {
'attr': {
'id': 'filter-form',
'class': 'filter_form',
'data-process-url': path('profile_ctr.increase_shows'),
'data-main-class': 'profile_filter'
}
}) }}
{{ include('ProfileList/filter/form.partial.twig', {filterData: profile_filter_form.vars.value, filterListId: 'filter-list'}) }}
{{ form_end(profile_filter_form) }}
</div>
<div class="profile_filter__tags__container profile_filter__tags__container--mobile fade_slider__container">
<div class="profile_filter__tags d-none fade_slider d-none" id="filter_tags"></div>
</div>
<div class="profile_filter__line" id="filter_line" style="display: none">
<div class="profile_filter__line__title">Найдено <span class="profile_filter__line__title__count">{{ profiles.totalCount }} {{ profiles.totalCount|incline_numeral(['анкета', 'анкеты', 'анкет']) }}</span></div>
<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="#ED0C34"/></svg>
</button>
</div>
</noindex>
{% endif %}
{% block mainList %}
<ul class="profile-list d-grid mb-4 full-w-xs" id="profile-list">
{% include 'ProfileList/list.profiles.html.twig' with {
'top_profile': profile_top_placement(),
'likeButton': is_user_customer(app.user) == '1'
} %}
</ul>
{% endblock %}
{% if profiles and profiles.totalCount > profiles.currentPage * profiles.currentLimit %}
{% block showMore %}
{% include 'ProfileList/_show_more.profiles.html.twig' %}
{% endblock showMore %}
{% endif %}
{{ porpaginas_render(profiles) }}
<div class="map-block mb-4 full-w-xs">
<picture class="map-picture">
<source srcset="{{ asset('assets/images/background/map@480.jpg') }}" media="(max-width: 480px)">
<source srcset="{{ asset('assets/images/background/map@930.jpg') }}" media="(max-width: 960px)">
<img class="map-image" src="{{ asset('assets/images/background/map@1380.jpg') }}" alt="Интим-карта Москвы" loading="lazy">
</picture>
<div class="map-block-content d-flex-c">
<div class="map-block-title fw-700 mb-2">Интим-карта {{ city.name|geo_name('genitive') }}</div>
<div class="map-block-text">Поиск анкет рядом с Вами</div>
<a class="map-block-link btn btn-main" href="{{ path('map.page', {'city': city.uriIdentity}) }}">
<svg class="btn-icon" width="25" height="25" fill="none"><path fill-rule="evenodd" d="M4.674 8.944c0-4.314 3.512-7.826 7.826-7.826s7.826 3.512 7.826 7.826c0 5.448-6.809 13.049-7.102 13.372l-.724.802-.724-.802c-.293-.323-7.102-7.924-7.102-13.372Zm1.957 0c0 3.462 3.736 8.667 5.869 11.22 1.712-2.064 5.87-7.474 5.87-11.22a5.874 5.874 0 0 0-5.87-5.87 5.874 5.874 0 0 0-5.87 5.87Zm5.869 0c.812 0 1.467-.656 1.467-1.468 0-.812-.655-1.467-1.467-1.467s-1.467.665-1.467 1.467c0 .812.655 1.468 1.467 1.468Zm-2.935 2.445c0-.978 1.957-1.467 2.935-1.467s2.935.489 2.935 1.467v.118a3.88 3.88 0 0 1-2.935 1.35 3.88 3.88 0 0 1-2.935-1.35v-.118Z" clip-rule="evenodd"/></svg>
<span class="btn-text">Искать на карте</span>
</a>
</div>
</div>
{# Реки #}
{% if profiles and profiles.currentPage >= 2 %}
<div id="recommendations">
{%- set excludeRecommendationProfileIds = profiles|map(p => p.id)|join(', ') -%}
{%- include 'recommendations/_profile_recommendations.html.twig' with {componentClass: 'mobile'} -%}
</div>
{% endif %}
{% if route == 'homepage' or
(mainListingFirstPage and app.request.get('city').id == default_city().id)
%}
<div class="widget-profiles-by-categories" id="widget_profiles_by_categories"></div>
<script>
document.addEventListener('DOMContentLoaded', () => {
const widgetElement = document.querySelector('#widget_profiles_by_categories');
function getProfiles() {
fetch('{{ path('profile_widget.by_categories', {city: app.request.attributes.get('city', default_city()).uriIdentity}) }}', {
method: 'GET',
headers: {
"X-Requested-With": "XMLHttpRequest"
},
}).then(response => {
if (response.status < 300) {
return response.text();
} else {
console.warn(" ");
return null;
}
}).then(response => {
widgetElement.innerHTML = response;
const elementsRoot = [...document.querySelectorAll('#profile-list-new', '#profile-list-approved', '#profile-list-elite')];
elementsRoot.forEach(root => {
if (root.childElementCount === 0) {
root.previousElementSibling.remove();
root.remove();
}
});
});
}
if ('IntersectionObserver' in window) {
const observer = new IntersectionObserver((entries) => {
if (entries[0].isIntersecting) {
observer.disconnect();
getProfiles();
}
}, { rootMargin: '100px' });
observer.observe(widgetElement);
} else {
getProfiles();
}
});
</script>
{% endif %}
{# {% set circle = app.request.get('_route') == 'profile_list.list_by_provided_service' ? inner_linkage_circle('service') : inner_linkage_circle('prostitutes') %}
{% if circle is not null %}
<div class="station-pages-linkage-circle">
{% if circle[0] is defined and circle[0] is not null %}<a href="{{ circle[0].href }}"><i class="prev"></i>{{ circle[0].text }}</a>{% endif %}
{% if circle[0] is defined and circle[0] is not null
and circle[1] is defined and circle[1] is not null %}<i class="sep"></i>{% endif %}
{% if circle[1] is defined and circle[1] is not null %}<a href="{{ circle[1].href }}">{{ circle[1].text }}<i class="next"></i></a>{% endif %}
</div>
{% endif %}
{% set stations_circle = station_pages_linkage_circle() %}
{% if stations_circle is not null %}
<div class="station-pages-linkage-circle">
{% 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 %}
{% if stations_circle[0] is defined and stations_circle[0] is not null
and stations_circle[1] is defined and stations_circle[1] is not null %}<i class="sep"></i>{% endif %}
{% 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 %}
</div>
{% endif %}
{% set cities_circle = city_main_pages_linkage_circle() %}
{% if cities_circle is not null %}
<div class="station-pages-linkage-circle">
{% if cities_circle[0] is defined and cities_circle[0] is not null %}<a href="{{ cities_circle[0].href }}"><i class="prev"></i>{{ cities_circle[0].text }}</a>{% endif %}
{% if cities_circle[0] is defined and cities_circle[0] is not null
and cities_circle[1] is defined and cities_circle[1] is not null %}<i class="sep"></i>{% endif %}
{% if cities_circle[1] is defined and cities_circle[1] is not null %}<a href="{{ cities_circle[1].href }}">{{ cities_circle[1].text }}<i class="next"></i></a>{% endif %}
</div>
{% endif %} #}
{# {{ include('components/last_girl_list.html.twig') }} #}
{# комменты анкет для листинга станции #}
{# {% include 'ProfileList/station_comments.partial.html.twig' %} #}
{%- if isShowTopOnBottomSeo -%}
{{- include ('__design/v2023/components/seo-article.html.twig', { 'type': 'top', "noindex": true }) -}}
{%- endif -%}
{%- if isShowBottomSeo -%}
{{- include ('__design/v2023/components/seo-article.html.twig', { 'type': 'bottom', "noindex": true }) -}}
{%- endif -%}
{% endblock %}
{% block javascripts %}
{{parent()}}
<script>
const listingRoute = '{{ app.request.attributes.get('_route') }}' == '' ? 'profile_list.list_by_city' : '{{ app.request.attributes.get('_route') }}';
window._lD = {
setLastViewedListing: listingRoute,
cityUrl: "{{city.uriIdentity}}",
};
window.siteData = {
city: "{{ app.request.attributes.get('city', default_city()).uriIdentity }}",
stations: {
{%- for station in stations() -%}
"{{ station.name|trans }}": "{{ path('profile_list.list_by_station', {'city': station.city.uriIdentity, 'station': station.uriIdentity}) }}"{% if not loop.last %},{% endif %}
{%- endfor -%}
}
};
{# document.addEventListener('DOMContentLoaded', function() {
{% if profiles and profiles.totalCount > 0 %}
{%- set profilesId = profiles|map(p => p.id)|join(',') -%}
window.increase_shows({
profiles: [{{ profilesId }}],
route: '{{ app.request.attributes.get('_route') }}',
})
{% endif %}
}); #}
document.addEventListener('header:update', (event) => {
const userData = event.detail?.data;
if (userData.user && userData.role === 'advertiser') return;
{% include 'ProfileList/_favorite-button.partial.script.js' %}
})
</script>
{% endblock %}