Tổng quan về S-Cart

Sửa trên GitHub
  _____  _____     ___  _  _   _____ 
 / ____|  __ \   |__ \| || | |___  |
| |  __| |__) |     ) | || |_   / / 
| | |_ |  ___/     / /|__   _| / /  
| |__| | |        / /_   | |  / /   
 \_____|_|       |____|  |_| /_/    

🌐 Ngôn ngữ: 🇻🇳 Tiếng Việt (hiện tại) · 🇬🇧 English

S-Cart

Nền tảng thương mại điện tử mã nguồn mở, miễn phí cho tất cả mọi người — doanh nghiệp, cá nhân, lập trình viên và sinh viên. Xây dựng trên hệ sinh thái GP247 (Laravel) với cấu trúc rõ ràng, thân thiện với AI agent.

composer create-project gp247/s-cart

🏠 Trang chủ · 🚀 Demo · 📚 Tài liệu GP247 · 🤖 Skill agent GP247 · 💬 Nhóm Facebook

Packagist Downloads Latest Stable Version License Ask DeepWiki


📖 Mục lục


🎯 Giới thiệu tổng quan

S-Cart là dự án website thương mại điện tử miễn phí tốt nhất dành cho cá nhân và doanh nghiệp, được xây dựng trên hệ sinh thái GP247 (nền tảng Laravel Framework) và các công nghệ mới nhất.

Mục tiêu của chúng tôi là "Hiệu quả và thân thiện cho tất cả mọi người":

Tiêu chí Ý nghĩa
Hiệu quả Đáp ứng ngay cả những yêu cầu nhỏ nhất của khách hàng.
Thân thiện Dễ sử dụng, dễ bảo trì, dễ phát triển.
Tất cả mọi người Doanh nghiệp, cá nhân, lập trình viên, sinh viên.
Thân thiện với AI agent Cấu trúc rõ ràng, tài liệu và skill chuẩn hoá để AI agent dễ hiểu dự án và hỗ trợ phát triển.

Công nghệ S-Cart 3.x

Tầng Công nghệ
Hệ sinh thái GP247
Framework Laravel 13.x
Giao diện Tailwind CSS 4

🖼️ Hình ảnh minh họa

Ảnh minh họa S-Cart 1

Ảnh minh họa S-Cart 2


✨ Các chức năng

🧩 Nền tảng & trải nghiệm nhà phát triển

  • Xây dựng gói plugin theo mô hình HMVC
  • Hỗ trợ nâng cấp và vá lỗi S-Cart qua dòng lệnh
  • Tài liệu đầy đủ cho nhà phát triển và khách hàng
  • Thư viện trực tuyến cho plugin và template
  • API bảo mật cho ứng dụng và tích hợp di động

🛒 Website bán hàng

Nhóm Khả năng
Thương mại Giỏ hàng, đơn hàng, sản phẩm, khách hàng
Bản địa hoá Đa ngôn ngữ, đa tiền tệ
Nội dung (CMS) Danh mục, tin tức, trang nội dung
Tiện ích mở rộng Plugin thanh toán, phương thức vận chuyển, hệ thống giảm giá, tính thuế
Plugin chuyên nghiệp Multi-vendor, Multi-store

🛠️ Quản trị

Nhóm Khả năng
Truy cập & bảo mật Phân quyền theo vai trò (quản trị viên, quản lý, marketing…), ghi nhật ký đầy đủ, kiểm soát truy cập, xác thực, CAPTCHA
Công cụ kinh doanh Quản lý sản phẩm, xử lý đơn hàng, quản lý khách hàng, phân tích & thống kê, theo dõi hoạt động

🚀 Cài đặt nhanh

Muốn nhanh nhất? Chọn Phương pháp 1 (Composer) — chỉ một lệnh, không cần cấu hình server phức tạp ngoài PHP + MySQL.

Phương pháp 1 — Composer (khuyến nghị)

# 1. Tạo dự án
composer create-project gp247/s-cart

# 2. Kiểm tra .env (thông tin database). Nếu chưa có APP_KEY, tạo bằng:
php artisan key:generate

# 3. Khởi tạo S-Cart
php artisan gp247:install

# 4. (Tùy chọn) Cài dữ liệu mẫu
php artisan gp247:shop-sample

Phương pháp 2 — Git clone

# 1. Clone
git clone https://github.com/gp247net/s-cart.git
cd s-cart

# 2. Tạo file .env & cài dependencies
cp .env.example .env
php artisan key:generate
composer install

Cấu hình database trong .env:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=your_database_name
DB_USERNAME=your_username
DB_PASSWORD=your_password

Sau đó khởi tạo:

php artisan gp247:install
php artisan gp247:shop-sample   # tùy chọn, dữ liệu mẫu

Phương pháp 3 — Docker

Hỗ trợ từ S-Cart 2. Không cần cài PHP/Composer/MySQL trên máy — chỉ cần Docker. Có hai file cấu hình tách biệt rõ ràng, dùng đúng file cho đúng môi trường:

