Sách Giáo Khoa Việt Nam - sachgiaokhoa.org
CodeIgniter 4 website:
- Catalog 999 SGK (lớp 1-12) từ API, lọc theo lớp/môn/NXB, tìm kiếm
- Trang chủ grouped browse (bậc học -> lớp -> môn, ưu tiên môn quan trọng)
- Chi tiết sách: metadata đầy đủ, cover nghệ thuật /thumb/{W}x{H}/
- Đọc online qua gate captcha + countdown, PDF viewer pdf.js
- Download: captcha + token một lần + auto cache-bust version
- Tự đồng bộ catalog/cover khi API thay đổi (refresh:catalog)
- Legal: DMCA, miễn trừ trách nhiệm, điều khoản, bảo mật, liên hệ
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
<?= $this->extend('layouts/main') ?>
|
||||
<?= $this->section('content') ?>
|
||||
|
||||
<div class="hero">
|
||||
<h1>Sách Giáo Khoa Việt Nam — Lớp 1 đến lớp 12</h1>
|
||||
<p>Kho tra cứu đầy đủ <?= number_format($total) ?> đầu sách giáo khoa thuộc mọi bộ sách: Kết nối tri thức với cuộc sống, Chân trời sáng tạo, Cánh Diều, Giáo dục Việt Nam... Chọn lớp hoặc môn học để bắt đầu.</p>
|
||||
<div class="stats">
|
||||
<div class="stat"><b><?= number_format($total) ?></b><span>Đầu sách</span></div>
|
||||
<div class="stat"><b>12</b><span>Khoảng lớp</span></div>
|
||||
<div class="stat"><b><?= count($publishers) ?></b><span>Nhà xuất bản / bộ sách</span></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php foreach ($levels as $lv): ?>
|
||||
<section class="level-section">
|
||||
<h2 class="level-title"><?= esc($lv['label']) ?></h2>
|
||||
<div class="grade-grid">
|
||||
<?php foreach ($lv['grades'] as $g): ?>
|
||||
<div class="grade-card">
|
||||
<div class="grade-covers">
|
||||
<?php foreach (array_slice($g['covers'], 0, 5) as $c): ?>
|
||||
<a href="/sach/<?= esc($c['id']) ?>" title="<?= esc($c['title']) ?>">
|
||||
<img loading="lazy" src="/thumb/240x320/<?= esc($c['id']) ?>.jpg?v=<?= media_version() ?>" alt="<?= esc($c['title']) ?>"
|
||||
onerror="this.parentNode.style.display='none'">
|
||||
</a>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
<a class="grade-head" href="/?lop=<?= $g['grade'] ?>">
|
||||
<span class="grade-num">Lớp <?= $g['grade'] ?></span>
|
||||
<span class="grade-count"><?= $g['total'] ?> sách</span>
|
||||
</a>
|
||||
<div class="subject-pills">
|
||||
<?php $i = 0; foreach ($g['subjects'] as $s => $n): if ($i++ >= 8): ?>
|
||||
<a class="pill more" href="/?lop=<?= $g['grade'] ?>">+ <?= count($g['subjects']) - 8 ?> môn khác</a>
|
||||
<?php break; endif; ?>
|
||||
<a class="pill" href="/?lop=<?= $g['grade'] ?>&mon=<?= urlencode($s) ?>"><?= esc($s) ?></a>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
</section>
|
||||
<?php endforeach; ?>
|
||||
|
||||
<section class="level-section">
|
||||
<h2 class="level-title">Theo nhà xuất bản / bộ sách</h2>
|
||||
<div class="pub-grid">
|
||||
<?php foreach ($publishers as $p => $n): ?>
|
||||
<a class="pub-card" href="/?nxb=<?= urlencode($p) ?>">
|
||||
<span class="pub-name"><?= esc($p) ?></span>
|
||||
<span class="pub-count"><?= $n ?> đầu sách</span>
|
||||
</a>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<?= $this->endSection() ?>
|
||||
Reference in New Issue
Block a user