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ệ
81 lines
3.2 KiB
Markdown
81 lines
3.2 KiB
Markdown
# Sách Giáo Khoa Việt Nam — sachgiaokhoa.org
|
|
|
|
Website tra cứu sách giáo khoa Việt Nam (lớp 1 → 12) xây dựng bằng **CodeIgniter 4**.
|
|
|
|
## Tính năng
|
|
|
|
- **Kho sách**: ~1081 đầu sách từ API nguồn, lọc theo lớp / môn học / nhà xuất bản + tìm kiếm, phân trang
|
|
- **Trang chi tiết**: đầy đủ metadata (tác giả, chủ biên, NXB, số trang, dung lượng, ISBN, giá, phiên bản PDF, ngày tạo)
|
|
- **Xem trực tuyến**: trình xem PDF (pdf.js) nhúng, stream qua proxy `/media/pdf/{id}` (chế độ inline, không tải)
|
|
- **Tải xuống có kiểm soát**: trang `/tai-xuong/{id}` với **captcha (GD tự vẽ)** + **đếm ngược 15s** + **token một lần hết hạn 5 phút**
|
|
- **Pháp lý**: Miễn trừ trách nhiệm, Điều khoản sử dụng, Chính sách bảo mật, Bản quyền & DMCA, Liên hệ/Báo cáo vi phạm (honeypot chống spam)
|
|
- **MongoDB (mongo-harness)**: cache danh mục sách (TTL 6h), token tải về, thống kê lượt tải, tin nhắn liên hệ
|
|
|
|
## Yêu cầu
|
|
|
|
- PHP >= 8.1 với các extension: `mongodb`, `gd`, `curl`, `intl`
|
|
- MongoDB tại `harness-mongo:27017` (cấu hình trong `.env` → `mongo.uri`)
|
|
- Composer
|
|
|
|
## Cài đặt
|
|
|
|
```bash
|
|
composer install
|
|
php spark serve # test nhanh tại http://localhost:8080
|
|
```
|
|
|
|
Cấu hình chính trong `.env`:
|
|
|
|
```dotenv
|
|
api.baseUrl / api.token # API sách nguồn (kèm Bearer token)
|
|
mongo.uri / mongo.db # MongoDB cache
|
|
download.countdown # số giây đếm ngược trước khi cho tải
|
|
```
|
|
|
|
## Chạy local với Devilbox (sachgiaokhoaorg.local)
|
|
|
|
1. Copy (hoặc symlink) project vào thư mục `data/www` của Devilbox:
|
|
|
|
```bash
|
|
# ví dụ devilbox ở ~/devilbox
|
|
ln -s /root/sachgiaokhoaorg ~/devilbox/data/www/sachgiaokhoaorg
|
|
```
|
|
|
|
2. Trong `.env` giữ: `app.baseURL = 'http://sachgiaokhoaorg.local/'`
|
|
|
|
3. Thêm vào file hosts trên máy PC:
|
|
|
|
```
|
|
127.0.0.1 sachgiaokhoaorg.local
|
|
```
|
|
|
|
4. Vào container PHP của devilbox, đảm bảo extension `mongodb` + `gd` được bật, rồi:
|
|
|
|
```bash
|
|
cd /shared/httpd/sachgiaokhoaorg
|
|
composer install
|
|
```
|
|
|
|
5. Mở http://sachgiaokhoaorg.local — document root trỏ vào `public/`.
|
|
|
|
> **Lưu ý MongoDB**: site connect tới `harness-mongo:27017`. Khi chạy trên PC cá nhân, đổi `mongo.uri` trong `.env` về MongoDB local của devilbox (`mongodb://mongo:mongo@mongo:27017`) hoặc Mongo Atlas.
|
|
|
|
## Cấu trúc chính
|
|
|
|
```
|
|
app/
|
|
Controllers/Books.php # danh sách + chi tiết + viewer
|
|
Controllers/Media.php # proxy cover & pdf (inline)
|
|
Controllers/Download.php # captcha + countdown + token download
|
|
Controllers/Pages.php # trang tĩnh + contact
|
|
Libraries/BookApi.php # client API nguồn + MongoDB cache
|
|
Libraries/Mongo.php # connection mongo-harness
|
|
Libraries/Captcha.php # captcha GD tự vẽ
|
|
Views/ # layout + views (tiếng Việt)
|
|
public/assets/pdfjs/ # pdf.js 3.11.174 (self-hosted)
|
|
```
|
|
|
|
## Pháp lý
|
|
|
|
Website phi thương mại, chỉ **nhúng/liên kết** nội dung từ API nguồn phục vụ tra cứu. Mọi bản quyền sách thuộc về các Nhà xuất bản & Bộ GD-ĐT. Báo cáo vi phạm: `/lien-he` → gỡ trong 72h (DMCA).
|