Điểm:0

Tạo biểu mẫu trong trường dạng xem tùy chỉnh

lá cờ cn

Tôi đang làm việc với một chút chức năng cho phép nhúng 'biểu mẫu' vào trường chế độ xem tùy chỉnh trên chế độ xem mà tôi đang làm việc.

Dạng xem là một danh sách bảng gồm các thực thể 'yêu cầu'. Cột cuối cùng trong bảng cho mỗi hàng là biểu mẫu 'chỉnh sửa nhanh', có biểu mẫu tùy chỉnh với một vài trường trên đó (tùy thuộc vào thực thể được hiển thị trong hàng hiện tại). Tôi đang cố gắng tìm ra cách xây dựng plugin/trường chế độ xem tùy chỉnh cho phép tôi hiển thị biểu mẫu đang hoạt động. Tôi biết cách thực hiện logic để hiển thị các trường cần thiết một cách có điều kiện và biết cách tạo một biểu mẫu bình thường, nhưng tôi không chắc cách tạo một biểu mẫu thành trường dạng xem.

Tôi đã sử dụng 'drush tạo plugin-views-field' và tôi có thể hiển thị các phần tử biểu mẫu trong phương thức render(), nhưng chúng không thực sự làm bất cứ điều gì vì biểu mẫu không thực sự được tạo.

Sẽ dễ dàng hơn/có thể tạo một biểu mẫu bên trong mô-đun/src/Biểu mẫu (chấp nhận các đối số bổ sung) và hiển thị biểu mẫu đó bằng cách sử dụng formBuilder->getForm() hoặc có cách nào để tôi có thể tạo và hiển thị biểu mẫu bên trong chế độ xem cắm vào?

Biểu mẫu cần hoạt động qua ajax để bạn có thể chỉnh sửa nhanh mà không cần tải lại trang.

Mọi sự trợ giúp sẽ rất được trân trọng.

Theo các ý kiến ​​​​dưới đây, có vẻ như tôi có thể làm điều gì đó như:

$form = \Drupal::formBuilder()->getForm('Drupal\resume\Form\WorkForm');
$form->sub_id = id;
trả về biểu mẫu $;

Để hiển thị biểu mẫu, sau đó bên trong trình tạo biểu mẫu, hãy sử dụng biến sub_id để gắn nó vào phần tử trình bao bọc và gọi lại ajax.

Điểm:1
lá cờ cn

Có, đối với một biểu mẫu Drupal, bạn cần một lớp biểu mẫu được xử lý bởi Trình tạo Mẫu. Bạn có thể đặt bản dựng biểu mẫu kết quả ở bất kỳ đâu trên trang, các trường lượt xem không khác với các phần tử trang khác, chẳng hạn như các khối. Tricky trong trường hợp của bạn là có nhiều phiên bản của cùng một biểu mẫu trên trang. Sau đó, bạn cần ID biểu mẫu duy nhất, trình bao bọc ajax và gửi các phần tử. Nhìn thấy Sử dụng cùng một biểu mẫu nhiều lần trên mỗi trang với lệnh gọi lại AJAX

Ngoài ra, hãy lưu ý rằng Chế độ xem Ajax và API biểu mẫu Ajax có các điểm cuối khác nhau và việc sử dụng cả hai cùng nhau sẽ làm tăng thêm độ phức tạp. Nhìn thấy Kích hoạt AJAX trong Chế độ xem sẽ phá vỡ Nút API AJAX của Biểu mẫu (Drupal 8)

Ex0r avatar
lá cờ cn
Có, kế hoạch của tôi là cho phép trình tạo biểu mẫu chấp nhận các đối số bổ sung sẽ được chuyển vào biểu mẫu ở cấp trường dạng xem, sẽ chuyển id thực thể duy nhất (một đối số trên mỗi hàng) vào biểu mẫu để tôi có thể tạo id biểu mẫu dưới dạng #mẫu đơn- và đặt chính xác phần tử trình bao bọc dựa trên các tham số đã truyền. Chế độ xem ajax và biểu mẫu ajax là thứ tôi chưa xem xét. Tôi đã nghĩ rằng biểu mẫu ajax sẽ chỉ chạy ngầm như bình thường và kích hoạt/xây dựng lại biểu mẫu khi cần.
4uk4 avatar
lá cờ cn
Đây có vẻ là một kế hoạch tốt. BTW trong trường hợp này, bạn không thể chuyển tham số biểu mẫu qua phương thức xây dựng. Đối với ID biểu mẫu, bạn cần thêm tham số trước khi gọi trình tạo biểu mẫu như được hiển thị trong chủ đề được liên kết. Miễn là bạn không bật Ajax trong Chế độ xem, bạn có thể bỏ qua phần thứ hai.
Ex0r avatar
lá cờ cn
Đã cập nhật câu hỏi để phản ánh các thay đổi của bạn. Điều đó có vẻ đúng không? Ngoài ra, có chế độ xem ajax trên trang nhưng nó đang sử dụng mô-đun views_expandable_table để mở rộng/thu gọn cột cuối cùng của mỗi hàng trong bảng thành một hàng bổ sung. Tôi không chắc liệu nó có can thiệp vào biểu mẫu ajax hay không nhưng tôi sẽ dùng thử. Ngoài ra, tôi không biết cách cập nhật hàng của bảng sau khi biểu mẫu thực sự được gửi (biểu mẫu có khả năng cập nhật một số giá trị được liệt kê trong hàng của bảng thích hợp dưới dạng cột).
4uk4 avatar
lá cờ cn
Trong lệnh gọi lại ajax, bạn có thể cập nhật bất kỳ phần nào của trang, kể cả bên ngoài biểu mẫu. - Nhân tiện, trong câu hỏi đã chỉnh sửa của bạn, bạn đã không sử dụng đúng ví dụ mã từ chủ đề được liên kết, bạn phải thêm tham số trước khi gọi FormBuilder.[FormBuilder::getForm()](https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Form%21FormBuilder.php/function/FormBuilder%3A%3AgetForm) chấp nhận cả hai, một biểu mẫu tên lớp hoặc một đối tượng biểu mẫu đã được khởi tạo.
Ex0r avatar
lá cờ cn
Điều đó có vẻ phản tác dụng. FormBuilder->getForm() không tạo một lớp khởi tạo của biểu mẫu? Tôi đoán tôi không hiểu tại sao trước tiên bạn phải khởi tạo một lớp thông qua một phương thức khác khi trình tạo biểu mẫu đã tạo một đối tượng được khởi tạo. Tôi sẽ thử.
Ex0r avatar
lá cờ cn
Cuối cùng tôi đã thực hiện một số thử nghiệm và những gì bạn liên kết đã hoạt động. Tôi vẫn cần tìm cách kích hoạt lại truy vấn dạng xem để chạy lại trên lệnh gọi lại ajax cho hàng đã chỉ định, nhưng tôi có thể xử lý vấn đề đó sau khi biểu mẫu hoạt động. Cảm ơn bạn!

Đă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.