Files
santeh-ray/templates/_fragments/header.html
Azimkin 29d8302a4f
All checks were successful
Build and Push Docker Image / build (push) Successful in 51s
feat: add favorites feature for users
- Implemented `Favorite` model with unique user-item constraint and timestamped records
- Added `favorites:index` and `favorites:toggle` views with AJAX support for toggling favorites
- Built templates and front-end assets for the favorites page and integration with item grids
- Extended header with favorites link and dynamic counter
- Added tests covering models, views, and templates for the favorites functionality
- Updated admin to enable management of favorites via Django admin interface
2026-05-10 20:06:12 +02:00

130 lines
9.2 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!-- HEADER FRAGMENT -->
<header>
<div class="container">
<div class="header-top">
<div class="logo"><a href="/">SantehRay</a></div>
<form action="">
<div class="search-wrap">
<div class="search-select-wrap">
<div class="search-category-dropdown" data-category-dropdown>
<button
type="button"
class="search-category-trigger"
aria-label="Выбор категории"
aria-expanded="false"
aria-haspopup="listbox"
data-category-trigger
>
<span class="search-category-label"
data-selected-label>{{ navigation_selected_label }}</span>
<svg class="search-select-arrow" xmlns="http://www.w3.org/2000/svg" width="14"
height="14"
viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false">
<path d="M3.2 6.2 8 11l4.8-4.8" stroke="currentColor" stroke-width="1.8"
stroke-linecap="round" stroke-linejoin="round"></path>
</svg>
</button>
<input type="hidden" name="category" value="{{ navigation_selected_value }}"
data-category-value>
<div class="search-category-menu" role="listbox" aria-label="Категории и подкатегории"
data-category-menu>
<button
type="button"
class="search-category-option search-category-option--all"
data-category-option
data-label="Все категории"
data-value=""
>
Все категории
</button>
{% for category in navigation_categories %}
<div class="search-category-group">
<div class="search-category-sublist">
<button
type="button"
class="search-category-option search-category-option--category"
data-category-option
data-label="{{ category.name }}"
data-value="category:{{ category.slug }}"
>
{{ category.name }}
</button>
{% for subcategory in category.subcategories.all %}
<button
type="button"
class="search-category-option search-category-option--subcategory"
data-category-option
data-label="{{ category.name }} / {{ subcategory.name }}"
data-value="subcategory:{{ category.slug }}:{{ subcategory.slug }}"
>
{{ subcategory.name }}
</button>
{% endfor %}
</div>
</div>
{% endfor %}
</div>
</div>
</div>
<label>
<input class="search-input" type="text" placeholder="Кто ищет, тот найдет...">
</label>
<button>
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"
class="bi bi-search" viewBox="0 0 16 16">
<path d="M11.742 10.344a6.5 6.5 0 1 0-1.397 1.398h-.001q.044.06.098.115l3.85 3.85a1 1 0 0 0 1.415-1.414l-3.85-3.85a1 1 0 0 0-.115-.1zM12 6.5a5.5 5.5 0 1 1-11 0 5.5 5.5 0 0 1 11 0"></path>
</svg>
</button>
</div>
</form>
<div class="header-icons">
<a href="{% if request.user.is_authenticated %}{% url 'favorites:index' %}{% else %}{% url 'users:login' %}{% endif %}"
aria-label="Избранное">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"
class="bi bi-heart" viewBox="0 0 16 16">
<path d="m8 2.748-.717-.737C5.6.281 2.514.878 1.4 3.053c-.523 1.023-.641 2.5.314 4.385.92 1.815 2.834 3.989 6.286 6.357 3.452-2.368 5.365-4.542 6.286-6.357.955-1.886.838-3.362.314-4.385C13.486.878 10.4.28 8.717 2.01zM8 15C-7.333 4.868 3.279-3.04 7.824 1.143q.09.083.176.171a3 3 0 0 1 .176-.17C12.72-3.042 23.333 4.867 8 15"></path>
</svg>
</a>
<a href="#">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"
class="bi bi-cart2" viewBox="0 0 16 16">
<path d="M0 2.5A.5.5 0 0 1 .5 2H2a.5.5 0 0 1 .485.379L2.89 4H14.5a.5.5 0 0 1 .485.621l-1.5 6A.5.5 0 0 1 13 11H4a.5.5 0 0 1-.485-.379L1.61 3H.5a.5.5 0 0 1-.5-.5M3.14 5l1.25 5h8.22l1.25-5zM5 13a1 1 0 1 0 0 2 1 1 0 0 0 0-2m-2 1a2 2 0 1 1 4 0 2 2 0 0 1-4 0m9-1a1 1 0 1 0 0 2 1 1 0 0 0 0-2m-2 1a2 2 0 1 1 4 0 2 2 0 0 1-4 0"></path>
</svg>
</a>
<a href="{% if request.user.is_authenticated %}{% url 'users:profile' %}{% else %}{% url 'users:login' %}{% endif %}">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"
class="bi bi-person" viewBox="0 0 16 16">
<path d="M8 8a3 3 0 1 0 0-6 3 3 0 0 0 0 6m2-3a2 2 0 1 1-4 0 2 2 0 0 1 4 0m4 8c0 1-1 1-1 1H3s-1 0-1-1 1-4 6-4 6 3 6 4m-1-.004c-.001-.246-.154-.986-.832-1.664C11.516 10.68 10.289 10 8 10s-3.516.68-4.168 1.332c-.678.678-.83 1.418-.832 1.664z"></path>
</svg>
</a>
</div>
</div>
<nav class="nav-bar">
<a href="/catalog/" class="catalog-btn nav-block {% if active == 'catalog' %}active-page{% endif %}">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor"
stroke-width="2" width="18" height="18">
<line x1="3" y1="6" x2="21" y2="6"></line>
<line x1="3" y1="12" x2="21" y2="12"></line>
<line x1="3" y1="18" x2="21" y2="18"></line>
</svg>
Каталог
</a>
<div class="nav-links">
<a class="{% if active == 'home' %}active-page{% endif %}" href="/">Главная</a>
<a class="{% if active == 'services' %}active-page{% endif %}" href="/services/">Услуги</a>
<a class="{% if active == 'shipping' %}active-page{% endif %}" href="/shipping/">Доставка</a>
<a class="{% if active == 'warranty' %}active-page{% endif %}" href="/warranty/">Гарантия</a>
<a class="{% if active == 'contacts' %}active-page{% endif %}" href="/contacts/">Контакты</a>
</div>
<a href="tel:+375296881819" class="phone-link nav-block">
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="currentColor"
class="bi bi-telephone" viewBox="0 0 16 16">
<path d="M3.654 1.328a.678.678 0 0 0-1.015-.063L1.605 2.3c-.483.484-.661 1.169-.45 1.77a17.6 17.6 0 0 0 4.168 6.608 17.6 17.6 0 0 0 6.608 4.168c.601.211 1.286.033 1.77-.45l1.034-1.034a.678.678 0 0 0-.063-1.015l-2.307-1.794a.68.68 0 0 0-.58-.122l-2.19.547a1.75 1.75 0 0 1-1.657-.459L5.482 8.062a1.75 1.75 0 0 1-.46-1.657l.548-2.19a.68.68 0 0 0-.122-.58zM1.884.511a1.745 1.745 0 0 1 2.612.163L6.29 2.98c.329.423.445.974.315 1.494l-.547 2.19a.68.68 0 0 0 .178.643l2.457 2.457a.68.68 0 0 0 .644.178l2.189-.547a1.75 1.75 0 0 1 1.494.315l2.306 1.794c.829.645.905 1.87.163 2.611l-1.034 1.034c-.74.74-1.846 1.065-2.877.702a18.6 18.6 0 0 1-7.01-4.42 18.6 18.6 0 0 1-4.42-7.009c-.362-1.03-.037-2.137.703-2.877z"></path>
</svg>
+375 (29) 688-18-19
</a>
</nav>
</div>
</header>