Вход Регистрация
Файл: new_top/modules/home.php
Строк: 145
<?php
/**
 * Home — Top-N with pagination, news, categories strip
 */

declare(strict_types=1);

$title Database::fetchColumn('SELECT title FROM config WHERE id = 1') ?: 'Top System';
$pfMax = (int)(Database::fetchColumn('SELECT pf_max FROM config WHERE id = 1') ?: 100);
if (
$pfMax 1) {
    
$pfMax 100;
}

$perPage min(20$pfMax);
$page max(1, (int)($_GET['page'] ?? 1));

$totalActive = (int) Database::fetchColumn(
    
'SELECT COUNT(*) FROM platforms WHERE mode = 0 AND ban = 0'
);
$maxShow min($totalActive$pfMax);
$maxPage max(1, (int)ceil($maxShow $perPage));
if (
$page $maxPage) {
    
$page $maxPage;
}
$offset = ($page 1) * $perPage;
$limit min($perPagemax(0$maxShow $offset));

$platforms = [];
if (
$limit 0) {
    
$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 
         ORDER BY p.hs DESC, p.ht DESC 
         LIMIT ' 
. (int)$offset ', ' . (int)$limit
    
);
}
$count count($platforms);

$cats Database::fetchAll(
    
'SELECT c.id, c.name,
        (SELECT COUNT(*) FROM platforms p WHERE p.cat_id = c.id AND p.mode = 0 AND p.ban = 0) AS cnt
     FROM cat c
     WHERE (SELECT COUNT(*) FROM platforms p WHERE p.cat_id = c.id AND p.mode = 0 AND p.ban = 0) > 0
     ORDER BY c.sort, c.name
     LIMIT 12'
);

try { 
$news Stats::latestNews(3); } catch (Throwable $e) { $news = []; }

?><!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>Топ-<?= (int)$pfMax ?> — <?= 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="/" class="active">Топ</a>
            <a href="/?module=cat">Категории</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">Топ-<?= (int)$pfMax ?></h1>
    <p class="page-sub">
        Лучшие площадки по хостам
        <?php if ($totalActive 0): ?> · в рейтинге <?= $totalActive ?><?php endif; ?>
        <?php if ($maxPage 1): ?> · стр. <?= $page ?>/<?= $maxPage ?><?php endif; ?>
    </p>

    <?php try { echo Ads::render('home_top'); } catch (Throwable $e) {} ?>

    <div class="actions" style="margin-bottom:14px">
        <a class="btn btn-accent btn-sm" href="/?module=rand">🎲 Случайный сайт</a>
        <a class="btn btn-ghost btn-sm" href="/?module=rules">Правила</a>
        <a class="btn btn-ghost btn-sm" href="/?module=search">Поиск</a>
    </div>

    <?php if ($news): ?>
    <div class="card" style="margin-bottom:14px">
        <h2 style="margin-bottom:10px">Новости</h2>
        <?php foreach ($news as $n): ?>
            <div style="padding:10px 0;border-bottom:1px solid var(--border)">
                <strong><?= e($n['title']) ?></strong>
                <div class="text-muted" style="font-size:.78rem;margin:4px 0"><?= date('d.m.Y H:i', (int)$n['time_add']) ?></div>
                <div style="font-size:.9rem;color:var(--text-muted)"><?= nl2br(e(mb_substr($n['text'], 0280))) ?></div>
            </div>
        <?php endforeach; ?>
    </div>
    <?php endif; ?>

    <?php if ($cats): ?>
    <div class="tabs" style="margin-bottom:14px">
        <a class="active" href="/">Все</a>
        <?php foreach ($cats as $c): ?>
            <a href="/?module=cat&id=<?= (int)$c['id'?>"><?= e($c['name']) ?></a>
        <?php endforeach; ?>
        <a href="/?module=cat">Ещё →</a>
    </div>
    <?php endif; ?>

    <?php if ($count === 0): ?>
        <div class="empty">
            <div class="empty-icon">📡</div>
            <div>Список площадок пуст</div>
            <p class="text-muted" style="margin-top:8px;font-size:.85rem">Добавьте первую через личный кабинет</p>
            <a href="/?module=office" class="btn btn-primary" style="margin-top:16px">Открыть кабинет</a>
        </div>
    <?php else: ?>
        <div class="rank-list">
            <?php foreach ($platforms as $i => $p):
                
$pos $offset $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';
            
?>
                <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">
                            <?php if (!empty($p['cat_name'])): ?>
                                <a class="chip" href="/?module=cat&id=<?= (int)$p['cat_id'?>"><?= e($p['cat_name']) ?></a>
                            <?php endif; ?>
                            <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 if ($maxPage 1): ?>
        <div class="actions" style="justify-content:center;margin-top:16px;flex-wrap:wrap">
            <?php if ($page 1): ?>
                <a class="btn btn-ghost btn-sm" href="/?page=<?= $page 1 ?>">← Назад</a>
            <?php endif; ?>
            <span class="text-muted" style="padding:8px 12px;font-size:.85rem"><?= $page ?> / <?= $maxPage ?></span>
            <?php if ($page $maxPage): ?>
                <a class="btn btn-ghost btn-sm" href="/?page=<?= $page 1 ?>">Вперёд →</a>
            <?php endif; ?>
        </div>
        <?php endif; ?>
    <?php endif; ?>


    <?php try { echo Ads::render('home_bottom'); } catch (Throwable $e) {} ?>
    <?php try { echo Ads::render('global_footer'); } catch (Throwable $e) {} ?>

    <footer class="site-footer">
        Топ-<?= (int)$pfMax ?> · <a href="/?module=cat">Категории</a> · <a href="/?module=rules">Правила</a>
    </footer>
</div>
<?= pwa_register() ?>
</body>
</html>
Онлайн: 2
Реклама