125 lines
7.6 KiB
Plaintext
125 lines
7.6 KiB
Plaintext
<!DOCTYPE html>
|
||
<html lang="ru">
|
||
<head>
|
||
@* кодировка UTF-8 — чтобы русские буквы отображались корректно *@
|
||
<meta charset="utf-8" />
|
||
@* viewport — чтобы сайт нормально смотрелся на телефонах *@
|
||
@* width=device-width — ширина = ширина экрана, initial-scale=1.0 — без масштабирования *@
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||
|
||
@* Open Graph — чтобы при ссылке в соцсети показывалось красивое превью *@
|
||
<meta property="og:title" content="ТехноМир — Интернет-магазин техники" />
|
||
<meta property="og:description" content="Лучшие цены на ноутбуки, смартфоны, планшеты и наушники" />
|
||
<meta property="og:type" content="website" />
|
||
|
||
@* заголовок страницы — берётся из ViewData["Title"], который задаётся в каждом представлении *@
|
||
<title>@ViewData["Title"] — ТехноМир</title>
|
||
|
||
@* подключаем Bootstrap 5 через CDN (Content Delivery Network) *@
|
||
@* это значит что CSS-файл подгружается с сервера Bootstrap, а не лежит у нас *@
|
||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css"
|
||
rel="stylesheet"
|
||
integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YcnS/1p0KQLI8apkWKaIl2pCeM0oG6mDcK0h"
|
||
crossorigin="anonymous" />
|
||
|
||
@* подключаем наш кастомный CSS — он лежит в wwwroot/css/site.css *@
|
||
@* asp-append-version="true" — добавляет хеш к файлу, чтобы браузер перезагружал CSS при изменениях *@
|
||
<link rel="stylesheet" href="~/css/site.css" asp-append-version="true" />
|
||
|
||
@* иконка сайта (favicon) — маленькая картинка во вкладке браузера *@
|
||
<link rel="icon" type="image/x-icon" href="~/favicon.ico" />
|
||
</head>
|
||
@* data-theme — атрибут для переключения темы (светлая/тёмная) *@
|
||
<body data-theme="light">
|
||
|
||
@* === ШАПКА САЙТА (HEADER) === *@
|
||
<header>
|
||
@* навигационная панель Bootstrap — сверху сайта *@
|
||
@* navbar-expand-sm — на маленьких экранах схлопывается в бургер *@
|
||
@* navbar-dark — тёмный стиль навбара (белый текст на тёмном фоне) *@
|
||
@* bg-primary — фон навбара — наш акцентный цвет *@
|
||
<nav class="navbar navbar-expand-sm navbar-dark bg-primary shadow-sm mb-3">
|
||
<div class="container">
|
||
@* логотип / название сайта — ссылка на главную *@
|
||
@* asp-controller="Home" asp-action="Index" — Tag Helper, который генерирует href="/" *@
|
||
<a class="navbar-brand fw-bold" asp-controller="Home" asp-action="Index">
|
||
ТехноМир
|
||
</a>
|
||
|
||
@* кнопка-бургер — появляется на маленьких экранах *@
|
||
@* data-bs-target="#mainNav" — ссылается на ID меню, которое нужно свернуть/развернуть *@
|
||
<button class="navbar-toggler" type="button"
|
||
data-bs-toggle="collapse" data-bs-target="#mainNav"
|
||
aria-controls="mainNav" aria-expanded="false" aria-label="Меню">
|
||
@* иконка-бургер (три полоски) *@
|
||
<span class="navbar-toggler-icon"></span>
|
||
</button>
|
||
|
||
@* само меню — сворачивается на маленьких экранах *@
|
||
<div class="collapse navbar-collapse" id="mainNav">
|
||
@* список ссылок навигации *@
|
||
<ul class="navbar-nav me-auto">
|
||
@* Главная *@
|
||
<li class="nav-item">
|
||
<a class="nav-link" asp-controller="Home" asp-action="Index">Главная</a>
|
||
</li>
|
||
@* Каталог *@
|
||
<li class="nav-item">
|
||
<a class="nav-link" asp-controller="Catalog" asp-action="Index">Каталог</a>
|
||
</li>
|
||
@* О системе *@
|
||
<li class="nav-item">
|
||
<a class="nav-link" asp-controller="Home" asp-action="About">О системе</a>
|
||
</li>
|
||
@* Контакты *@
|
||
<li class="nav-item">
|
||
<a class="nav-link" asp-controller="Home" asp-action="Contacts">Контакты</a>
|
||
</li>
|
||
</ul>
|
||
|
||
@* кнопка переключения темы — справа в навбаре *@
|
||
<button id="themeToggle" class="btn btn-outline-light btn-sm" title="Переключить тему">
|
||
@* по умолчанию показываем луну (переключиться на тёмную) *@
|
||
<span id="themeIcon">☾</span>
|
||
</button>
|
||
</div>
|
||
</div>
|
||
</nav>
|
||
</header>
|
||
|
||
@* === ОСНОВНОЕ СОДЕРЖИМОЕ СТРАНИЦЫ === *@
|
||
@* контейнер — ограничивает ширину контента, чтобы на широком экране не растягивался *@
|
||
<div class="container">
|
||
@* main — основной блок, сюда подставляется содержимое текущей страницы *@
|
||
@* RenderBody() — вот сюда вставляется то, что написано в Index.cshtml, About.cshtml и т.д. *@
|
||
<main role="main" class="pb-4">
|
||
@RenderBody()
|
||
</main>
|
||
</div>
|
||
|
||
@* === ПОДВАЛ (FOOTER) === *@
|
||
@* footer — самый низ сайта *@
|
||
<footer class="footer mt-auto py-3 bg-dark text-light">
|
||
<div class="container text-center">
|
||
@* группа, ФИО и год — как просили в задании *@
|
||
<span class="text-muted">
|
||
РПО 23/1 — Борисов Иван Сергеевич — 2026
|
||
</span>
|
||
</div>
|
||
</footer>
|
||
|
||
@* === СКРИПТЫ === *@
|
||
@* подключаем Bootstrap JS-бандл (включает Popper.js — нужен для выпадающих меню и тултипов) *@
|
||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"
|
||
integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz"
|
||
crossorigin="anonymous"></script>
|
||
|
||
@* наш скрипт — переключение темы *@
|
||
<script src="~/js/site.js" asp-append-version="true"></script>
|
||
|
||
@* рендерим дополнительные скрипты, если они нужны конкретной странице *@
|
||
@* required: false — секция необязательная, страницы без неё не ошибутся *@
|
||
@await RenderSectionAsync("Scripts", required: false)
|
||
</body>
|
||
</html>
|