Score:0

แสดงฟิลด์ที่กำหนดเองจากแบบฟอร์มการลงทะเบียนผู้ใช้

ธง zm

ฉันกำลังพยายามแสดงฟิลด์แบบกำหนดเองที่แสดงในแบบฟอร์มการลงทะเบียนผู้ใช้ในแบบฟอร์มใหม่ที่แยกต่างหากซึ่งสร้างผู้ใช้ของบทบาทเฉพาะที่มีสิทธิ์เฉพาะ

ฉันทำงานได้ทุกอย่างยกเว้นความสามารถในการแสดงฟิลด์ที่กำหนดเองนี้

เมื่อฉันดูฟิลด์ใต้หน้าการตั้งค่าแบบฟอร์มการลงทะเบียนผู้ใช้ ฟิลด์นี้ระบุว่าเป็นฟิลด์อ้างอิงเอนทิตี เมื่อแสดงผลจะมีช่องทำเครื่องหมาย 4 ช่อง

ฉันพบวิธีแยกฟิลด์ที่อยู่ในแบบฟอร์มการลงทะเบียนผู้ใช้ออกจากแบบฟอร์มใหม่ของฉัน แต่ฉันไม่สามารถหาวิธีแสดงฟิลด์เฉพาะที่ฉันต้องการได้

$entityTypeManager = \Drupal::service('entity_field.manager');
$fields = $entityTypeManager->getFieldDefinitions('ผู้ใช้', 'ผู้ใช้');

foreach ($fields เป็น $field_name) {
  kint($field_name);
}

นั่นทำให้ฉันมีรายการฟิลด์ทั้งหมดในการลงทะเบียนผู้ใช้

ฉันรู้สึกเหมือนขาดอะไรที่ชัดเจนไป

4uk4 avatar
cn flag
โดยปกติ คุณจะสร้างโหมดฟอร์มแบบกำหนดเองและกำหนดค่าวิดเจ็ตฟิลด์ที่คุณต้องการ ฉันคิดว่าคุณกำลังถามคำถามเพราะคุณสร้างแบบฟอร์มตั้งแต่เริ่มต้น นี่เป็นเรื่องง่ายสำหรับประเภทฟิลด์ธรรมดา แต่ใช้งานได้มากสำหรับฟิลด์ที่ซับซ้อน
zm flag
ใช่มันเป็นการสร้างตั้งแต่เริ่มต้นภายในโมดูล สิ่งนี้จะต้องมีการเปิดตัวและเปิดใช้งานในการผลิต ซึ่งเราควบคุมได้น้อยที่สุดเนื่องจากลูกค้าของรัฐบาลกลาง ฉันพบน้อยมากเกี่ยวกับการสร้างแบบฟอร์มการลงทะเบียนที่กำหนดเองและการนำฟิลด์จากแบบฟอร์มผู้ใช้กลับมาใช้ใหม่
Score:2
ธง cn

โหมดแบบฟอร์มคือการกำหนดค่าที่คุณสามารถเผยแพร่ผ่าน CMI (drush cex/cim) หรือติดตั้งด้วยโมดูลโดยรวมไฟล์ YAML ไว้ในโฟลเดอร์การกำหนดค่าโมดูล

การใช้โหมดแบบฟอร์มลงทะเบียนใหม่นั้นไม่ง่ายนัก พื้นฐาน:

  1. สร้างโหมดแบบฟอร์ม:

    /admin/structure/display-modes/form
    
  2. เปิดใช้งานและกำหนดค่าในคำถามนี้สำหรับการติดตั้งล่วงหน้า ลงทะเบียน โหมดแบบฟอร์ม:

    จะซ่อนฟิลด์ที่กำหนดเองในแบบฟอร์มลงทะเบียนได้อย่างไร?

  3. หากต้องการวางโหมดฟอร์มใหม่บนเพจ คุณต้องมีโมดูลสนับสนุน

    https://www.drupal.org/project/form_mode_manager

    หรือรหัสที่กำหนดเอง:

    ฉันจะโหลดแบบฟอร์มด้วยการแสดงแบบฟอร์มเฉพาะ (โหมดแบบฟอร์ม) ได้อย่างไร

    หรือเส้นทางที่กำหนดเอง:

    mymodule.routing.yml

    mymodule.register2:
      เส้นทาง: '/admin/people/ch-create'
      ค่าเริ่มต้น:
        _entity_form: 'user.register2'
        _title: 'สร้างบัญชีใหม่'
      ความต้องการ:
        _permission: 'ลงทะเบียนผู้ใช้บางคน'
    

    ลงทะเบียน2 จำเป็นต้องลงทะเบียนเป็นตัวจัดการแบบฟอร์มในประเภทเอนทิตี:

    mymodule.module

    ฟังก์ชัน mymodule_entity_type_build (อาร์เรย์ &$entity_types) {
      $entity_types['user']->setFormClass('register2', 'Drupal\user\RegisterForm');
    }
    
