Est-il possible dans Drupal 8 de changer un bouton d'envoi de formulaire régulier de Drupal en une étiquette de bouton?
Voici la sortie que je dois atteindre:
<button type="button" class="search-box__button">
<svg class="icon search-box__open">
<use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/build/img/svg-Sprite.svg#icon-search"></use>
</svg>
</button>
Eh bien, cela a été rapide ... J'ai utilisé mon intuition et j'ai pu l'accomplir en procédant comme suit:
/**
* @param $suggestions
* @param array $variables
*/
function mytheme_theme_suggestions_input_alter(&$suggestions, array $variables) {
$element = $variables['element'];
if (isset($element['#attributes']['data-twig-suggestion'])) {
$suggestions[] = 'input__' . $element['#type'] . '__' . $element['#attributes']['data-twig-suggestion'];
}
}
/**
* @param $form
* @param \Drupal\Core\Form\FormStateInterface $form_state
* @param $form_id
*/
function mytheme_form_alter(&$form, FormStateInterface $form_state, $form_id) {
if ($form['#id'] == 'views-exposed-form-search-results') {
$form['actions']['submit']['#attributes']['data-twig-suggestion'] = 'search_results_submit';
$form['actions']['submit']['#attributes']['class'][] = 'search-box__button';
}
}
{#
/**
* @file
* Theme override for an 'input' #type form element.
*
* Available variables:
* - attributes: A list of HTML attributes for the input element.
* - children: Optional additional rendered elements.
*
* @see template_preprocess_input()
*/
#}
<button{{ attributes }}>
<svg class="icon search-box__open">
<use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/themes/custom/mytheme/build/img/svg-Sprite.svg#icon-search"></use>
</svg>
</button>
Le formulaire est toujours soumis et fonctionne comme prévu. Est-ce l'approche générale ou du moins acceptable? J'irai avec cela à moins qu'il n'y ait une meilleure façon.
Vous pouvez simplement utiliser inline_template
.
$build['hello'] = [
'#type' => 'inline_template',
'#template' => '<button type="button" class="search-box__button">
<svg class="icon search-box__open">
<use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/build/img/svg-Sprite.svg#icon-search"></use>
</svg>
</button>',
];