Файл: new_top/modules/cat.php
Строк: 118
<?php
/**
* Categories — list and category top
*/
declare(strict_types=1);
$catId = (int)($_GET['id'] ?? 0);
$title = Database::fetchColumn('SELECT title FROM config WHERE id = 1') ?: 'Top';
$pfMax = (int)(Database::fetchColumn('SELECT pf_max FROM config WHERE id = 1') ?: 100);
if ($pfMax < 1) $pfMax = 100;
// ---- Single category ----
if ($catId > 0) {
$cat = Database::fetch('SELECT * FROM cat WHERE id = ?', [$catId]);
if (!$cat) {
http_response_code(404);
echo 'Категория не найдена';
exit;
}
$platforms = Database::fetchAll(
'SELECT p.*, c.name AS cat_name FROM platforms p
LEFT JOIN cat c ON c.id = p.cat_id
WHERE p.mode = 0 AND p.ban = 0 AND p.cat_id = ?
ORDER BY p.hs DESC, p.ht DESC
LIMIT ' . $pfMax,
[$catId]
);
$count = count($platforms);
$totalInCat = (int) Database::fetchColumn(
'SELECT COUNT(*) FROM platforms WHERE mode = 0 AND ban = 0 AND cat_id = ?',
[$catId]
);
?><!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
<?= pwa_meta() ?>
<title><?= e($cat['name']) ?> — <?= e($title) ?></title>
<link rel="stylesheet" href="/assets/css/style.css">
</head>
<body>
<div class="app">
<header class="topbar">
<div class="topbar-brand"><div class="logo">T</div><span><?= e($title) ?></span></div>
<nav class="topbar-nav">
<a href="/">Топ</a>
<a href="/?module=cat" class="active">Категории</a>
<a href="/?module=search">Поиск</a>
<a href="/?module=rules">Правила</a>
<a href="/?module=office">Кабинет</a>
<?php if (!empty($_SESSION['user_level']) && (int)$_SESSION['user_level'] >= 9): ?>
<a href="/?module=admin">Админ</a>
<?php endif; ?>
</nav>
</header>
<h1 class="page-title"><?= e($cat['name']) ?></h1>
<?= Ads::render('cat_top') ?>
<?= Ads::render('global_footer') ?>
<p class="page-sub">
<?= $totalInCat ?> <?= $totalInCat === 1 ? 'площадка' : ($totalInCat >= 2 && $totalInCat <= 4 ? 'площадки' : 'площадок') ?>
· сортировка по хостам
· <a href="/?module=cat">все категории</a>
</p>
<?php if ($count === 0): ?>
<div class="empty">
<div class="empty-icon">📂</div>
<div>В этой категории пока нет площадок</div>
<a href="/?module=cat" class="btn btn-ghost" style="margin-top:14px">← К категориям</a>
</div>
<?php else: ?>
<div class="rank-list">
<?php foreach ($platforms as $i => $p):
$pos = $i + 1;
$isGold = (int)$p['gold'] > time();
$cardClass = 'rank-card';
if ($pos === 1) $cardClass .= ' top1';
elseif ($pos === 2) $cardClass .= ' top2';
elseif ($pos === 3) $cardClass .= ' top3';
if ($isGold) $cardClass .= ' gold-card';
?>
<article class="<?= $cardClass ?>">
<div class="rank-pos"><?= $pos ?></div>
<div class="rank-body">
<div class="rank-url">
<a href="/in/<?= (int)$p['id'] ?>" target="_blank" rel="nofollow noopener"><?= e($p['url']) ?></a>
<?php if ($isGold): ?><span class="badge-gold">★ Gold</span><?php endif; ?>
</div>
<?php if ($p['message'] !== ''): ?>
<div class="rank-msg"><?= e($p['message']) ?></div>
<?php endif; ?>
<div class="rank-meta">
<a class="chip" href="/?module=stats&id=<?= (int)$p['id'] ?>">📊 стат</a>
</div>
</div>
<div class="rank-stats">
<div class="stat-label">хосты</div>
<div class="stat-hs"><?= number_format((int)$p['hs'], 0, '', ' ') ?></div>
<div class="stat-ht"><?= number_format((int)$p['ht'], 0, '', ' ') ?> хитов</div>
</div>
</article>
<?php endforeach; ?>
</div>
<?php endif; ?>
<footer class="site-footer"><a href="/">← Топ-<?= $pfMax ?></a></footer>
</div>
<?= pwa_register() ?>
</body>
</html>
<?php
exit;
}
// ---- List of categories ----
$cats = Database::fetchAll(
'SELECT c.*,
(SELECT COUNT(*) FROM platforms p WHERE p.cat_id = c.id AND p.mode = 0 AND p.ban = 0) AS cnt
FROM cat c
ORDER BY c.sort, c.name'
);
?><!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
<?= pwa_meta() ?>
<title>Категории — <?= e($title) ?></title>
<link rel="stylesheet" href="/assets/css/style.css">
</head>
<body>
<div class="app">
<header class="topbar">
<div class="topbar-brand"><div class="logo">T</div><span><?= e($title) ?></span></div>
<nav class="topbar-nav">
<a href="/">Топ</a>
<a href="/?module=cat" class="active">Категории</a>
<a href="/?module=search">Поиск</a>
<a href="/?module=rules">Правила</a>
<a href="/?module=office">Кабинет</a>
<?php if (!empty($_SESSION['user_level']) && (int)$_SESSION['user_level'] >= 9): ?>
<a href="/?module=admin">Админ</a>
<?php endif; ?>
</nav>
</header>
<h1 class="page-title">Категории</h1>
<p class="page-sub">Выберите раздел рейтинга</p>
<?= Ads::render('cat_top') ?>
<?= Ads::render('global_footer') ?>
<?php if (!$cats): ?>
<div class="empty"><div>Категории не созданы</div></div>
<?php else: ?>
<div class="rank-list">
<?php foreach ($cats as $c): ?>
<a href="/?module=cat&id=<?= (int)$c['id'] ?>" class="rank-card" style="text-decoration:none;color:inherit;grid-template-columns:1fr auto">
<div class="rank-body">
<div class="rank-url"><?= e($c['name']) ?></div>
<div class="rank-msg">
<?php
$n = (int)$c['cnt'];
echo $n . ' ' . ($n === 1 ? 'площадка' : ($n >= 2 && $n <= 4 ? 'площадки' : 'площадок'));
?>
</div>
</div>
<div class="rank-stats">
<div class="stat-hs" style="font-size:1.1rem"><?= (int)$c['cnt'] ?></div>
<div class="stat-label">в топе</div>
</div>
</a>
<?php endforeach; ?>
</div>
<?php endif; ?>
<footer class="site-footer"><a href="/">← Топ-<?= $pfMax ?></a></footer>
</div>
</body>
</html>