Tạo trang có thể tùy biến các trường dễ dàng để tạo api cho trang full (ok)

Đọc thêm ở đây: https://chatgpt.com/c/683b9024-3934-8003-8610-d5dc1cd2f628

✅ Giải pháp: Dynamic Page + JSON Field + Builder UI + API

1. Cấu trúc DB: Bảng pages

Schema::create('pages', function (Blueprint $table) {
    $table->id();
    $table->string('title');
    $table->string('slug')->unique();
    $table->json('fields')->nullable(); // chứa các trường tùy biến
    $table->timestamps();
});

2. Dữ liệu mẫu trong fields (kiểu JSON)

{
  "title": "Trang giới thiệu",
  "image_url": "https://example.com/banner.jpg",
  "content": "<p>Chúng tôi là công ty...</p>"
}

🧱 3. Giao diện tạo page: Builder UI

Bạn dùng các thành phần như:

  • Input text → map đến fields.title

  • Image URL / File chọn → map đến fields.image_url

  • WYSIWYG editor → map đến fields.content

  • Các trường bạn chọn sẽ lưu chung vào fields (json)

Giao diện dạng lặp:

Bạn có thể lưu $configFields trong DB hoặc config file PHP để tùy biến thêm.

4. API hiển thị nội dung

Kết quả trả về:

Bạn đang xây dựng hệ thống CMS với các trường tùy biến và bây giờ muốn hỗ trợ đa ngôn ngữ trong trường fields, cụ thể là lưu theo cấu trúc:

Dưới đây là hướng dẫn đầy đủ để cấu trúc fields đa ngôn ngữ và cập nhật controller, form và API.

✅ 1. Cấu trúc dữ liệu

Bạn giữ nguyên cột fields kiểu json, nhưng cấu trúc nó như sau:

✅ 2. Controller – store()

Giả sử bạn gửi từ frontend 1 trường fields_json có dạng:

Bạn không cần đổi gì nhiều, chỉ cần đảm bảo dữ liệu gửi về đúng format:

✅ 3. API – routes/web.php

Bạn có thể thêm lang làm query string hoặc route param:

✅ 4. Tùy chọn: Thêm helper trong model

Để dễ dùng trong Blade hoặc nơi khác:

5. Gợi ý frontend (JavaScript/Vue/React)

Gửi dữ liệu JSON như sau:

Tạo giao diện nhập liệu đa ngôn ngữ (tab "VI" / "EN")

app\Http\Controllers\Admin\PageController.php

routes\web.php

resources\views\admin\pages\create.blade.php

Giao diện đơn giản làm Dynamic Builder

routes\web.php

Dưới đây là một giao diện form nhập dữ liệu cho bảng pages với các fields linh hoạt như: sử dụng khái báo dạng mảng fields

  • image_url (chọn ảnh)

  • subtitle

  • content (textarea hoặc CKEditor)

  • button_text

  • button_link

app\Http\Controllers\Admin\PageController.php

routes\web.php

resources\views\admin\pages\create.blade.php

— Cập nhật hoàn chỉnh index, edit

Sau chỉnh sửa

Thử cập nhật bằng cách thêm một trường test12

Khi quay lại https://lva4.com/admin/pages/5/edit nó báo lỗi

có thể vì nó không phải dụng jsong như này

Chỉnh sửa giao diện create mới

Cập nhật lại code

resources\views\admin\pages\create.blade.php

resources\views\admin\pages\edit.blade.php

resources\views\admin\pages\index.blade.php

database\migrations\2025_06_02_025221_create_pages_table.php

routes\web.php

app\Http\Controllers\Admin\PageController.php

app\Models\Page.php

Xử lý thêm một bức ảnh để học tạo file riêng js để sử dụng

app\Http\Controllers\Admin\PageController.php

app\Models\Page.php

public\js\lfm.js

Thay vì sử dụng như này openLfm()

Tao sẽ sử dụng kiểu động openLfm('image_url', 'image_preview')

public\js\lfm.js

resources\views\admin\pages\create.blade.php

app\Http\Controllers\Admin\PageController.php

app\Models\Page.php

routes\web.php

Thêm trường nội dung tiếng việt , tiếng anh có thể upload ảnh

app\Http\Controllers\Admin\PageController.php

app\Models\Page.php

resources\views\admin\pages\create.blade.php

Để bạn chèn ảnh từ thư viện (Laravel File Manager) trực tiếp vào nội dung trong CKEditor

Chèn ảnh vào thư viện ở trình soạn thảo

resources\views\admin\pages\create.blade.php

public\js\lfm.js

app\Models\Page.php

app\Http\Controllers\Admin\PageController.php

routes\web.php

Sử dụng cho màn chỉnh sửa thêm ảnh, chèn ảnh

resources\views\admin\pages\edit.blade.php

Cập nhật lại bản create và edit để nó lưu vào databse đúng định dạng json en & vi

resources\views\admin\pages\create.blade.php

resources\views\admin\pages\edit.blade.php

routes\web.php

public\js\lfm.js

app\Models\Page.php

app\Http\Controllers\Admin\PageController.php

database\migrations\2025_06_02_025221_create_pages_table.php

48MB
archive
Open

Last updated

Was this helpful?