Hướng dẫn tạo, sửa và xuất bản bài viết trong CMS
Biên tập từng giao diện bài viết, giải thích loại, trường nhập, SEO, thuộc tính và các tác động ghi dữ liệu khi thao tác.
Bài viết dùng để làm gì?
Màn hình Bài viết quản lý nội dung chữ và hình như bài giới thiệu, hướng dẫn, thông báo, tin tức và blog. Người biên tập tạo nội dung, chọn danh mục, gắn tag, điều chỉnh ngày/thứ tự, sửa các phiên bản ngôn ngữ, quản lý SEO và liên kết bài liên quan. Nội dung chi tiết được lưu dưới dạng HTML từ trình soạn thảo.
Giao diện danh sách bài viết
- Mở Quản lý nội dung → Bài viết.
- Lọc theo tiêu đề, danh mục hoặc tag. Khi áp dụng tìm kiếm, code đưa về trang 1 và dùng 20 bản ghi/trang.
- Kiểm tra tiêu đề, danh mục, ảnh và ngày để phân biệt các bài gần giống nhau, rồi bấm Sửa. Xem dùng để mở đường dẫn website khi có.
- Nếu cần một bài mới, chọn Thêm; không sửa đè một bài cũ chỉ vì có nội dung gần giống.
Các lựa chọn Loại
Bài viết (Article): Nội dung thông tin, giới thiệu, hướng dẫn sử dụng có thể dùng lâu dài.
Tin tức (NewsArticle): Nội dung tin tức, cập nhật hoặc thông báo gắn với sự kiện/thời điểm.
Blog (BlogPosting): Bài chia sẻ, kinh nghiệm hoặc nội dung trình bày theo chuyên mục blog.
Loại là dữ liệu phân loại mà website có thể dùng khi trình bày nội dung. Loại không thay thế danh mục, cũng không tự tạo một chuyên mục mới trên menu. Tại trang sửa, đổi loại gọi API ngay.
Giao diện Sửa bài viết
Ý nghĩa các trường
Tiêu đề: Tên bài để người đọc nhận biết nội dung. Bắt buộc, tối đa 300 ký tự; Lưu bài.
Danh mục: Nhóm chứa bài, quyết định bộ thuộc tính và component liên quan. Đổi tại trang sửa lưu ngay, xóa giá trị thuộc tính cũ ở mọi ngôn ngữ.
Ngày hiển thị: Ngày gắn với bài cho việc hiển thị/sắp xếp mà template sử dụng. Lưu bài. Không mặc định coi đây là lịch hẹn tự xuất bản.
Thứ tự: Ưu tiên sắp xếp khi danh sách sử dụng Order. Trong trang sửa phải Lưu bài; thao tác thứ tự tại danh sách gửi riêng.
Tags: Từ khóa dùng nhóm hoặc tìm bài theo chủ đề. Nhập/chọn gợi ý, bấm + để thêm vào bản đang sửa, rồi Lưu bài; xóa tag cũng cần Lưu.
Hình: Ảnh đại diện, khác với ảnh chèn trong nội dung. Chọn PNG/JPEG/GIF/WebP rồi Lưu bài.
Mô tả ngắn: Tóm tắt nội dung để giới thiệu bài. Bắt buộc; Lưu bài.
HTML Code: Trường HTML bổ sung riêng mà template có thể dùng. Khác với HTML được xuất từ editor; Lưu bài.
Mô tả chi tiết: Nội dung đầy đủ của bài. Soạn với tiêu đề con, đoạn văn, danh sách, ảnh và liên kết; Lưu bài.
Thông tin khác / Tìm kiếm: Giá trị thuộc tính theo danh mục và ngôn ngữ. Lưu theo từng trường, không dùng nút Lưu bài thay thế.
Giao diện Thêm bài viết
- Bấm Thêm, chọn danh mục và loại trước khi biên tập. Chuẩn bị tiêu đề rõ ràng, mô tả ngắn và ảnh đại diện phù hợp.
- Nhập nội dung chi tiết. Dùng Heading 2–5 cho các mục trong bài, tránh dùng chữ lớn thay cho cấu trúc tiêu đề.
- Thêm tag và chọn bài liên quan nếu cần. Danh sách liên quan khi tạo mới được gom vào yêu cầu tạo khi bấm Lưu.
- Bấm Lưu; khi thành công CMS chuyển đến trang chi tiết bài vừa tạo.
- Hoàn thiện SEO và thuộc tính bằng nút lưu của từng phần; kiểm tra trạng thái Hoạt động trước khi kết thúc.
Soạn thảo nội dung có định dạng
Thanh công cụ có kiểu đoạn Normal/Heading 2/3/4/5; cỡ Small/Normal/Large/Huge; đậm, nghiêng, gạch chân, gạch ngang; màu chữ và nền chữ; danh sách đánh số hoặc dấu đầu dòng; tăng/giảm thụt lề; căn trái, giữa, phải, đều; liên kết; chèn ảnh và video. Chọn đoạn hoặc đặt con trỏ đúng vị trí trước khi dùng công cụ. Định dạng chỉ thay phần đang soạn, chưa ghi bài cho đến Lưu.
Chèn ảnh mở bộ chọn ảnh; sau khi chèn có xử lý ALT, với tên bài làm giá trị thay thế khi ALT trống theo code. Chèn video đặt vị trí chèn rồi thay bằng đoạn embed. Nút </> có hàm mở trình sửa HTML, nếu bấm không mở được hộp thì cần kiểm tra lỗi chức năng, không coi mã đã được áp dụng. Ô HTML Code riêng bên ngoài editor vẫn là một trường dữ liệu khác.
SEO và kiểm tra xuất bản
SEO URL là đường dẫn thân thiện của bài, phải bắt đầu bằng / và không được chỉ có /. Meta Title là tiêu đề SEO (tối đa 65 ký tự), Meta Description là mô tả SEO (tối đa 155 ký tự), Meta Keyword là từ khóa mô tả chủ đề. Đây không phải các ô thay thế Tiêu đề và Mô tả ngắn trong bài; dùng Lưu của khối SEO.
Sử dụng/Hoạt động bật cho phép nội dung hiển thị trên website; tắt dùng để tạm ẩn, dữ liệu vẫn còn trong CMS. Việc xuất hiện ở vị trí nào còn phụ thuộc danh mục, module, template và điều kiện lọc. Trạng thái xuất bản không tự lưu phần văn bản đang biên tập và không phải thao tác xóa.
Xóa và quyền thao tác
Người tạo hoặc người có quyền ActionOnOthersContent được cấp các thao tác quản lý theo điều kiện UI/API. Mở được trang chi tiết không bảo đảm được phép lưu. Xóa bài là thao tác loại bỏ nội dung, khác bỏ một tag hay gỡ liên kết bài liên quan; xác nhận chỉ khi đã kiểm tra đúng bài và không cần giữ lại. Bộ lọc sở hữu API bỏ qua các yêu cầu chỉ đọc GET/HEAD/OPTIONS, nên không mô tả nó là cơ chế ngăn mọi lượt xem chi tiết.
Hệ thống xử lý gì khi bạn thao tác?
Trang sửa bài viết gồm nhiều phần lưu độc lập. Nút Lưu của bài viết không phải nút xác nhận cho tất cả các thao tác trên trang. Phần này giải thích xử lý trong code và tác động đến công việc biên tập.
Bảng thời điểm lưu trên trang sửa bài viết
Sửa tiêu đề, mô tả ngắn, nội dung chi tiết, HTML Code, ngày hiển thị, thứ tự, ảnh đại diện, thêm/bỏ tag: Khi bấm Lưu trong khối bài viết và biểu mẫu hợp lệ. Chuyển ngôn ngữ hoặc rời trang trước khi lưu có thể làm mất phần đang soạn. Bấm dấu + thêm tag chỉ thêm vào danh sách đang sửa, chưa lưu bài viết.
Đổi danh mục: Gửi API ngay khi lựa chọn thay đổi. Xóa giá trị thuộc tính cũ và tải lại bộ trường theo danh mục mới. Xem quy trình chi tiết bên dưới.
Đổi Loại: Bài viết/Tin tức/Blog: Gửi API ngay. Lưu loại riêng, không đồng thời lưu các đoạn văn đang soạn. Nếu API lỗi, lựa chọn trên form có thể vẫn mang giá trị vừa chọn; cần kiểm tra lại.
Bật/tắt Hoạt động: Gửi API đổi trạng thái ngay. Không chờ Lưu bài viết. Thao tác này không lưu bản nội dung đang gõ.
Sửa SEO: Khi bấm Lưu trong khối SEO. Độc lập với nút Lưu bài viết. Lưu SEO trước khi chuyển ngôn ngữ hoặc thao tác khiến khối này tải lại.
Sửa thuộc tính: Theo kiểu trường: nút Lưu riêng hoặc tự lưu khi lựa chọn thay đổi. Không dùng nút Lưu bài viết thay cho lưu thuộc tính.
Thêm/xóa bài liên quan ở trang sửa: Gọi API tạo/xóa liên kết ngay. Xóa ở khối liên quan là bỏ quan hệ, không phải xóa bài viết được liên kết. Khi tạo bài mới, danh sách liên quan được gom vào yêu cầu tạo lúc bấm Lưu; hai màn hình có thời điểm lưu khác nhau.
Chọn ngôn ngữ: Tải phiên bản nội dung và SEO đã lưu của ngôn ngữ được chọn. Không tự dịch, không tự lưu bản đang soạn trước khi tải. Thuộc tính cũng thay đổi theo ngôn ngữ.
Đổi danh mục: lưu ngay và xóa giá trị thuộc tính cũ
Đổi danh mục của nội dung đã tồn tại có tác động ngay đến dữ liệu đã lưu. Hệ thống không chỉ thay tên nhóm trên màn hình: API kiểm tra danh mục, xóa các bản ghi giá trị thuộc tính của nội dung, cập nhật danh mục rồi lưu cơ sở dữ liệu. Không có bước bấm Lưu chung để xác nhận lại thay đổi này.
- Trước khi đổi, ghi lại các giá trị cần giữ trong Thông tin khác và Tìm kiếm, ở từng ngôn ngữ đang sử dụng. Lưu hoặc sao chép riêng các phần đang soạn để không nhầm chúng với dữ liệu đã lưu.
- Chọn đúng danh mục đích. Chỉ thực hiện khi đã quyết định chuyển nội dung; không dùng danh sách này để thử xem danh mục khác có những trường nào.
- Chờ thông báo thành công. Khi API thành công, màn hình nhận danh mục mới và hai khối thuộc tính tải lại. Nếu có lỗi, kiểm tra thông báo và dữ liệu sau khi mở lại trang, không tiếp tục nhập thuộc tính theo một danh mục chưa được lưu thành công.
- Nhập lại các giá trị phù hợp với bộ thuộc tính mới. Thuộc tính có nút Lưu cần lưu từng trường; công tắc, ô chọn và nút chọn một giá trị gửi cập nhật ngay.
- Mở lại nội dung và kiểm tra từng ngôn ngữ. Chọn lại danh mục cũ không khôi phục các giá trị đã bị xóa.
Phạm vi bị xóa: xử lý phía máy chủ lọc theo mã nội dung, không lọc theo ngôn ngữ hay nhóm thuộc tính. Vì vậy, toàn bộ giá trị thuộc tính đã lưu của nội dung ở các ngôn ngữ đều nằm trong phạm vi xóa; ngay cả thuộc tính xuất hiện ở cả danh mục cũ và mới cũng không được giữ lại theo cách xử lý này. Thao tác này không xóa định nghĩa thuộc tính dùng chung trong phần cấu hình. Không diễn giải việc mất giá trị thuộc tính là xóa bài viết, sản phẩm hoặc tệp nội dung.
Ví dụ minh họa: một nội dung đang có thuộc tính “Tác giả” ở danh mục A. Chuyển sang danh mục B có cùng thuộc tính “Tác giả” vẫn cần nhập lại giá trị đã ghi trước đó. Nếu B không có thuộc tính này, ô nhập sẽ không còn xuất hiện. Đây là ví dụ về quy tắc xử lý, không phải mô tả một bản ghi đã được thử chuyển trong dữ liệu thật.
Vì sao bộ thuộc tính thay đổi hoặc một khối không có ô nhập?
Hệ thống lấy thuộc tính theo nội dung, danh mục hiện tại, ngôn ngữ đang chọn và nhóm mục đích. Các thuộc tính được cấu hình cho danh mục hiện tại hoặc các danh mục cha có thể được đưa vào, theo ngôn ngữ tương ứng. Các trường được sắp theo độ ưu tiên của định nghĩa thuộc tính. Khối Thông tin khác dùng nhóm thông tin; khối Tìm kiếm dùng nhóm bộ lọc. Cách trình bày trên website còn phụ thuộc template có sử dụng các trường này hay không.
Khi một trong các thông tin nhận diện trên thay đổi, component xóa danh sách đang hiển thị và gọi API tải lại. Nếu có nhiều yêu cầu tải nối tiếp, phản hồi cũ không được ghi đè kết quả của lần tải mới hơn. Một khối trống có thể do chưa cấu hình thuộc tính cho danh mục/ngôn ngữ đó; nếu tải lỗi, hệ thống có thông báo lỗi, không nên hiểu là chắc chắn không có thuộc tính.
Lưu giá trị thuộc tính như thế nào?
Văn bản, văn bản nhiều dòng, số, ngày, màu: Nhập hoặc chọn giá trị, rồi bấm Lưu cạnh chính trường đó. Chỉ trường đó được gửi cập nhật. Nút Lưu của nội dung không thay thế các nút này.
Hình ảnh thuộc tính: Chọn tệp ảnh, sau đó bấm Lưu của trường. Chọn tệp mới chỉ chuẩn bị dữ liệu. Khi lưu, máy chủ xử lý ảnh và lưu đường dẫn; sau thành công, component tải lại danh sách thuộc tính. Do đó nên lưu các trường khác đang sửa trước khi lưu ảnh thuộc tính.
Công tắc đúng/sai: Bật hoặc tắt. Gửi giá trị ngay. Công tắc thuộc tính chỉ có ý nghĩa theo tên thuộc tính; không tự đồng nghĩa với trạng thái xuất bản của nội dung.
Chọn nhiều giá trị: Đánh dấu hoặc bỏ đánh dấu từng ô. Mỗi lần thay đổi gửi lại tập giá trị đã chọn. Code lưu các lựa chọn dưới dạng chuỗi phân cách bằng dấu phẩy.
Chọn một giá trị: Bấm nút tròn cạnh lựa chọn. Gửi lựa chọn ngay; chỉ một giá trị được chọn trong trường đó.
Máy chủ kiểm tra thuộc tính có thuộc danh mục hiện tại hoặc danh mục cha của nội dung, đúng ngôn ngữ và thuộc nhóm được phép hay không. Nếu nội dung đã bị chuyển danh mục ở một tab khác, lưu một ô thuộc tính cũ có thể bị từ chối với thông báo Thuộc tính không thuộc danh mục nội dung hiện tại. Khi đó cần ghi lại phần đang nhập và mở lại trang để làm việc với bộ trường đúng.
Luôn đọc thông báo của từng lần lưu. Giá trị còn hiện trong ô sau một lỗi không chứng minh rằng máy chủ đã lưu thành công.
Trạng thái Hoạt động/Sử dụng có ý nghĩa gì?
Bật: cho phép bài viết hiển thị trên website. Tắt: ẩn bài viết khỏi các phần website có áp dụng điều kiện xuất bản. Bài viết vẫn còn trong CMS để quản lý, chỉnh sửa và bật lại sau này. Đây là trạng thái xuất bản, không phải thao tác xóa dữ liệu.
Trạng thái bật là điều kiện cho phép hiển thị. Vị trí thực tế còn phụ thuộc danh mục, module, template và các điều kiện lọc của website. Không nên hiểu rằng bật công tắc sẽ tự đưa bài viết lên trang chủ hoặc mọi vị trí trên website.
API hiện thực hiện đảo trạng thái đang lưu mỗi lần nhận yêu cầu. Không bấm liên tiếp để thử lại khi chưa biết lần trước thành công hay chưa, vì lần bấm tiếp theo có thể đảo về trạng thái cũ. Sau khi có lỗi hoặc phản hồi không rõ, ghi lại phần đang soạn rồi mở lại bài để xem trạng thái đã lưu.
Điểm cần chú ý trong phiên bản code được đối chiếu: thông báo ẩn/hiện trong trang sửa bài viết đang viết ngược nhánh so với giá trị công tắc. Vì vậy, không chỉ dựa vào câu thông báo này để kết luận bài đang ẩn hay hiện; kiểm tra công tắc sau khi tải lại và kiểm tra website. Đây là bất nhất của code hiện tại, không phải ý nghĩa ngược của công tắc.
Khi bấm Lưu bài viết
- Biểu mẫu kiểm tra dữ liệu: tiêu đề bắt buộc, tối đa 300 ký tự; mô tả ngắn bắt buộc. Ngôn ngữ phải có giá trị và mã không dài quá 5 ký tự. API còn kiểm tra danh mục và bài viết tồn tại trong doanh nghiệp.
- CMS lấy HTML từ vùng soạn thảo chi tiết, ghép với các trường của bài viết rồi gửi yêu cầu cập nhật. Ô HTML Code là trường riêng với nội dung HTML từ trình soạn thảo; không coi hai ô là cùng một dữ liệu.
- Máy chủ cập nhật tiêu đề, mô tả ngắn và nội dung theo ngôn ngữ đang chọn; tạo bản nội dung ngôn ngữ đó nếu chưa có. Ngày hiển thị, thứ tự, HTML Code, ảnh đại diện và tag được lưu ở dữ liệu chung của bài, nên không mặc nhiên xem chúng là các giá trị độc lập cho từng ngôn ngữ.
- Nếu có ảnh đại diện mới, máy chủ chuẩn hóa tên ảnh theo tiêu đề và thời điểm, xử lý tệp rồi lưu tên ảnh vào bài. Chỉ chọn tệp trong ô Hình chưa hoàn tất lưu ảnh đại diện.
- Máy chủ ghi nhận người cập nhật và thời điểm cập nhật. Nếu danh mục có cấu hình component, hệ thống đồng bộ đường dẫn đích SEO theo component chi tiết, tiêu đề và mã bài. Nếu chưa có SEO, hệ thống gọi xử lý tạo SEO; nếu đã có, nhánh này cập nhật đường dẫn đích khi cần. Không suy ra rằng đổi tiêu đề sẽ tự viết lại toàn bộ Meta Title/Meta Description đã biên tập.
- Khi cập nhật thành công, CMS tải lại bài, gợi ý tag, nội dung editor và SEO. Khi thất bại, cần đọc thông báo và sửa lỗi trước khi rời trang.
Việc đổi danh mục gọi một API riêng chỉ cập nhật danh mục và xóa giá trị thuộc tính. Nhánh này không gọi đồng bộ SEO như thao tác Lưu bài viết. Sau khi chuyển danh mục, cần hoàn tất lưu nội dung và kiểm tra lại đường dẫn, đặc biệt khi danh mục mới dùng component chi tiết khác.
Những thay đổi nào dùng chung giữa các ngôn ngữ?
Tiêu đề, mô tả ngắn và mô tả chi tiết có bản ghi theo ngôn ngữ. Danh mục, loại, trạng thái xuất bản, thứ tự, ngày hiển thị, ảnh đại diện, HTML Code và quan hệ bài liên quan gắn với bài viết chung. Vì vậy, đổi danh mục hoặc tắt bài ở bản tiếng Việt không chỉ tác động đến một bản dịch riêng lẻ. Giá trị thuộc tính lưu theo ngôn ngữ, nhưng thao tác chuyển danh mục xóa chúng ở tất cả ngôn ngữ.
SEO và phần đang sửa chưa lưu
Khối SEO tải dữ liệu trong chu kỳ nhận tham số từ trang cha, không chỉ khi đổi ngôn ngữ. Một thao tác làm trang cha cập nhật lại, chẳng hạn đổi danh mục thành công, có thể tải lại SEO và thay thế phần SEO đang nhập nhưng chưa lưu. Nên hoàn tất Lưu SEO trước khi tiếp tục thao tác ở khối bài viết.
Các tình huống cần kiểm tra sau thao tác
- Đổi danh mục xong không còn thuộc tính: kiểm tra cấu hình thuộc tính, danh mục cha và ngôn ngữ của danh mục mới; các giá trị cũ đã bị xóa theo xử lý chuyển danh mục.
- Đã bấm Lưu bài nhưng thuộc tính chưa được ghi: kiểm tra đã bấm Lưu cạnh thuộc tính hay chưa. Hai yêu cầu lưu độc lập.
- Đổi ngôn ngữ xong mất phần đang gõ: thao tác chọn ngôn ngữ tải dữ liệu đã lưu. Không có bước tự lưu hay tự dịch trong hàm xử lý này.
- Thêm liên quan không được: CMS chặn chọn chính bài đang sửa và chặn liên kết đã có. Sau khi xóa liên kết, nếu dòng còn hiển thị, mở lại bài để kiểm tra kết quả máy chủ trước khi thao tác tiếp.
- Bật nhưng không thấy trên website: kiểm tra trạng thái sau tải lại, danh mục, cấu hình vị trí/module và đường dẫn SEO. Đừng xóa rồi tạo lại bài để xử lý một vấn đề cấu hình hiển thị.