File Môi trường
docker-compose.yml dev (máy cá nhân)
docker-compose.prod.yml prod (server)

Cài đặt DEV

git clone https://github.com/gp247net/s-cart.git
cd s-cart
cp .env.example .env
docker compose up -d --build
docker compose exec app php artisan key:generate
docker compose exec app php artisan gp247:install --force=1
docker compose exec app php artisan gp247:shop-sample   # tùy chọn

Truy cập website: http://localhost:8000

Cài đặt PROD

git clone https://github.com/gp247net/s-cart.git
cd s-cart
cp .env.example .env
# Cấu hình .env cho prod: APP_ENV, DB_*, SC_DOCKER_WWWUSER/SC_DOCKER_WWWGROUP — xem DOCKER_vi.md
docker compose -f docker-compose.prod.yml up -d --build
docker compose -f docker-compose.prod.yml exec app php artisan key:generate
docker compose -f docker-compose.prod.yml exec app php artisan gp247:install --force=1
docker compose -f docker-compose.prod.yml exec app php artisan gp247:shop-sample   # tùy chọn
docker compose -f docker-compose.prod.yml run --rm node                    # build assets CSS/JS

⚠️ Trên prod luôn nhớ thêm -f docker-compose.prod.yml, nếu không sẽ vô tình chạy nhầm cấu hình dev (bật debug, chạy root, cài Xdebug…) — xem chi tiết sự cố này ở Q&A trong DOCKER_vi.md.

Hướng dẫn đầy đủ, từng bước, cùng phần Q&A xử lý sự cố chi tiết cho cả dev lẫn prod, xem tại DOCKER_vi.md.

🔐 Quyền thư mục

Nếu cài đặt bằng Phương pháp 1 hoặc 2 (không dùng Docker), đảm bảo các thư mục sau có quyền ghi, nếu không việc cài đặt và các tính năng khác sẽ không hoạt động chính xác:

app/GP247 · public/GP247 · public/vendor · resources/views/vendor · storage · vendor


📂 Cấu trúc dự án

Cấu trúc thư mục cho website sử dụng GP247 ((+) = do GP247 tạo/quản lý):

Website-folder/
│
├── app
│     └── GP247
│           ├── Core(+)       // Tùy chỉnh controller của Core
│           ├── Helpers(+)    // Tự động tải Helpers/*.php để nạp vào hệ thống
│           ├── Front(+)      // Tùy chỉnh controller của GP247/Front
│           ├── Shop(+)       // Tùy chỉnh controller của GP247/Shop
│           ├── Plugins(+)    // php artisan gp247:make-plugin --name=NameOfPlugin
│           └── Templates(+)  // php artisan gp247:make-template --name=NameOfTemplate
├── public
│     └── GP247
│           ├── Core(+)
│           ├── Plugins(+)
│           └── Templates(+)
├── resources
│     └── views/vendor
│           ├── gp247-admin(+)        // Tùy chỉnh core admin
│           ├── gp247-shop-admin(+)   // Tùy chỉnh Shop admin
│           └── gp247-front-admin(+)  // Tùy chỉnh Front admin
├── vendor
│     ├── gp247/core
│     ├── gp247/front
│     └── gp247/shop
└── ...

❓ Câu hỏi thường gặp

📖 Tham chiếu dòng lệnh đầy đủ. Các lệnh bên dưới chỉ bao các trường hợp thông dụng. Xem tất cả lệnh artisan của GP247 cùng tùy chọn và ví dụ trong tài liệu chính thức: Tiếng Việt · English.

Làm sao xem phiên bản S-Cart đang cài?

php artisan gp247:info

Làm sao cập nhật S-Cart?

Cập nhật từng gói bằng Composer:

composer update gp247/core
composer update gp247/front
composer update gp247/shop

Sau đó chạy lệnh refresh an toàn, không phá dữ liệu (cập nhật core, cập nhật schema shop nếu có module shop, và rebuild cache):

php artisan gp247:update

Tùy chọn — cập nhật lại file ngôn ngữ. Mặc định gp247:update giữ nguyên bản dịch của bạn. Thêm --overwrite-lang để chạy thêm gp247:language-update, lệnh này kéo bản dịch mới nhất và ghi đè mọi chuỗi ngôn ngữ bạn đã sửa:

php artisan gp247:update --overwrite-lang

Tùy chọn — cập nhật lại asset/view đã publish lên bản mới nhất. composer updategp247:update chỉ cập nhật code trong vendor/; các file đã được copy ra public/GP247app/GP247 không tự động được ghi đè. Nếu bản phát hành mới có thay đổi CSS/JS đã build sẵn hoặc template/view mặc định và bạn muốn áp dụng lên site, hãy publish lại kèm --force:

php artisan vendor:publish --tag=gp247:core-public --force    # -> public/GP247 (build admin: CSS/JS, ...)
php artisan vendor:publish --tag=gp247:front-public --force   # -> public/GP247/Templates/GP247Front (CSS/JS storefront)
php artisan vendor:publish --tag=gp247:front-view --force     # -> app/GP247/Templates/GP247Front (view template mặc định)

