Ô tìm kiếm và bộ lọc trên thanh trên cùng thì tiện, nhưng để lọc nhanh theo danh mục — kiểu "chỉ xem thẻ Vàng", "chỉ xem thẻ đã khoá" — thì Odoo có một thứ trực quan hơn nhiều: searchpanel, cái bảng lọc dọc nằm bên trái list và kanban. Bấm một mục là danh sách thu gọn ngay. Bài này gắn searchpanel vào view thẻ thành viên và mổ xẻ các tuỳ chọn của nó.

Một thẻ searchpanel, vài field

searchpanel đặt bên trong <search>. Mỗi <field> khai trong đó trở thành một mục lọc ở panel bên trái, gom các bản ghi theo giá trị field đó:

Ảnh chụp đoạn mã nền tối, bên trong thẻ search có thẻ searchpanel chứa hai field: hang_the string Hạng thẻ icon fa-star enable_counters, và trang_thai string Trạng thái select multi icon fa-flag enable_counters; kèm chú thích select mặc định one là chọn một mục có mục Tất cả, select multi hiện ô tick chọn nhiều mục cộng dồn, enable_counters hiện số bản ghi mỗi mục, icon gắn biểu tượng; cuối ảnh ghi searchpanel hiện trên list và kanban không hiện trên form, Many2one cũng dùng được thêm domain để giới hạn giá trị

Hình 1: searchpanel với hai field. hang_the để mặc định (select="one") — chọn một mục. trang_thai đặt select="multi" — hiện ô tick, chọn nhiều. enable_counters hiện số bản ghi mỗi mục; icon gắn biểu tượng cho tiêu đề mục.

Panel lọc chạy thật

Mở danh sách thẻ, panel hiện bên trái:

Ảnh chụp giao diện Odoo thật danh sách thẻ thành viên với bảng lọc dọc bên trái: mục HẠNG THẺ biểu tượng ngôi sao gồm Tất cả đang chọn, Bạc số 3, Vàng số 1; mục TRẠNG THÁI biểu tượng cờ dạng ô tick gồm Đang dùng 2, Hết hạn 1, Đã khoá 1; bên phải là danh sách bốn thẻ VIP với các cột ưu tiên mã thẻ khách hàng hạng thẻ điểm nhận tin số dư trạng thái

Hình 2: Panel bên trái. HẠNG THẺ (icon sao) — chọn một: Tất cả / Bạc (3) / Vàng (1). TRẠNG THÁI (icon cờ) — ô tick chọn nhiều: Đang dùng (2) / Hết hạn (1) / Đã khoá (1). Bấm "Vàng" là list chỉ còn thẻ Vàng; tick "Hết hạn" + "Đã khoá" là gộp hai trạng thái. Con số bên phải mỗi mục là enable_counters đang đếm.

Cái hay so với bộ lọc thanh trên: searchpanel luôn hiện danh mục và số đếm, nên người dùng thấy ngay "có bao nhiêu ở mỗi loại" và bấm là lọc — không cần mở menu, gõ, hay nhớ tên filter.

select one hay multi?

Hai kiểu chọn cho hai nhu cầu khác nhau:

  • select="one" (mặc định) — như radio. Chọn một mục tại một thời điểm, có sẵn mục "Tất cả" để bỏ lọc. Hợp cho danh mục mà một bản ghi chỉ thuộc một giá trị và bạn muốn xem từng cái một (hạng thẻ, danh mục sản phẩm).
  • select="multi" — ô tick. Chọn nhiều mục, kết quả là hợp của chúng. Hợp khi muốn "xem cả hết hạn lẫn khoá cùng lúc".

Chọn kiểu theo cách người dùng thật sự lọc: xem-từng-loại thì one, gộp-nhiều-loại thì multi.

Vài lưu ý

  • searchpanel hiện trên list và kanban, không trên form. Nó là công cụ duyệt tập bản ghi, nên chỉ có nghĩa ở view nhiều bản ghi.
  • Dùng được cả Many2one, không chỉ Selection — khi đó panel lọc theo bản ghi cha (ví dụ lọc theo danh mục là một model riêng). Thêm domain= để giới hạn giá trị hiện trong panel.
  • enable_counters có chi phí — nó đếm bản ghi mỗi mục, trên bảng cực lớn có thể chậm; cân nhắc tắt nếu dữ liệu khổng lồ.
  • groupby cho Many2one nhiều cấp: searchpanel còn xếp mục theo cây cha-con nếu field đích có quan hệ phân cấp.

Ba ý mang về

  1. <searchpanel> (đặt trong <search>) tạo bảng lọc dọc bên trái cho list và kanban; mỗi <field> là một mục lọc nhanh theo danh mục.
  2. select="one" chọn một mục (radio, có "Tất cả"); select="multi" tick chọn nhiều mục cộng dồn — chọn kiểu theo cách người dùng lọc; enable_counters hiện số đếm, icon gắn biểu tượng.
  3. Panel dùng cả Selection lẫn Many2one (lọc theo bản ghi cha, domain giới hạn), chỉ hiện ở view nhiều bản ghi, không ở form; enable_counters có chi phí trên dữ liệu lớn.

Xong công cụ lọc. Bài sau nhìn tổng thể một action gom nhiều kiểu view: Phần sau về view_mode — cách một action cho người dùng nhảy giữa list, kanban, form, pivot... và thứ tự khai quyết định view nào mở trước.