mod: данные о последних визитах пользователя полностью перенесены с сервера на клиент (в JS). Отключен из контекста всех шаблонов LAST_VISIT и связанные с ним функции в вьюшках
This commit is contained in:
@@ -75,11 +75,7 @@
|
||||
<button type="submit" class="btn btn-primary btn-add">Найти</button>
|
||||
</span>
|
||||
</div>
|
||||
{% if LAST_VISIT %}<div><h5>Ваши последние просмотры:</h5>
|
||||
<ul style="font-size:small">{% for ITEM in LAST_VISIT %}
|
||||
<li><a href="{{ ITEM.LastURL }}">{{ ITEM.LastApart }} <small>({{ ITEM.LastAddress }})</small></a> <small style="font-size: xx-small;">{{ ITEM.Time }}</small></li>{% endfor %}
|
||||
</ul>
|
||||
</div>{% endif %}
|
||||
{% include 'report/report_last_user_visit.html' with background_color="None" %}
|
||||
|
||||
</form>
|
||||
<p></p>{% endwith %}
|
||||
@@ -107,7 +107,8 @@
|
||||
<meta property="article:modified_time" content="{{ META_DATA_PUBLISH|date:'Y-m-d' }}" />
|
||||
{% endblock %}
|
||||
|
||||
{% block Top_JS3%}<script type="text/javascript">
|
||||
{% block Top_JS3%}<script type="text/javascript" src="{% static 'js/track_user_visit.js' %}"></script>
|
||||
<script type="text/javascript">
|
||||
function show_phone_num( id ){ // колапсатор для отображения контатной информации постафшика окон
|
||||
$('#tel'+id).collapse('show');
|
||||
$('#hid'+id).collapse('hide');
|
||||
@@ -272,11 +273,18 @@ $(function () { // инициализация и обработка попове
|
||||
{# --- Баннер: НАЧАЛО --- #}
|
||||
<div class="row"><div class="col-md-12 col-xs-12"><hr class="dotted-black" />{% include "ad/bannet-wide.html" %}</div></div>
|
||||
{# --- Баннер: конец --- #}
|
||||
<div class="row">
|
||||
{% include "report/report_last_user_visit.html" %}
|
||||
{% include "report/report_log_user_visit.html" %}
|
||||
<p id="shadow_buffer"></p>
|
||||
</div>
|
||||
<div class="row">
|
||||
{% include "report/report_last_user_visit.html" %}
|
||||
{% include "report/report_log_user_visit.html" %}
|
||||
<p id="shadow_buffer"></p>
|
||||
</div>
|
||||
|
||||
{# Скрытый элемент для отслеживания визитов пользователя (передача данных в JS track_user_visit.js) #}
|
||||
<div id="tracking-data"
|
||||
data-current-url="{{ request.path }}"
|
||||
data-address="{{ ADDRESS }}"
|
||||
data-apart="{{ APART }}"
|
||||
style="display: none;"></div>
|
||||
|
||||
{# модальное окно #}
|
||||
<div class="modal fade bs-example-modal-sm" id="modal-exclamation" tabindex="-1" role="dialog">
|
||||
|
||||
@@ -1,8 +1,71 @@
|
||||
<!--- Информация об адресах просмотренных текущим пользователем --->{% load filters %}
|
||||
{% if LAST_VISIT and LAST_VISIT|length >= 1 %}<div class="col-xs-12">
|
||||
<div class="col-md-11 col-xs-12 last_user_visit"><h5>Цены на окна просмотренные вами:</h5>
|
||||
<ul>{% for ITEM in LAST_VISIT %}
|
||||
<li><a href="{{ ITEM.LastURL }}">Цены на окна для серии {{ ITEM.LastApart }} <small>({{ ITEM.LastAddress }})</small></a> <small>{{ ITEM.Time }}</small></li>{% endfor %}
|
||||
</ul>
|
||||
<!-- Информация об адресах, просмотренных текущим пользователем (читается из браузерных кук) -->
|
||||
<div class="col-xs-12">
|
||||
<div class="col-md-11 col-xs-12{% if background_color != "None" %} last_user_visit{% endif %}" id="last_user_visit_container" style="display:none;">
|
||||
<h5>Цены на окна просмотренные вами {{ background_color }}:</h5>
|
||||
<ul id="last_visits_list"></ul>
|
||||
</div>
|
||||
</div>{% endif %}
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
/**
|
||||
* Отслеживание последних визитов пользователя из браузерных кук.
|
||||
* Читает куку 'LastVisit', парсит JSON и выводит список ссылок на уже просмотренные ценовые отчёты.
|
||||
*/
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
// Функция для получения значения куки по имени
|
||||
function getCookieValue(name) {
|
||||
try {
|
||||
if (document.cookie) {
|
||||
const cookies = document.cookie.split('; ');
|
||||
for (let cookie of cookies) {
|
||||
const [cookieName, cookieValue] = cookie.split('=');
|
||||
if (cookieName === name) {
|
||||
return decodeURIComponent(cookieValue);
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
console.warn('Ошибка при чтении куки LastVisit:', e);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
// Получаем куку с визитами
|
||||
const cookieValue = getCookieValue('LastVisit');
|
||||
if (cookieValue) {
|
||||
try {
|
||||
const visits = JSON.parse(cookieValue);
|
||||
|
||||
// Проверяем, есть ли визиты
|
||||
if (visits && visits.length > 0) {
|
||||
const listContainer = document.getElementById('last_visits_list');
|
||||
const lastUserVisitContainer = document.getElementById('last_user_visit_container');
|
||||
|
||||
// Очищаем список перед заполнением
|
||||
listContainer.innerHTML = '';
|
||||
|
||||
// При перезагрузке страницы текущий визит уже записан, поэтому пропускаем первый
|
||||
const visitsToShow = visits.slice(1);
|
||||
|
||||
// Выводим предыдущие визиты (не текущий)
|
||||
for (let i = 0; i < visitsToShow.length; i++) {
|
||||
const item = visitsToShow[i];
|
||||
const li = document.createElement('li');
|
||||
|
||||
// Форматируем текст ссылки: адрес (тип квартиры)
|
||||
const linkText = `Цены на окна для серии ${item.LastApart} <small>(${item.LastAddress})</small>`;
|
||||
|
||||
li.innerHTML = `<a href="${item.LastURL}">${linkText}</a>`;
|
||||
listContainer.appendChild(li);
|
||||
}
|
||||
|
||||
// Если есть данные для отображения, показываем блок
|
||||
if (visitsToShow.length > 0) {
|
||||
lastUserVisitContainer.style.display = 'block';
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
console.warn('Ошибка при разборе JSON из кук LastVisit:', e);
|
||||
}
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
Reference in New Issue
Block a user