Chuyển đến nội dung chính

Bài đăng

Next.js: Từ Static Page Đến CMS-Driven Rendering - Day 3

Trong những bài trước, chúng ta đã tìm hiểu các khái niệm cơ bản của React và Next.js. Ở bài này, chúng ta sẽ kết hợp những kiến thức đó để xây dựng một website lịch sử đơn giản, lấy ví dụ về các vị hoàng đế nhà Đường. Mục tiêu không chỉ là tạo một trang hiển thị thông tin, mà còn hiểu cách phát triển từ một trang HTML tĩnh thành một hệ thống có thể lấy nội dung từ CMS và render bằng các React Components. Chúng ta sẽ đi qua các bước: Tạo một trang Next.js tĩnh với Bootstrap. Tách giao diện thành các React Components. Sử dụng dynamic route để xử lý nhiều URL. Lấy nội dung từ một CMS API. Tạo ContentRenderer để ánh xạ nội dung CMS sang React Components. Hiểu luồng render từ CMS đến HTML hiển thị trên trình duyệt. Lưu ý: Các tên như contentHtml , ContentRenderer và CmsPageTemplate trong bài là tên do chúng ta tự đặt để minh họa. Đây không phải API có sẵn của Next.js, React hay Umbraco. JSON của CMS cũng là ví dụ về một API contract do chúng ta thiết kế, khôn...
Các bài đăng gần đây

Umbraco 13: Thiết kế Database đa ngôn ngữ với Languages và Translations - Day 6

Trong Day 5, chúng ta đã tìm hiểu cách sử dụng Language Variants trong Umbraco 13 để quản lý bài viết Lý Tự Nghiệp (李嗣業) bằng tiếng Việt và tiếng Anh. Với nội dung CMS, Umbraco đã cung cấp sẵn cơ chế quản lý phiên bản ngôn ngữ. Tuy nhiên, trong một ứng dụng thực tế, chúng ta còn có nhiều dữ liệu nghiệp vụ khác như danh mục sản phẩm, tên sản phẩm, mô tả, cấu hình hoặc thông tin do backend quản lý. Ví dụ, Bookstore có thể cần các danh mục sau: Lịch sử — History. Triết học — Philosophy. Thay vì tạo hai danh mục riêng biệt cho hai ngôn ngữ, chúng ta muốn lưu một danh mục duy nhất và quản lý tên của nó theo từng ngôn ngữ. Trong bài này, chúng ta sẽ thiết kế một mô hình database đa ngôn ngữ đơn giản bằng SQL Server và ASP.NET Core Web API. Mô hình có bảng Languages để quản lý ngôn ngữ, bảng Categories để lưu dữ liệu nghiệp vụ và bảng CategoryTranslations để lưu nội dung đã dịch. Chúng ta cũng sẽ bổ sung trạng thái enable/disable cho ngôn ngữ, xây dựng API trả về danh mục t...

Umbraco 13: Xây dựng Blog đa ngôn ngữ với Language Variants - Day 5

Trong các bài trước, chúng ta đã xây dựng project Bookstore, tạo các category Lịch sử và Triết học, đồng thời tìm hiểu cách sử dụng Content Delivery API để lấy dữ liệu từ Umbraco 13. Trong bài Day 5, chúng ta sẽ mở rộng project bằng một chức năng thực tế hơn: xây dựng khu vực Blog có hỗ trợ tiếng Việt và tiếng Anh . Thay vì chỉ quản lý sách, website sẽ có thêm các bài viết lịch sử. Ví dụ, chúng ta sẽ tạo một bài viết về Lý Tự Nghiệp (chữ Hán: 李嗣業), một danh tướng thời Đường, với nội dung tiếng Việt là ngôn ngữ chính và tiếng Anh là ngôn ngữ thứ hai. Qua bài thực hành này, chúng ta sẽ tìm hiểu cách thiết kế Document Type, xây dựng Content Tree, cấu hình Language Variants, nhập nội dung theo từng ngôn ngữ và kiểm tra kết quả qua Content Delivery API. Mục tiêu sau bài học: Hiểu cơ chế đa ngôn ngữ có sẵn trong Umbraco 13. Biết cách tạo Document Type cho Blog, Blog Category và Blog Post. Phân biệt dữ liệu dùng chung với dữ liệu thay đổi theo ngôn ngữ. Tạo một bài viết ...

Umbraco 13: Gọi Content Delivery API lấy một Content Item và phân tích JSON - Day 4.1

Trong Day 4, chúng ta đã có cái nhìn tổng quan về Content Delivery API của Umbraco 13. Bây giờ, chúng ta sẽ bắt đầu thực hành với một thao tác cụ thể: lấy thông tin của một content item và đọc hiểu JSON mà API trả về . Project thực hành của chúng ta là Bookstore, với cấu trúc nội dung đã tạo trong Umbraco Backoffice: Bookstore Home: node trang chủ. Lịch sử: category sách lịch sử. Triết học: category sách triết học. Trong bài này, chúng ta sẽ sử dụng Bookstore Home làm ví dụ. Sau khi hoàn thành, bạn sẽ hiểu cách gọi endpoint, lấy GUID của content item, đọc các trường trong JSON response và xử lý một số lỗi thường gặp. 1. Hiểu mục tiêu của bài thực hành Trong Umbraco truyền thống, ứng dụng có thể sử dụng dữ liệu CMS để render HTML trực tiếp từ phía server. Với mô hình Headless CMS, ứng dụng khác có thể gọi API để lấy dữ liệu nội dung dưới dạng JSON. Luồng hoạt động trong bài này như sau: flowchart TD A["Umbraco Backoffice"] --> B["Books...