Puncte:-3

Deschideți o filă nouă cu link extern folosind un buton imagine

drapel cn

Fac un modul personalizat cu un formular care are un buton imagine. Butonul imagine va deschide linkul extern cu valoarea unui câmp de text în interiorul formularului. Am căutat orice soluție posibilă pe internet, dar nu am găsit o soluție.

Cum codez un buton submitForm pentru a deschide o legătură externă cu o valoare de formular a unui câmp text în interiorul formularului.

Mai jos sunt exemplele mele de coduri:

$form['căutare'] = [             
      '#type' => 'câmp text', 
      '#title' => 'Căutați',
      '#required' => TRUE
];

$form['trimite'] = [
    '#type' => 'image_button',
    '#value' => $this->t(''),
    '#src' => 'module/myModule/src/images/myImage.png',
    '#submit' => ['::submitForm'],
];

De asemenea, încerc să folosesc aceste coduri pentru buton, dar tot nu am avut succes:

$form['trimite'] = [
    '#type' => 'articol',
    '#markup' => $this->t('
        <a href=\'https://www.google.com/search?%search\' target="_blank">
           <img width="30" height="30" border="0" align="center" src=\'module/myModule/src/images/myImage.png\'/>
        </a>', ['%search' => $search]),
];

Vă rugăm să rețineți că acestea nu sunt codurile mele reale, dar acestea sunt conceptul codurilor mele.

Orice comentarii și sugestii sunt binevenite.

Multumesc anticipat.

Puncte:0
drapel de

Dacă utilizați formtarget Atribut HTML pe butonul imagine, trimiterea se va face într-o nouă filă de browser. Iată un exemplu de bază:

funcția publică buildForm(array $form, FormStateInterface $form_state) {
  $form['căutare'] = [
    '#type' => 'câmp text',
    '#title' => $this->t('Căutați'),
    '#required' => TRUE,
  ];

  $form['image_button'] = [
    '#type' => 'image_button',
    '#value' => 'bună ziua',
    '#src' => '/path/to/my/image',
    '#submit' => ['::mySubmitFunction'],
    '#attributes' => [
       // Acest atribut va deschide o nouă filă de browser la trimiterea formularului
      'formtarget' => '_blank' 
    ]
  ];

  returnează $form;
}

funcția publică validateForm(matrice &$form, FormStateInterface $form_state) {
  // Faceți orice validare a formularului este necesară
}

funcția publică mySubmitFunction(matrice &$form, FormStateInterface $form_state) {
  $căutare = $form_state->getValue('căutare'); // Preluați valoarea câmpului „căutare”.
  // deoarece vrem să redirecționăm către o adresă URL externă, 
  // trebuie să folosim \Drupal\Core\Routing\TrustedRedirectResponse 
  // deoarece redirecționarea către o adresă URL externă nu este permisă în mod implicit
  $externalURL = \Drupal\Core\Url::fromUri('https://example.com', 
    ['query' => ['căutare' => $căutare]]
  );
  $response = new TrustedRedirectResponse($externalURL->toString());
  $form_state->setResponse($response);
}
Jeirod avatar
drapel cn
Mulțumesc, @misterdidi. Am o altă întrebare despre codul tău. Este „interogarea” din „$externalURL” adăugată la https://example.com? Deci va fi https://example.com`$search`?
misterdidi avatar
drapel de
Nu, în exemplul meu, veți ajunge cu adresa URL https://example.com?search=my-search-value. Dacă doriți ceva de genul https://example.com/my-search-value, trebuie să faceți ceva de genul `$externalURL = \Drupal\Core\Url::fromUri('https://example.com/' . $ search);` (cu condiția să vă asigurați că $search este prietenos cu adresa URL).
Jeirod avatar
drapel cn
Mulțumesc, @misterdidi. Acum știu cum să fac asta. Mulțumesc foarte mult. Chiar mă ajută foarte mult.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.