<?php
// ВАЖНО: никаких пробелов/строк до этого блока
if (session_status() === PHP_SESSION_NONE) {
session_start();
}
$user_id = $_SESSION['user_id'] ?? null;
$is_admin = false;
$unread_messages = 0;
$unread_matches = 0;
$unread_gifts = 0;
$friend_requests = 0;
if ($user_id && isset($mysqli) && $mysqli instanceof mysqli) {
// админ
if ($stmt = $mysqli->prepare("SELECT is_admin FROM users WHERE id = ? LIMIT 1")) {
$stmt->bind_param('i', $user_id);
$stmt->execute();
$stmt->bind_result($is_admin_flag);
if ($stmt->fetch()) {
$is_admin = (bool)$is_admin_flag;
}
$stmt->close();
}
// непрочитанные сообщения
if ($stmt = $mysqli->prepare("SELECT COUNT(*) FROM messages WHERE to_user_id = ? AND is_read = 0")) {
$stmt->bind_param('i', $user_id);
$stmt->execute();
$stmt->bind_result($cnt);
if ($stmt->fetch()) $unread_messages = (int)$cnt;
$stmt->close();
}
// новые совпадения
if ($stmt = $mysqli->prepare("SELECT COUNT(*)
FROM matches
WHERE (user1_id = ? OR user2_id = ?) AND is_new_for_user = 1")) {
$stmt->bind_param('ii', $user_id, $user_id);
$stmt->execute();
$stmt->bind_result($cnt);
if ($stmt->fetch()) $unread_matches = (int)$cnt;
$stmt->close();
}
// подарки
if ($stmt = $mysqli->prepare("SELECT COUNT(*) FROM gifts WHERE to_user_id = ? AND is_viewed = 0")) {
$stmt->bind_param('i', $user_id);
$stmt->execute();
$stmt->bind_result($cnt);
if ($stmt->fetch()) $unread_gifts = (int)$cnt;
$stmt->close();
}
// заявки в друзья
if ($stmt = $mysqli->prepare("SELECT COUNT(*) FROM friends WHERE friend_id = ? AND status = 'pending'")) {
$stmt->bind_param('i', $user_id);
$stmt->execute();
$stmt->bind_result($cnt);
if ($stmt->fetch()) $friend_requests = (int)$cnt;
$stmt->close();
}
}
function softlove_badge($count) {
if ($count <= 0) return '';
if ($count > 99) $count = '99+';
return '<span class="sl-badge">'.$count.'</span>';
}
?>
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>SoftLove</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="/assets/style.css?v=2">
<style>
body {
margin:0;
font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;
background:#fff5fa;
color:#222;
}
.sl-header {
position:sticky;
top:0;
z-index:100;
background:#ffffff;
box-shadow:0 2px 10px rgba(0,0,0,0.04);
}
.sl-header-inner {
max-width:900px;
margin:0 auto;
padding:10px 16px;
display:flex;
align-items:center;
justify-content:space-between;
gap:10px;
}
.sl-logo {
display:flex;
align-items:center;
gap:8px;
font-weight:600;
font-size:20px;
text-decoration:none;
color:#222;
}
.sl-logo-heart {
width:18px;
height:18px;
border-radius:50%;
background:linear-gradient(135deg,#ff5f8b,#ff8f5f);
display:flex;
align-items:center;
justify-content:center;
color:#fff;
font-size:13px;
}
.sl-header-nav {
display:flex;
align-items:center;
gap:10px;
font-size:14px;
flex-wrap:nowrap;
}
.sl-header-link {
text-decoration:none;
color:#444;
position:relative;
white-space:nowrap;
}
.sl-header-link:hover {
color:#ff4f8b;
}
.sl-header-btn {
padding:6px 12px;
border-radius:18px;
border:none;
cursor:pointer;
font-size:14px;
white-space:nowrap;
}
.sl-header-btn-primary {
background:linear-gradient(135deg,#ff5f8b,#ff8f5f);
color:#fff;
}
.sl-header-btn-outline {
background:transparent;
border:1px solid rgba(0,0,0,0.1);
color:#444;
}
.sl-badge {
position:absolute;
top:-6px;
right:-10px;
min-width:18px;
height:18px;
border-radius:999px;
background:#ff3b68;
color:#fff;
font-size:11px;
line-height:18px;
text-align:center;
padding:0 5px;
}
.sl-burger {
width:22px;
height:22px;
display:none;
flex-direction:column;
justify-content:space-between;
cursor:pointer;
}
.sl-burger span {
display:block;
height:2px;
border-radius:999px;
background:#444;
}
/* боковое меню */
.sl-side {
position:fixed;
top:0;
left:0;
bottom:0;
width:270px;
background:linear-gradient(180deg,#ffffff,#ffeaf5);
box-shadow:4px 0 30px rgba(0,0,0,0.15);
transform:translateX(-100%);
transition:transform .25s ease;
z-index:150;
padding:20px 18px 26px;
display:flex;
flex-direction:column;
gap:18px;
}
.sl-side.open { transform:translateX(0); }
.sl-side-header {
display:flex;
justify-content:space-between;
align-items:center;
}
.sl-side-close {
cursor:pointer;
font-size:24px;
line-height:1;
}
.sl-side-nav {
margin-top:10px;
display:flex;
flex-direction:column;
gap:6px;
}
.sl-side-link {
display:flex;
align-items:center;
gap:10px;
padding:10px 12px;
border-radius:14px;
text-decoration:none;
color:#333;
font-size:15px;
background:transparent;
transition:background .18s ease, transform .12s ease;
position:relative;
}
.sl-side-link-icon {
width:26px;
height:26px;
border-radius:999px;
background:#fff;
display:flex;
align-items:center;
justify-content:center;
box-shadow:0 4px 10px rgba(0,0,0,0.08);
font-size:16px;
}
.sl-side-link:hover {
background:rgba(255,255,255,0.8);
transform:translateX(2px);
}
.sl-side-section-title {
margin-top:4px;
margin-bottom:2px;
font-size:12px;
text-transform:uppercase;
letter-spacing:0.05em;
color:#9b8ca5;
}
.sl-badge-side {
position:absolute;
right:10px;
top:50%;
transform:translateY(-50%);
min-width:18px;
height:18px;
border-radius:999px;
background:#ff3b68;
color:#fff;
font-size:11px;
line-height:18px;
text-align:center;
padding:0 5px;
}
/* для авторизованных на мобилке прячем навигацию в шапке (есть бургер) */
@media (max-width:768px){
.sl-header-nav-auth { display:none; }
.sl-burger { display:flex; }
}
/* гостевая навигация видна всегда */
.sl-header-nav-guest { display:flex; }
main.sl-main {
max-width:900px;
margin:0 auto;
padding:16px;
padding-bottom:80px;
}
</style>
</head>
<body>
<header class="sl-header">
<div class="sl-header-inner">
<div style="display:flex;align-items:center;gap:12px;">
<?php if ($user_id): ?>
<div class="sl-burger" id="sl-burger">
<span></span><span></span><span></span>
</div>
<?php endif; ?>
<a href="/index.php" class="sl-logo">
<div class="sl-logo-heart">♥</div>
<span>SoftLove</span>
</a>
</div>
<nav class="sl-header-nav <?php echo $user_id ? 'sl-header-nav-auth' : 'sl-header-nav-guest'; ?>">
<?php if ($user_id): ?>
<a href="/browse.php" class="sl-header-link">Анкеты</a>
<a href="/matches.php" class="sl-header-link">
Совпадения <?= softlove_badge($unread_matches) ?>
</a>
<a href="/dialogs.php" class="sl-header-link">
Сообщения <?= softlove_badge($unread_messages) ?>
</a>
<a href="/friends.php" class="sl-header-link">
Друзья <?= softlove_badge($friend_requests) ?>
</a>
<a href="/gifts_inbox.php" class="sl-header-link">
Подарки <?= softlove_badge($unread_gifts) ?>
</a>
<a href="/profile.php" class="sl-header-link">Профиль</a>
<?php if ($is_admin): ?>
<a href="/admin/index.php" class="sl-header-link">Админка</a>
<?php endif; ?>
<a href="/logout.php" class="sl-header-link">Выход</a>
<?php else: ?>
<a href="/browse.php" class="sl-header-link">Анкеты</a>
<a href="/login.php" class="sl-header-link">
<button class="sl-header-btn sl-header-btn-outline">Войти</button>
</a>
<a href="/register.php" class="sl-header-link">
<button class="sl-header-btn sl-header-btn-primary">Регистрация</button>
</a>
<?php endif; ?>
</nav>
</div>
</header>
<?php if ($user_id): ?>
<aside class="sl-side" id="sl-side">
<div class="sl-side-header">
<div class="sl-logo">
<div class="sl-logo-heart">♥</div>
<span>SoftLove</span>
</div>
<div class="sl-side-close" id="sl-side-close">×</div>
</div>
<div class="sl-side-section-title">Навигация</div>
<nav class="sl-side-nav">
<a href="/browse.php" class="sl-side-link">
<div class="sl-side-link-icon">📡</div>
<span>Анкеты</span>
</a>
<a href="/matches.php" class="sl-side-link">
<div class="sl-side-link-icon">👥</div>
<span>Совпадения</span>
<?php if ($unread_matches > 0): ?>
<span class="sl-badge-side"><?= $unread_matches > 99 ? '99+' : $unread_matches ?></span>
<?php endif; ?>
</a>
<a href="/dialogs.php" class="sl-side-link">
<div class="sl-side-link-icon">✉️</div>
<span>Сообщения</span>
<?php if ($unread_messages > 0): ?>
<span class="sl-badge-side"><?= $unread_messages > 99 ? '99+' : $unread_messages ?></span>
<?php endif; ?>
</a>
<a href="/friends.php" class="sl-side-link">
<div class="sl-side-link-icon">🤝</div>
<span>Друзья</span>
<?php if ($friend_requests > 0): ?>
<span class="sl-badge-side"><?= $friend_requests > 99 ? '99+' : $friend_requests ?></span>
<?php endif; ?>
</a>
<a href="/gifts_inbox.php" class="sl-side-link">
<div class="sl-side-link-icon">🎁</div>
<span>Подарки</span>
<?php if ($unread_gifts > 0): ?>
<span class="sl-badge-side"><?= $unread_gifts > 99 ? '99+' : $unread_gifts ?></span>
<?php endif; ?>
</a>
<div class="sl-side-section-title">Профиль</div>
<a href="/profile.php" class="sl-side-link">
<div class="sl-side-link-icon">👤</div>
<span>Мой профиль</span>
</a>
<?php if ($is_admin): ?>
<a href="/admin/index.php" class="sl-side-link">
<div class="sl-side-link-icon">🛠</div>
<span>Админка</span>
</a>
<?php endif; ?>
<a href="/logout.php" class="sl-side-link">
<div class="sl-side-link-icon">🚪</div>
<span>Выход</span>
</a>
</nav>
</aside>
<script>
document.addEventListener('DOMContentLoaded',function(){
const burger = document.getElementById('sl-burger');
const side = document.getElementById('sl-side');
const close = document.getElementById('sl-side-close');
if (burger && side && close) {
burger.addEventListener('click',()=>side.classList.add('open'));
close.addEventListener('click',()=>side.classList.remove('open'));
}
});
</script>
<?php endif; ?>
<main class="sl-main">