Score:0

การสร้างฟอร์มในช่องมุมมองแบบกำหนดเอง

ธง cn

ฉันกำลังทำงานกับฟังก์ชันเล็กน้อยที่อนุญาตให้ฝัง 'แบบฟอร์ม' ในช่องมุมมองที่กำหนดเองในมุมมองที่ฉันกำลังทำงานอยู่

มุมมองคือรายการตารางของเอนทิตี 'คำขอ' คอลัมน์สุดท้ายสุดในตารางสำหรับแต่ละแถวคือฟอร์ม 'แก้ไขด่วน' ซึ่งมีฟอร์มแบบกำหนดเองพร้อมฟิลด์สองสามฟิลด์ (ขึ้นอยู่กับเอนทิตีที่แสดงในแถวปัจจุบัน) ฉันกำลังพยายามหาวิธีสร้างปลั๊กอิน/ฟิลด์มุมมองที่กำหนดเองซึ่งจะให้ฉันแสดงฟอร์มที่ใช้งานได้ ฉันรู้วิธีสร้างตรรกะเพื่อแสดงฟิลด์ที่จำเป็นอย่างมีเงื่อนไข และรู้วิธีสร้างฟอร์มปกติ แต่ฉันไม่แน่ใจว่าจะสร้างฟิลด์นั้นลงในฟิลด์มุมมองได้อย่างไร

