Рейтинг:-3

Откройте новую вкладку с внешней ссылкой с помощью кнопки изображения

флаг cn

Я делаю собственный модуль с формой, которая имеет кнопку изображения. Кнопка изображения откроет внешнюю ссылку со значением текстового поля внутри формы. Я искал любое возможное решение в Интернете, но не могу найти решение.

Как мне закодировать кнопку submitForm, чтобы открыть внешнюю ссылку со значением формы текстового поля внутри формы.

Ниже приведены мои примеры кодов:

$ форма ['поиск'] = [             
      '#тип' => 'текстовое поле', 
      '#title' => 'Искать',
      '# требуется' => ИСТИНА
];

$ форма ['отправить'] = [
    '#type' => 'кнопка_изображения',
    '#value' => $this->t(''),
    '#src' => 'modules/myModule/src/images/myImage.png',
    '#submit' => ['::submitForm'],
];

Я также пытаюсь использовать эти коды для кнопки, но все равно не повезло:

$ форма ['отправить'] = [
    '#type' => 'предмет',
    '#разметка' => $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]),
];

Обратите внимание, что это не мои настоящие коды, а концепция моих кодов.

Любые комментарии и предложения приветствуются.

Заранее спасибо.

Рейтинг:0
флаг de

Если вы используете цель формы Атрибут HTML на кнопке изображения, отправка произойдет в новой вкладке браузера. Вот простой пример:

общедоступная функция buildForm (массив $ form, FormStateInterface $ form_state) {
  $ форма ['поиск'] = [
    '#тип' => 'текстовое поле',
    '#title' => $this->t('Искать'),
    '#required' => ИСТИНА,
  ];

  $ форма ['кнопка_изображения'] = [
    '#type' => 'кнопка_изображения',
    '#значение' => 'привет',
    '#src' => '/путь/к/моему/изображению',
    '#submit' => ['::mySubmitFunction'],
    '#атрибуты' => [
       // Этот атрибут откроет новую вкладку браузера при отправке формы
      'formtarget' => '_blank' 
    ]
  ];

  вернуть $ форму;
}

общедоступная функция validateForm (массив и $ форма, FormStateInterface $ form_state) {
  // Делаем любую необходимую проверку формы
}

публичная функция mySubmitFunction (массив и $ форма, FormStateInterface $ form_state) {
  $search = $form_state->getValue('search'); // Получить значение поля поиска
  // так как мы хотим перенаправить на внешний URL, 
  // нам нужно использовать \Drupal\Core\Routing\TrustedRedirectResponse 
  // потому что перенаправление на внешний URL по умолчанию запрещено
  $externalURL = \Drupal\Core\Url::fromUri('https://example.com', 
    ['запрос' => ['поиск' => $поиск]]
  );
  $response = новый TrustedRedirectResponse($externalURL->toString());
  $form_state->setResponse($response);
}
Jeirod avatar
флаг cn
Спасибо, @misterdidi. У меня есть еще один вопрос о вашем коде. Добавлен ли «запрос» в «$externalURL» к https://example.com? Значит, это будет https://example.com`$search`?
misterdidi avatar
флаг de
Нет, в моем примере вы получите 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
Спасибо, @misterdidi. Теперь я знаю, как это сделать. Большое тебе спасибо. Это действительно очень помогает мне.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.