Score:0

จะสร้างแบบฟอร์มที่คล้ายกันโดยใช้ปุ่มได้อย่างไร

ธง cn

ฉันใช้ Drupal 9 ฉันกำลังสร้างโมดูลที่มีแบบฟอร์มพร้อมปุ่มที่จะสร้างแบบฟอร์มใหม่ที่คล้ายกับอันแรกขึ้นมาใหม่

นี่คือรหัสของฉัน

ฟังก์ชันสาธารณะ buildForm (อาร์เรย์ $form, FormStateInterface $form_state) {
  $database = \Drupal::database();
  $result = $database->select('user_details', 'u')
    ->ฟิลด์ ('u', ['uid']);
  $row = $result->execute()->fetchAll();
  $rowCount = นับ ($ แถว);

  $แบบฟอร์ม['buttons_multiple'] = [
    '#type' => "คอนเทนเนอร์",
    '#attributes' => ['style' => 'margin-top: 2em;'],
    'add_chat' => [
      '#type' => 'ส่ง',
      '#value' => $this->t('เพิ่มแบบฟอร์ม +'),
      '#attributes' => [
        'style' => 'ขนาดตัวอักษร: 1.2em;',
      ]
      '#submit' => ['::addForm'],
    ]
  ];

  สำหรับ ($counter = 1; $counter <= $rowCount; $counter++) {
    $form['form_box_' . $เคาน์เตอร์] = [
      '#type' => "คอนเทนเนอร์",
      'full_name'.$เคาน์เตอร์ => [
        '#type' => 'ช่องข้อความ',
        '#title' => 'ชื่อ',
        '#ขนาด' => 12,
        '#required' => จริง,
      ]
      'buttons_single' => [
        '#type' => "คอนเทนเนอร์",
        'บันทึก'.$เคาน์เตอร์ => [
          '#type' => 'ส่ง',
          '#value' => $this->t('บันทึก'),
          '#attributes' => [
            'style' => 'ขนาดตัวอักษร: 1em;',
          ]
          '#submit' => ['::submitForm'],
        ]
      ]
      'นับ' => [
        '#type' => 'ซ่อน',
        '#value' => $เคาน์เตอร์
      ]
    ];
  }
}

ฟังก์ชันสาธารณะ submitForm (อาร์เรย์ &$form, FormStateInterface $form_state) {

  $name = $form_state->getValue('ชื่อเต็ม');
  $counter = $form_state->getValue('นับ');
        
  $form_state->set('user_values', [
    'ชื่อ' => $form_state->getValue('ชื่อ'),
  ]);

  // เพื่อจุดประสงค์ในการทดสอบ แสดงชื่อเต็ม
  $this->messenger()->addMessage($this->t('สวัสดี ชื่อของคุณคือ %name.', ['%name' => $name]));
}

ฟังก์ชันสาธารณะ addForm (อาร์เรย์ &$form, FormStateInterface $form_state) {
  $ค่า = [
    [
      'full_name' => '',
    ]
  ];
    
  $database = \Drupal::database();
  $query = $database->insert('user_details')->fields(['full_name']);
  foreach (ค่า $ เป็นรายละเอียด $) {
    $query->values(รายละเอียด$);
  }
  $query->execute();
}

ตามรหัสด้านบน ฉันได้รับเฉพาะชื่อของแบบฟอร์มที่เพิ่มล่าสุด แม้ว่าฉันจะคลิกปุ่มบันทึกของแบบฟอร์มแรกก็ตาม

ฉันจะทำงานกับปุ่มที่บันทึกไว้สำหรับแต่ละแบบฟอร์มได้อย่างไร

ขอบคุณล่วงหน้า.

Jaypan avatar
de flag
ใน Drupal 7 สิ่งนี้ทำได้ด้วย hook_forms() แต่ถูกลบออกใน Drupal 8 คุณสามารถใช้วิธีการแทนที่: https://www.drupal.org/node/2188851
Jeirod avatar
cn flag
@Jaypan ขอบคุณสำหรับบทความนี้ มันช่วยฉันได้มาก

โพสต์คำตอบ

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