Bạn cài một module mới, mở app lên — và thấy một cái bảng trắng trơn, không một dòng dữ liệu, không biết bấm gì. Trải nghiệm lần đầu tệ đó rất dễ chữa, và Odoo có sẵn cơ chế: no-content help — một đoạn HTML hiện giữa màn hình khi danh sách rỗng, kèm cái mặt cười quen thuộc, hướng người dùng tạo bản ghi đầu tiên. Bài này thêm nó cho app thẻ thành viên.

Khai bằng field help trên action

no-content help là field help (kiểu HTML) trên bản ghi action. Nó chấp nhận HTML thật, nên bạn viết được tiêu đề, đoạn văn, in đậm:

Ảnh chụp đoạn mã nền tối, bản ghi action_the_thanh_vien với field help type html chứa ba đoạn p: đoạn đầu class o_view_nocontent_smiling_face ghi Chưa có thẻ thành viên nào, đoạn hai hướng dẫn bấm Mới để phát hành tấm thẻ đầu tiên, đoạn ba nói mỗi thẻ theo dõi điểm hạng thẻ và ưu đãi; kèm chú thích đoạn đầu class smiling face vẽ mặt cười phía trên, help chấp nhận HTML, chỉ hiện khi không có bản ghi nào khớp bộ lọc

Hình 1: <field name="help" type="html"> với ba đoạn. Đoạn đầu mang class o_view_nocontent_smiling_face — chính class này vẽ hình minh hoạ mặt cười phía trên. Các đoạn sau là hướng dẫn tự do. Nội dung là HTML nên <b>, danh sách... đều dùng được.

Nó chỉ hiện khi màn hình trống

Điểm mấu chốt: help chỉ hiện khi danh sách rỗng — không có bản ghi nào khớp bộ lọc hiện tại. Có dữ liệu là nó biến mất, nhường chỗ cho bảng. Để chụp nó mà không xoá thẻ thật, tôi chỉ cần lọc theo một cái tên không tồn tại:

Ảnh chụp giao diện Odoo thật, danh sách thẻ đang lọc theo từ khoá ZZZ khong ton tai nên rỗng; giữa màn hình hiện một hình minh hoạ tài liệu có mặt cười màu tím, bên dưới là tiêu đề đậm Chưa có thẻ thành viên nào, rồi dòng Bấm Mới để phát hành tấm thẻ đầu tiên cho khách quen của quán, rồi dòng Mỗi thẻ theo dõi điểm tích luỹ hạng thẻ và các ưu đãi đang áp dụng

Hình 2: Lọc bằng từ khoá vô nghĩa "ZZZ-khong-ton-tai" → danh sách rỗng → no-content help hiện lên: mặt cười, tiêu đề "Chưa có thẻ thành viên nào", và hai dòng hướng dẫn. Bốn thẻ thật vẫn còn nguyên — chỉ là bộ lọc đang không khớp cái nào. Bỏ lọc là bảng trở lại.

Đây là chỗ vàng để "đón" người dùng: thay vì bảng trắng khó hiểu, họ đọc được ngay bấm gì và để làm gì.

Viết help cho ra giá trị

Một help tốt trả lời ba câu người dùng đang thắc mắc trước màn hình trống:

  • Đây là gì? — một câu ngắn định danh (tiêu đề với mặt cười).
  • Tôi làm gì tiếp? — hành động cụ thể, nhắc đúng tên nút ("Bấm Mới").
  • Nó theo dõi/dùng để làm gì? — một dòng cho biết giá trị, để người dùng hiểu vì sao nên tạo.

Tránh help kiểu "Không có dữ liệu" — đó là điều người dùng đã thấy, không giúp gì. Các app chuẩn của Odoo còn nhét cả liên kết tài liệu, ví dụ mẫu vào help.

Vài lưu ý

  • o_view_nocontent_smiling_face là class cho mặt cười; còn vài biến thể khác (ví dụ minh hoạ trung tính) tuỳ phong cách — nhưng mặt cười là phổ biến nhất cho "hãy tạo cái đầu tiên".
  • help hiện trên list, kanban và các view duyệt khác; nó là chuyện của tập rỗng nên không có nghĩa trên form.
  • Khai được ở nhiều nơi (action, hoặc trong <search>), nhưng đặt trên action là gọn và phổ biến nhất — một chỗ, mọi view của action đó dùng chung.
  • help là HTML tin cậy do bạn viết, không phải dữ liệu người dùng — nên thoải mái dùng thẻ định dạng; chỉ nhớ giữ ngắn gọn.

Ba ý mang về

  1. no-content help là field help (HTML) trên action, hiện giữa màn hình khi danh sách rỗng để hướng người dùng tạo bản ghi đầu tiên — chữa cái "bảng trắng khó hiểu".
  2. Class o_view_nocontent_smiling_face trên đoạn đầu vẽ mặt cười; phần còn lại là HTML tự do (tiêu đề, hướng dẫn, in đậm tên nút).
  3. Chỉ hiện khi không có bản ghi khớp bộ lọc — có dữ liệu là ẩn; viết help trả lời "đây là gì / làm gì tiếp / để làm gì", đừng chỉ ghi "không có dữ liệu".

Đến đây ta đã đi hết một vòng lớn về view. Bài sau bước sang địa hạt mới — can thiệp vào chính diện mạo của giao diện quản trị: Phần sau về CSS/SCSS tuỳ biến giao diện backend — thêm asset để đổi màu, khoảng cách, kiểu chữ cho khu vực quản trị.