CHONIE DEV CMS คืออะไร?
ระบบจัดการเนื้อหาเว็บไซต์ออนไลน์ สร้างด้วย PHP + MySQL ไม่ต้องใช้ Framework ติดตั้งง่าย เหมาะสำหรับ XAMPP และ Shared Hosting ทั่วไป
System Requirements
ตรวจสอบว่า server รองรับข้อกำหนดเหล่านี้ก่อนติดตั้ง
| รายการ | ขั้นต่ำ | แนะนำ | สถานะ |
|---|---|---|---|
| PHP Version | 7.4 | 8.1+ | ✓ จำเป็น |
| MySQL / MariaDB | MySQL 5.7 / MariaDB 10.3 | MySQL 8 / MariaDB 10.6 | ✓ จำเป็น |
| PDO + pdo_mysql | ต้องเปิด | — | ✓ จำเป็น |
| fileinfo extension | ต้องเปิด | — | ✓ จำเป็น |
| GD / Imagick | — | แนะนำ | ไม่บังคับ |
| Upload Max Size | 5MB | 20MB+ | ปรับได้ |
| PHP mail() | — | SMTP | สำหรับส่งอีเมล |
โครงสร้างไฟล์
├── install/
│ ├── install.php ← Install Wizard (ลบหลังติดตั้ง!)
│ └── schema.sql ← SQL สร้างตารางทั้งหมด
│
├── admin/ ← หลังบ้าน Admin Panel
│ ├── index.php ← Dashboard
│ ├── login.php
│ ├── logout.php
│ ├── products.php ← จัดการสินค้า + รูปภาพ
│ ├── design.php ← เลือก Template + ปรับสี
│ ├── settings.php ← ตั้งค่าเว็บ SEO ติดต่อ
│ ├── inquiries.php ← ดูฟอร์มสนใจสินค้า
│ ├── email.php ← ส่งอีเมล
│ ├── uploads/ ← รูปภาพสินค้า (chmod 755)
│ └── includes/
│ ├── config.php ← Auto-generated ตอนติดตั้ง
│ ├── auth.php ← Session / Login helper
│ └── layout.php ← Shared HTML layout
│
└── public/ ← หน้าเว็บสาธารณะ
├── index.php ← หน้าหลัก (dynamic theme)
├── api.php ← REST API endpoint
└── uploads/ ← (ใช้ symlink หรือ copy จาก admin)
ติดตั้งบน XAMPP (Local)
C:\xampp\htdocs\choniedev-cms\
| Field | ค่า XAMPP Default |
|---|---|
| Host | localhost |
| Database Name | choniedev_cms (ตั้งใหม่ได้) |
| Username | root |
| Password | (ว่างเปล่า) |
| URL | หน้า |
|---|---|
http://localhost/choniedev-cms/public/ | หน้าเว็บสาธารณะ |
http://localhost/choniedev-cms/admin/ | หลังบ้าน Admin |
ติดตั้งบน Shared Hosting
ALL PRIVILEGESchoniedev-cms/admin/uploads/ → 755
choniedev-cms/public/uploads/ → 755
# ถ้า 755 ยังไม่ได้ ลอง 775 หรือ 777
https://yourdomain.com/choniedev-cms/install/install.php
Install Wizard — 4 ขั้นตอน
สิ่งที่ต้องทำหลังติดตั้ง
เข้าสู่ระบบ Admin
| URL | รายละเอียด |
|---|---|
admin/login.php | หน้า Login |
admin/index.php | Dashboard (redirect อัตโนมัติ) |
Session จะหมดอายุเมื่อปิด browser หรือหลังจากไม่มีกิจกรรม — ระบบจะ redirect กลับหน้า Login อัตโนมัติ
Dashboard
หน้าแรกหลัง Login แสดงภาพรวมของร้านทั้งหมด
จัดการสินค้า
เพิ่ม แก้ไข ลบสินค้า และจัดการรูปภาพหลายรูปต่อสินค้า
➕ เพิ่มสินค้าใหม่
รูปแรกที่เลือกจะเป็น ★ รูปปก อัตโนมัติ (แสดงในการ์ดหน้าเว็บ)
รองรับ: JPG, PNG, WEBP, GIF — ขนาดไม่เกิน 5MB ต่อรูป
✏️ แก้ไขสินค้า
🔍 ค้นหาและกรอง
| ฟีเจอร์ | วิธีใช้ |
|---|---|
| ค้นหาชื่อ | พิมพ์ในช่อง Search แล้วกด Enter |
| กรองหมวดหมู่ | เลือก Dropdown แล้วกดปุ่มกรอง |
| เปิด/ปิดสินค้า | กดปุ่มสีเขียว/แดง ในคอลัมน์ "แสดง" ได้เลย |
| Pagination | 20 รายการ/หน้า กดเลขหน้าด้านล่าง |
ดีไซน์ & ธีม
หัวใจของระบบ — เปลี่ยนหน้าตาเว็บได้โดยไม่ต้องแตะโค้ด
🎨 เลือก Template
คลิก Template ที่ต้องการ ระบบจะเปลี่ยนสีและฟอนต์ให้ครบชุดทันที
| Template | โทนสี | ฟอนต์ | เหมาะสำหรับ |
|---|---|---|---|
| 🌑 Dark Gold | ดำ + ทอง | Noto Serif Thai | ร้านพระเครื่องหรูหรา คลาสสิค |
| 🌕 Ivory Gold | ครีม + ทอง | Playfair Display | ดูสะอาด อบอุ่น เป็นมิตร |
| 🌊 Midnight | น้ำเงินกรมท่า + เงิน | Cinzel | ดูดี มีสไตล์ ทันสมัย |
| 🌿 Forest Zen | เขียวมรกต + ทอง | Noto Serif Thai | ธรรมชาติ สงบ เรียบง่าย |
| 🌹 Rouge Noir | แดงเข้ม + ดำ | Cormorant Garamond | โดดเด่น กล้า มีเอกลักษณ์ |
🖌️ ปรับสีเอง
ปรับได้ 5 ค่า มี Live Preview แสดงให้เห็นก่อนบันทึก:
| ค่า | ผลลัพธ์ |
|---|---|
| สีพื้นหลัง (Background) | สีพื้นหลักของทุกหน้า |
| สีผิว Card / Navbar | สีกล่องสินค้า Navbar Sidebar |
| สีหลัก (Accent) | ปุ่ม ไฮไลต์ ข้อความสำคัญ |
| สีตัวอักษร | ข้อความหลักทุกจุด |
| สีตัวอักษรรอง | คำอธิบาย วันที่ Label รอง |
💻 Custom CSS
เพิ่ม CSS เองได้ไม่จำกัด — จะถูก inject ลงหน้าเว็บ public ทุกหน้า ตัวอย่าง:
/* ทำให้การ์ดมุมโค้งมากขึ้น */
.pcard { border-radius: 20px; }
/* เพิ่มเงาปุ่มสนใจ */
.btn-int { box-shadow: 0 4px 12px rgba(0,0,0,.3); }
/* ซ่อน Announcement bar */
.strip { display: none; }
ตั้งค่าเว็บไซต์
ฟอร์มสนใจสินค้า
ดูและจัดการ Inquiry ที่ลูกค้าส่งมาจากหน้าเว็บ
| การกระทำ | วิธีใช้ |
|---|---|
| ดูรายละเอียด | กดปุ่ม 👁️ เพื่อเปิดรายละเอียดครบ — ระบบจะ mark เป็น "อ่านแล้ว" อัตโนมัติ |
| กรองยังไม่อ่าน | กดแท็บ "ยังไม่อ่าน" ด้านบนตาราง |
| อ่านทั้งหมด | กดปุ่ม "อ่านทั้งหมด" — mark ทุกรายการเป็นอ่านแล้วพร้อมกัน |
| ตอบกลับ | ในหน้ารายละเอียด มีปุ่ม "ส่งอีเมลตอบ" เปิด mailto: อัตโนมัติ |
| ลบ | กดปุ่ม 🗑️ ยืนยันการลบก่อนดำเนินการ |
ส่งอีเมล
ส่งอีเมลหาลูกค้าหรือผู้ที่สนใจโดยตรงจาก Admin Panel
ระบบธีม — การทำงาน
ธีมถูก render แบบ Server-side ทุก request โดยอ่านค่าจาก Database
// 1. อ่านค่าจาก DB
$tpl = getSetting('active_template', 'dark_gold');
$primary = getSetting('theme_primary', '#c8a84b');
$bg = getSetting('theme_bg', '#0e0c0a');
// 2. Inject เป็น CSS Variables ใน <style>
:root {
--primary: = $primary ?>;
--bg: = $bg ?>;
--font-d: '= $font['display'] ?>', serif;
}
// 3. ทุก component ใช้ var(--primary), var(--bg) ฯลฯ
// 4. Custom CSS จาก DB ถูก inject ท้าย <style>
INSERT INTO templates (slug, name, description) VALUES
('my_theme', 'My Custom Theme', 'คำอธิบาย');
-- แล้วเพิ่ม preset ใน admin/design.php ส่วน $presets array
$fontMap = [
'dark_gold' => ['display'=>'Noto Serif Thai', 'gfont'=>'Noto+Serif+Thai:wght@400;700'],
'my_theme' => ['display'=>'Mitr', 'gfont'=>'Mitr:wght@400;600;700'],
];
API Reference
ไฟล์ public/api.php ให้บริการ JSON API สำหรับหน้าเว็บ
| Method | URL | ผลลัพธ์ |
|---|---|---|
| GET | api.php?action=products |
รายการสินค้าทั้งหมด (paginated) |
| GET | api.php?action=products&cat=1 |
กรองตาม category_id |
| GET | api.php?action=products&q=หลวงพ่อ |
ค้นหาตามชื่อ/รายละเอียด |
| GET | api.php?action=products&page=2 |
หน้าที่ 2 |
| GET | api.php?action=item&id=5 |
รายละเอียดสินค้า + รูปทั้งหมด |
| POST | api.php?action=interest |
ส่งฟอร์มสนใจสินค้า (JSON body) |
{
"items": [
{
"id": 1,
"title": "หลวงพ่อโสธร รุ่น 2536",
"price_fmt": "1,250",
"image_url": "http://localhost/choniedev-cms/admin/uploads/prana_xxx.jpg",
"is_featured": 1,
"img_count": 3
}
],
"total": 48,
"page": 1,
"pages": 4
}
{
"item_id": 5,
"name": "สมชาย ใจดี",
"email": "somchai@email.com",
"phone": "089-xxx-xxxx",
"message": "ขอสอบถามราคาเช่าครับ",
"contact_pref": "email",
"hp": "", // honeypot — ต้องว่างเสมอ
"_ts": 1716220000000, // timestamp (ms) กัน replay
"_rc": "03AGdBq..." // reCAPTCHA v3 token (optional)
}
ป้องกัน Bot / Spam — ฟอร์มสนใจสินค้า
ระบบมีการป้องกัน Bot หลายชั้น ทั้งฝั่ง JavaScript (client) และ PHP (server) ทำงานร่วมกัน
🔄 ขั้นตอนการตรวจสอบ (Flow)
⚙️ ตั้งค่า reCAPTCHA v3 (optional)
<!-- เพิ่มใน <head> -->
<script src="https://www.google.com/recaptcha/api.js?render=YOUR_SITE_KEY"></script>
// แก้ใน submitFrm() ฟังก์ชัน
grecaptcha.execute('YOUR_SITE_KEY', { action: 'interest_form' })
define('RECAPTCHA_SECRET', 'YOUR_SECRET_KEY');
📊 สรุปชั้นการป้องกันแต่ละระดับ
| ชั้น | ฝั่ง | ป้องกันอะไร | ต้องตั้งค่า |
|---|---|---|---|
| 🍯 Honeypot | JS + PHP | Bot ที่กรอก form อัตโนมัติ | ไม่ต้อง (built-in) |
| ⏱️ Rate Limit | JS + PHP | Bot ยิงซ้ำรัว, spam click | ไม่ต้อง (built-in) |
| 🔎 Spam Filter | JS + PHP | ข้อความ spam ลิงก์โฆษณา | ไม่ต้อง (built-in) |
| 🕐 Timestamp | PHP | Replay attack, scripted POST | ไม่ต้อง (built-in) |
| ✅ Validation | JS + PHP | ข้อมูลผิด format | ไม่ต้อง (built-in) |
| 🤖 reCAPTCHA v3 | JS + PHP | Bot ขั้นสูง, automated browser | ต้องขอ Key จาก Google |
แก้ปัญหาที่พบบ่อย
;extension=gd → extension=gd
# แล้ว Restart Apache
# XAMPP Windows — ไม่ต้องทำอะไร (ปกติผ่านเลย)
# Linux / cPanel
chmod 755 admin/uploads/
chmod 755 public/uploads/
# ถ้ายังไม่ได้ ลอง:
chmod 775 admin/uploads/
# ตรวจ config.php
admin/includes/config.php ← ต้องมีไฟล์นี้หลังติดตั้ง
# เปิด PHP errors ชั่วคราว (เพิ่มต้นไฟล์ index.php)
ini_set('display_errors', 1);
error_reporting(E_ALL);
# php.ini (XAMPP)
SMTP = smtp.gmail.com
smtp_port = 587
sendmail_from = your@gmail.com
# บรรทัดแรกใน public/api.php
require_once __DIR__ . '/../admin/includes/config.php';
-- รัน SQL นี้ใน phpMyAdmin
UPDATE admin_users
SET password = '$2y$12$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi'
WHERE username = 'admin';
-- รหัสผ่านใหม่จะเป็น: password
หากพบปัญหาอื่นๆ ตรวจสอบ PHP error log เป็นอันดับแรกเสมอครับ
CHONIE DEV CMS v1.1 — สร้างด้วย PHP + MySQL + ❤️