Điểm:0

Cách cung cấp một mảng giá trị từ nhà cung cấp ngữ cảnh

lá cờ in

Tôi đang xem xét việc xây dựng Nhà cung cấp ngữ cảnh tùy chỉnh, đặc biệt để cung cấp "nhóm người dùng hiện tại". Tôi đang xây dựng plugin này cho một plugin khác, plugin Điều kiện, với mục đích là lọc mọi thứ (ví dụ: Khối) dựa trên vai trò nhóm của người dùng hiện tại.

Tôi biết rằng có các sự cố và bản vá sau đây, điều này sẽ đưa tôi đến đâu đó:

Tuy nhiên, cả hai bản vá chỉ xử lý một nhóm duy nhất, tức là nhà cung cấp bối cảnh về cơ bản chỉ chọn ra nhóm đầu tiên mà người dùng thuộc về và plugin điều kiện được cung cấp một nhóm để đánh giá. Điều tôi muốn làm là yêu cầu nhà cung cấp bối cảnh cung cấp nhiều nhóm (tất cả các nhóm mà người dùng thuộc về) và yêu cầu plugin điều kiện chấp nhận nhiều nhóm.

Nhưng làm cách nào để tôi cung cấp và sử dụng một mảng giá trị làm giá trị ngữ cảnh?

Hầu hết các ví dụ về trình cung cấp ngữ cảnh và plugin sử dụng các giá trị ngữ cảnh chỉ hoạt động trên các giá trị đơn lẻ. Tôi chưa thấy các ví dụ về cách cung cấp một mảng (của các nhóm trong trường hợp này).

Điểm:3
lá cờ fr

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

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.