Score:-3

เปิดแท็บใหม่พร้อมลิงก์ภายนอกโดยใช้ปุ่มรูปภาพ

ธง cn

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

ฉันจะเขียนโค้ดปุ่ม submitForm เพื่อเปิดลิงก์ภายนอกด้วยค่าฟอร์มของฟิลด์ข้อความภายในฟอร์มได้อย่างไร

ด้านล่างนี้คือโค้ดตัวอย่างของฉัน:

$แบบฟอร์ม['ค้นหา'] = [             
      '#type' => 'ช่องข้อความ', 
      '#title' => 'ค้นหา',
      '#required' => จริง
];

$แบบฟอร์ม['ส่ง'] = [
    '#type' => 'image_button',
    '#value' => $this->t(''),
    '#src' => 'โมดูล/myModule/src/images/myImage.png',
    '#submit' => ['::submitForm'],
];

ฉันพยายามใช้รหัสเหล่านี้สำหรับปุ่ม แต่ก็ยังไม่มีโชค:

$แบบฟอร์ม['ส่ง'] = [
    '#type' => 'รายการ',
    '#markup' => $this->t('
        <a href=\'https://www.google.com/search?%search\' target="_blank">
           <img width="30" height="30" border="0" align="center" src=\'modules/myModule/src/images/myImage.png\'/>
        </a>', ['%search' => $search]),
];

โปรดทราบว่านี่ไม่ใช่รหัสจริงของฉัน แต่เป็นแนวคิดของรหัสของฉัน

ความคิดเห็นและข้อเสนอแนะใด ๆ ยินดีต้อนรับ

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

Score:0
ธง de

หากคุณใช้ แบบฟอร์มเป้าหมาย แอตทริบิวต์ HTML บนปุ่มรูปภาพของคุณ การส่งจะเกิดขึ้นในแท็บเบราว์เซอร์ใหม่ นี่คือตัวอย่างพื้นฐาน:

ฟังก์ชันสาธารณะ buildForm (อาร์เรย์ $form, FormStateInterface $form_state) {
  $แบบฟอร์ม['ค้นหา'] = [
    '#type' => 'ช่องข้อความ',
    '#title' => $this->t('ค้นหา'),
    '#required' => จริง,
  ];

  $form['image_button'] = [
    '#type' => 'image_button',
    '#value' => 'สวัสดี',
    '#src' => '/path/to/my/image',
    '#submit' => ['::mySubmitFunction'],
    '#attributes' => [
       // คุณลักษณะนี้จะเปิดแท็บเบราว์เซอร์ใหม่ในการส่งแบบฟอร์ม
      'formtarget' => '_blank' 
    ]
  ];

  คืนฟอร์ม $;
}

ฟังก์ชันสาธารณะ validateForm (อาร์เรย์ &$form, FormStateInterface $form_state) {
  // ทำอะไรก็ตามที่จำเป็นในการตรวจสอบแบบฟอร์ม
}

ฟังก์ชันสาธารณะ mySubmitFunction (อาร์เรย์ &$form, FormStateInterface $form_state) {
  $search = $form_state->getValue('ค้นหา'); // ดึงค่าฟิลด์ 'ค้นหา'
  // เนื่องจากเราต้องการเปลี่ยนเส้นทางไปยัง url ภายนอก 
  // เราจำเป็นต้องใช้ \Drupal\Core\Routing\TrustedRedirectResponse 
  // เนื่องจากไม่อนุญาตให้เปลี่ยนเส้นทางไปยัง URL ภายนอกโดยค่าเริ่มต้น
  $externalURL = \Drupal\Core\Url::fromUri('https://example.com', 
    ['ค้นหา' => ['ค้นหา' => $ค้นหา]]
  );
  $response = ใหม่ TrustedRedirectResponse($externalURL->toString());
  $form_state->setResponse($ตอบกลับ);
}
Jeirod avatar
cn flag
ขอบคุณ @misterdidi ฉันมีคำถามอื่นเกี่ยวกับรหัสของคุณ มีการเพิ่ม `query` ใน `$externalURL` ใน https://example.com หรือไม่ มันจะเป็น https://example.com`$search`?
misterdidi avatar
de flag
ไม่ ในตัวอย่างของฉัน คุณจะได้ URL https://example.com?search=my-search-value หากคุณต้องการบางอย่างเช่น https://example.com/my-search-value คุณต้องทำบางอย่างเช่น `$externalURL = \Drupal\Core\Url::fromUri('https://example.com/' . $ search);` (โดยที่คุณแน่ใจว่า $search นั้นเป็นมิตรกับ url)
Jeirod avatar
cn flag
ขอบคุณ @misterdidi ตอนนี้ฉันรู้วิธีที่จะทำให้มันเกิดขึ้น ขอบคุณมาก. มันช่วยฉันได้มากจริงๆ

โพสต์คำตอบ

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