zm flag
ตกลง ถ้าฉันเข้าใจคุณถูกต้อง แบบฟอร์มลงทะเบียนผู้ใช้มีโหมดแบบฟอร์มที่ไม่สามารถเข้าถึงได้โดยไม่ต้องกระโดดข้ามห่วง (เช่น ใช้โมดูลสนับสนุนนี้) ถูกต้องหรือไม่? ฉันค่อนข้างจะเขียนโค้ดนี้แทนการพึ่งพาโมดูลส่วนร่วม แต่ขอฉันดูเรื่องนี้สักหน่อยก่อน โมดูล Contrib จะต้องได้รับการอนุมัติและลงนามใน (เป็นธรรมดาของไคลเอนต์ fed บางส่วน)
4uk4 avatar
cn flag
โหมดฟอร์ม *ลงทะเบียน* ที่ติดตั้งไว้ล่วงหน้าเป็นโหมดฟอร์มเดียวที่ใช้งานได้ทันทีโดยไม่ต้องใช้โค้ดเพิ่มเติม สำหรับโหมดฟอร์มที่กำหนดเอง เช่น *Register 2* คุณต้องมี **ทั้ง** โมดูลร่วม **หรือ** รหัสที่กำหนดเอง
zm flag
ฉันจึงยังคงวนเวียนอยู่รอบๆ ฉันไม่ได้พยายามสร้างโหมดแบบฟอร์มใหม่ ฉันสบายดีกับการใช้โหมดแบบฟอร์มการลงทะเบียนนอกกรอบฉันแค่พยายามรับฟิลด์อ้างอิงเอนทิตีที่เพิ่มในแบบฟอร์มการลงทะเบียนผู้ใช้ในแบบฟอร์มการลงทะเบียนผู้ใช้ที่สองที่สร้างผู้ใช้ที่มีบทบาทเฉพาะ ฉันสามารถเข้าถึงข้อมูลทุกประเภทเกี่ยวกับฟิลด์นี้ผ่าน kint แต่ฉันไม่สามารถแสดงผลจากฟังก์ชัน buildForm ได้ อย่างอื่นทำงานได้ดี ฉันเดาว่าฉันไม่เข้าใจว่าจำเป็นต้องใช้โหมดฟอร์มที่นี่อย่างไร หากฉันสามารถเข้าถึงข้อมูลภาคสนามได้
zm flag
FYI....โมดูล contrib มีข้อผิดพลาดและใช้งานไม่ได้ใน Drupal 9 ในขณะนี้ ดูเหมือนว่า
4uk4 avatar
cn flag
โซลูชันทั้งสองนี้เป็นเพียงตัวอย่างเพื่อให้ชัดเจนว่าต้องทำอะไร มีโซลูชันอื่นๆ มากมายสำหรับขั้นตอนที่ 3 เช่น การสร้างเส้นทางฟอร์มแบบกำหนดเอง หากคุณติดอยู่ที่จุดนี้ ให้ถามคำถามพร้อมรายละเอียดที่คุณต้องการวางแบบฟอร์มที่สองในไซต์ของคุณ
zm flag
อ้อเข้าใจแล้ว. ที่จริง....ผมละทิ้งรายละเอียดนั้นไปแล้ว นี่คือแบบฟอร์มผู้ดูแลระบบกล่าวอีกนัยหนึ่งไม่สามารถเข้าถึงได้โดยผู้ใช้ที่ไม่ระบุชื่อ กรณีการใช้งานคือพวกเขาต้องการให้ใครบางคนเพิ่มผู้ใช้ในบทบาทบางอย่าง แต่ไม่ต้องการให้พวกเขาเข้าถึงแบบฟอร์มการลงทะเบียนแบบเต็ม ฉันได้สร้างแบบฟอร์มนั้นอย่างสมบูรณ์และใช้งานได้ ยกเว้นฉันต้องการฟิลด์เดียวจากแบบฟอร์มการลงทะเบียนหลักที่เป็นฟิลด์อ้างอิงเอนทิตี เส้นทางไปยังแบบฟอร์มคือ /admin/people/ch-create และทุกอย่างถูกสร้างขึ้นโดยโมดูลที่ฉันเขียน ฉันติดอยู่กับการได้รับฟิลด์นี้ ฉันไม่พบอะไรมากมายเกี่ยวกับการใช้ฟิลด์ซ้ำโดยทางโปรแกรม
4uk4 avatar
cn flag
ตกลง จากนั้นสร้างเส้นทางฟอร์มเอนทิตีสำหรับเส้นทาง ดูคำตอบที่แก้ไข
zm flag
ขอบคุณที่อดทนรอฉัน ฉันไม่บรรลุสิ่งที่ฉันต้องการจริงๆ ฉันไม่สามารถหาวิธีโหลดฟิลด์เดียวจากแบบฟอร์มลงทะเบียนหลักลงในแบบฟอร์มลงทะเบียนใหม่ในฝั่งผู้ดูแลระบบ อีกครั้งมีเอกสารน้อยมากเกี่ยวกับการใช้ฟิลด์ซ้ำโดยทางโปรแกรม แต่สิ่งนี้ช่วยให้ฉันสร้างแบบฟอร์มการลงทะเบียนหลักขึ้นใหม่ได้อย่างสมบูรณ์ และฉันเพิ่งแก้ไขมันตามความต้องการของฉันและมอบหมายบทบาทให้เมื่อกรอกเสร็จ ขอขอบคุณสำหรับความช่วยเหลือของคุณ!

โพสต์คำตอบ

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