<input type="number">
поля имеют стрелки вверх / вниз (увеличение / уменьшение), как мне удалить их (в Drupal 8) без использования JavaScript?
Клиент попросил убрать стрелки вверх / вниз, чтобы предотвратить случайное изменение значений. Я попытался добавить пользовательский виджет поля, который использует $element['#type'] = 'textfield';
.
Это приводит к ошибкам при изменении значений, так как Drupal ожидает целое число, но пользовательский fieldwidget предоставляет строку.
Таким образом, я ищу способ (вероятно, hook_form_alter) изменить отображение (убрав стрелки вверх / вниз), не меняя при этом выход (int vs string).
Ниже приведен код моего настраиваемого виджета поля.
<?php
namespace Drupal\fieldwidgets\Plugin\Field\FieldWidget;
use Drupal\Core\Field\FieldItemListInterface;
use Drupal\Core\Field\Plugin\Field\FieldWidget\StringTextareaWidget;
use Drupal\Core\Form\FormStateInterface;
use Symfony\Component\Validator\ConstraintViolationInterface;
/**
* Plugin implementation of the 'number No Increment' widget.
*
* @FieldWidget(
* id = "number_no_increment",
* label = @Translation("Number without -+ buttons"),
* field_types = {
* "decimal",
* "integer",
* }
* )
*/
class NumberNoIncrementWidget extends StringTextareaWidget {
/**
* {@inheritdoc}
*/
public function settingsForm(array $form, FormStateInterface $form_state) {
$element = parent::settingsForm($form, $form_state);
$element['rows']['#description'] = $this->t('Number widget without increment buttons.');
return $element;
}
/**
* {@inheritdoc}
*/
public function formElement(FieldItemListInterface $items, $delta, array $element, array &$form, FormStateInterface $form_state) {
$main_widget = parent::formElement($items, $delta, $element, $form, $form_state);
$element = $main_widget['value'];
$element['#default_value'] = (isset($items[$delta]->value) && isset($countries[$items[$delta]->value])) ? $items[$delta]->value : NULL;
$element['#type'] = 'textfield';
$element['#format'] = $items[$delta]->format;
$element['#base_type'] = $main_widget['value']['#type'];
return $element;
}
/**
* {@inheritdoc}
*/
public function errorElement(array $element, ConstraintViolationInterface $violation, array $form, FormStateInterface $form_state) {
if ($violation->arrayPropertyPath == ['format'] && isset($element['format']['#access']) && !$element['format']['#access']) {
// Ignore validation errors for formats if formats may not be changed.
return FALSE;
}
return $element;
}
}