Hãy bắt đầu với điều này:
Hầu hết các ví dụ cho nhà cung cấp bối cảnh và plugin tiêu thụ bối cảnh
các giá trị chỉ hoạt động trên các giá trị đơn lẻ.
Mặc dù điều đó đúng, nhưng hãy nhận ra rằng "giá trị đơn" được cung cấp là một đối tượng, không phải kiểu nguyên thủy. Trong trường hợp của nhà cung cấp ngữ cảnh Nhóm, "giá trị đơn" đó là một đối tượng Thực thể thuộc loại 'nhóm'. Bản thân thực thể chứa tất cả dữ liệu thông thường - id, nhãn, mô tả, ngày tạo, tác giả, trường cơ sở, v.v. Vì vậy, thật sai lầm khi nghĩ nó chỉ là một số.
Để cung cấp một mảng giá trị, bạn cần trả về một đối tượng đại diện cho một cấu trúc dữ liệu thay vì một Thực thể. API dữ liệu đã nhập cốt lõi xác định nhiều loại dữ liệu, trong đó loại Bản đồ có lẽ là tốt nhất cho mục đích của bạn.Bản đồ chứa một tập hợp các giá trị, tương tự như một mảng kết hợp quen thuộc trong PHP.
Vì vậy, phác thảo của giải pháp là tạo trình cung cấp ngữ cảnh của riêng bạn bằng cách sao chép trình cung cấp ngữ cảnh Nhóm hiện có, sửa đổi bản sao của bạn để thay vì tạo định nghĩa ngữ cảnh Thực thể, bạn tạo định nghĩa ngữ cảnh Bản đồ, sau đó thêm các giá trị bạn muốn cung cấp cho Bản đồ.
Nếu bạn cần nhiều chức năng hơn, bạn có thể tạo kiểu dữ liệu của riêng mình (tôi khuyên bạn nên phân lớp con Bản đồ cho điều này) và cung cấp một đối tượng của kiểu dữ liệu đó thay vì Thực thể hoặc Bản đồ.
Bạn có thể tìm thấy một ví dụ ngắn về cách viết Trình cung cấp ngữ cảnh của riêng mình tại đây:
https://www.drupal.org/docs/contributed-modules/rules-essentials/for-developers/providing-global-context-variables