⚠️ --force sẽ ghi đè các file ở thư mục đích — bao gồm cả những tùy chỉnh cục bộ bạn đã sửa ở đó (logo/ảnh tùy biến, file Blade template đã chỉnh, v.v.). Hãy backup public/GP247app/GP247 trước, và chỉ publish đúng tag bạn thực sự cần.

Bạn cũng có thể gộp bước re-publish vào ngay lệnh refresh bằng option tùy chọn --publish=<tokens> (mặc định không publish gì). Chỉ core-public là an toàn (asset admin đã build); các token view/template sẽ ghi đè tùy biến của bạn, nên hãy backup trước:

php artisan gp247:update --publish=core-public          # an toàn: làm mới CSS/JS admin
php artisan gp247:update --publish=core-public,front-view # đồng thời ghi đè template storefront (PHÁ DỮ LIỆU)

gp247:update không có cờ --force — tự gõ token phá-dữ-liệu chính là đồng thuận, và chạy tương tác vẫn cảnh báo và hỏi xác nhận. Xem tài liệu CLI để biết bảng đầy đủ token → đích → mức độ ảnh hưởng.

Làm sao tạo plugin mới?

php artisan gp247:make-plugin --name=PluginName

Tạo kèm tệp zip để phân phối:

php artisan gp247:make-plugin --name=PluginName --download=1

Làm sao tạo template mới?

php artisan gp247:make-template --name=TemplateName

Tạo kèm tệp zip để phân phối:

php artisan gp247:make-template --name=TemplateName --download=1

Làm sao tùy chỉnh cấu hình upload (lfm)?

php artisan vendor:publish --tag=config-lfm

Làm sao tùy chỉnh giao diện quản trị?

Mỗi package publish view quản trị vào riêng một thư mục views/vendor/<namespace> — chỉ publish đúng tag bạn cần override:

php artisan vendor:publish --tag=gp247:core-view        # -> views/vendor/gp247-admin
php artisan vendor:publish --tag=gp247:front-admin      # -> views/vendor/gp247-front-admin
php artisan vendor:publish --tag=gp247:shop-view-admin  # -> views/vendor/gp247-shop-admin

Dùng thêm --force nếu cần ghi đè các file đã publish từ trước.

Làm sao tùy chỉnh template mặc định?

php artisan vendor:publish --tag=gp247:front-view       # -> app/GP247/Templates/GP247Front
php artisan vendor:publish --tag=gp247:front-public     # -> public/GP247/Templates/GP247Front
php artisan vendor:publish --tag=gp247:shop-view-front  # -> app/GP247/Templates/GP247Front

Dùng thêm --force nếu cần ghi đè các file đã publish từ trước.

Làm sao ghi đè các hàm helper gp247_*?

  1. Thêm danh sách các hàm bạn muốn ghi đè vào config/gp247_functions_except.php
  2. Tạo các tệp php mới chứa các hàm mới trong thư mục app/GP247/Helpers, ví dụ app/GP247/Helpers/myfunction.php

Làm sao ghi đè (override) controller của GP247/Core, GP247/Front, GP247/Shop?

S-Cart cho phép ghi đè toàn bộ controller (kể cả controller API) trong GP247/Core, GP247/Front, GP247/Shop theo cùng một cơ chế: tạo controller tương ứng trong app/GP247/{Core|Front|Shop}, extend lại controller gốc, và thêm App vào phía trước namespace gốc.

Ví dụ ghi đè một controller của Core:

  1. Tạo file tương ứng trong app/GP247/Core/Controllers/... (giữ nguyên đường dẫn con và tên file như trong package gốc).
  2. Cho controller mới extend lại controller gốc trong vendor/gp247/core/...
  3. Đổi namespace từ GP247\Core\Controllers thành App\GP247\Core\Controllers (chỉ thêm App vào phía trước, giữ nguyên phần còn lại).

Áp dụng tương tự cho GP247\Front\*, GP247\Shop\* (đổi thành App\GP247\Front\*, App\GP247\Shop\*) và cho controller API (đổi GP247\Core\Api\Controllers thành App\GP247\Core\Api\Controllers).

Làm sao thêm route mới cho khu vực quản trị?

Sử dụng các hằng số prefix và middleware GP247_ADMIN_PREFIX, GP247_ADMIN_MIDDLEWARE trong khai báo route.

Tham khảo: https://github.com/gp247net/core/blob/master/src/routes.php

Có những biến môi trường nào trong .env cần biết?

Tắt API:

GP247_API_MODE=1   // Để tắt, đặt giá trị 0

Tiền tố bảng dữ liệu (không thể thay đổi sau khi cài đặt gp247):

GP247_DB_PREFIX=gp247_

Tiền tố đường dẫn đến trang quản trị:

GP247_ADMIN_PREFIX=gp247_admin

Được xây dựng bởi hệ sinh thái ❤️ GP247 — gp247.net