ฉันใช้ `drush create plugin-views-field' และฉันสามารถเรนเดอร์องค์ประกอบของฟอร์มในเมธอด render() แต่พวกมันไม่ได้ทำอะไรเลยจริง ๆ เนื่องจากไม่ได้สร้างฟอร์มจริง ๆ

มันจะง่ายกว่าหรือเป็นไปได้ไหมที่จะสร้างฟอร์มภายใน module/src/Form (ที่ยอมรับอาร์กิวเมนต์เพิ่มเติม) และเรนเดอร์ฟอร์มนั้นโดยใช้ formBuilder->getForm() หรือมีวิธีที่ฉันสามารถสร้างและเรนเดอร์ฟอร์มภายในมุมมอง เสียบเข้าไป?

แบบฟอร์มจำเป็นต้องทำงานผ่าน ajax เพื่อให้คุณสามารถแก้ไขได้อย่างรวดเร็วโดยไม่ต้องโหลดหน้าซ้ำ

ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชมอย่างมาก.

ตามความคิดเห็นด้านล่างดูเหมือนว่าฉันสามารถทำสิ่งต่อไปนี้:

$form = \Drupal::formBuilder()->getForm('Drupal\resume\Form\WorkForm');
$form->sub_id = รหัส;
คืนฟอร์ม $;

ในการเรนเดอร์ฟอร์ม จากนั้นภายใน formbuilder ให้ใช้ตัวแปร sub_id เพื่อแนบกับ ajax callback และ wrapper element

Score:1
ธง cn

ใช่ สำหรับฟอร์ม Drupal คุณต้องมีคลาสฟอร์มที่ประมวลผลโดย ตัวสร้างแบบฟอร์ม. คุณสามารถวางการสร้างฟอร์มที่เป็นผลลัพธ์ได้ทุกที่บนหน้า ฟิลด์มุมมองไม่แตกต่างจากองค์ประกอบอื่นๆ ของหน้า เช่น บล็อกตัวอย่าง ในกรณีของคุณที่ยุ่งยากคือการมีแบบฟอร์มเดียวกันหลายรายการในหน้า จากนั้นคุณต้องมี ID ฟอร์มที่ไม่ซ้ำใคร ajax wrappers และองค์ประกอบการส่ง ดู ใช้แบบฟอร์มเดียวกันมากกว่าหนึ่งครั้งต่อหน้าด้วยการโทรกลับ AJAX

โปรดทราบว่า Views Ajax และ Form API Ajax มีจุดสิ้นสุดที่แตกต่างกัน และการใช้ทั้งสองอย่างร่วมกันจะเพิ่มความซับซ้อนมากขึ้น ดู การเปิดใช้งาน AJAX ใน Views แบ่งปุ่ม Form API AJAX (Drupal 8)

Ex0r avatar
cn flag
ใช่ แผนของฉันคืออนุญาตให้ผู้สร้างแบบฟอร์มยอมรับข้อโต้แย้งเพิ่มเติมที่จะส่งผ่านไปยังแบบฟอร์มที่ระดับฟิลด์มุมมอง ซึ่งจะส่งผ่านรหัสเอนทิตีที่ไม่ซ้ำกัน (หนึ่งรายการต่อแถว) ไปยังแบบฟอร์ม ดังนั้นฉันจึงสามารถสร้างรหัสแบบฟอร์มเป็น #รูปร่าง- และตั้งค่าองค์ประกอบ wrapper ให้ถูกต้องตามพารามิเตอร์ที่ส่งผ่าน ajax การดูและฟอร์ม ajax เป็นสิ่งที่ฉันยังไม่ได้พิจารณา ฉันคิดว่าแบบฟอร์ม ajax จะทำงานเบื้องหลังเหมือนปกติและทริกเกอร์ / สร้างแบบฟอร์มใหม่เมื่อจำเป็น
4uk4 avatar
cn flag
ฟังดูเป็นแผนการที่ดี BTW ในกรณีนี้ คุณไม่สามารถส่งพารามิเตอร์แบบฟอร์มผ่านวิธีการสร้างได้ สำหรับ ID ของฟอร์ม คุณต้องใส่พารามิเตอร์ก่อนที่จะเรียกใช้ตัวสร้างฟอร์มดังที่แสดงในหัวข้อที่เชื่อมโยง ตราบใดที่คุณไม่เปิดใช้งาน Ajax ใน Views คุณสามารถละเว้นส่วนที่สองได้
Ex0r avatar
cn flag
อัปเดตคำถามเพื่อสะท้อนการเปลี่ยนแปลงของคุณ ดูเหมือนว่าใช่มั้ย? นอกจากนี้ยังมีมุมมอง ajax ในหน้า แต่ใช้โมดูล views_expandable_table เพื่อขยาย/ยุบคอลัมน์สุดท้ายของแต่ละแถวของตารางเป็นแถวเพิ่มเติม ฉันไม่แน่ใจว่ามันจะรบกวนฟอร์ม ajax หรือไม่ แต่ฉันจะลองดู นอกจากนี้ ฉันไม่ทราบวิธีอัปเดตแถวของตารางเมื่อมีการส่งฟอร์มจริง (ฟอร์มสามารถอัปเดตค่าบางค่าที่แสดงรายการในแถวของตารางที่เหมาะสมเป็นคอลัมน์ได้)
4uk4 avatar
cn flag
ใน ajax callback คุณสามารถอัปเดตส่วนใดก็ได้ของเพจ นอกแบบฟอร์มได้เช่นกัน - ในคำถามที่แก้ไขของคุณ คุณไม่ได้ใช้ตัวอย่างโค้ดที่ถูกต้องจากหัวข้อที่เชื่อมโยง คุณต้องใส่พารามิเตอร์ก่อนที่จะเรียกใช้ FormBuilder[FormBuilder::getForm()](https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Form%21FormBuilder.php/function/FormBuilder%3A%3AgetForm) ยอมรับทั้ง 2 แบบฟอร์ม ชื่อคลาสหรืออ็อบเจกต์แบบฟอร์มที่สร้างอินสแตนซ์แล้ว
Ex0r avatar
cn flag
ดูเหมือนจะต่อต้านการผลิต formBuilder->getForm() สร้างคลาสที่สร้างอินสแตนซ์ของฟอร์มหรือไม่ ฉันเดาว่าฉันไม่เข้าใจว่าทำไมคุณต้องสร้างอินสแตนซ์คลาสก่อนด้วยวิธีอื่นเมื่อผู้สร้างฟอร์มกำลังสร้างอ็อบเจกต์อินสแตนซ์อยู่แล้ว ฉันจะลองดู
Ex0r avatar
cn flag
ฉันลงเอยด้วยการทดสอบบางอย่าง และสิ่งที่คุณเชื่อมโยงก็ใช้งานได้ ฉันยังต้องหาวิธีเรียกใช้คิวรีมุมมองอีกครั้งเพื่อเรียกใช้อีกครั้งบน ajax callback สำหรับแถวที่ระบุ แต่ฉันสามารถดำเนินการดังกล่าวได้หลังจากแบบฟอร์มทำงาน ขอขอบคุณ!

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา