Ở Day 6, chúng ta đã thiết kế database đa ngôn ngữ cho hệ thống quản lý Category, sử dụng ba bảng Languages , Categories và CategoryTranslations . Tuy nhiên, khi ứng dụng phát triển, cấu trúc database thường xuyên thay đổi. Chẳng hạn: Bổ sung cột SortOrder để sắp xếp Category. Tạo bảng CategoryAuditLogs để lưu lịch sử thao tác trên Category. Triển khai phiên bản mới lên môi trường Development, Staging hoặc Production mà không phải tự chạy SQL thủ công trên từng database. Nếu mỗi lần thay đổi chúng ta đều mở SQL Server Management Studio rồi chạy script bằng tay, việc triển khai sẽ dễ sai sót và khó kiểm soát. Trong bài này, chúng ta sẽ tìm hiểu cách sử dụng MigrationPlan và MigrationBase của Umbraco 13 để quản lý các thay đổi schema database theo từng bước. 1. Migration là gì? Migration là một bước thay đổi cấu trúc database có thể được thực thi theo trình tự. Ví dụ, database ban đầu có bảng Categories , sau đó chúng ta cần thêm cột SortOrder , rồi tạo bảng mới đ...
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...