webform_example_element_properties.module in Webform 6.x
Same filename and directory in other branches
Provides an example that shows how to add custom properties to Webform elements.
File
modules/webform_example_element_properties/webform_example_element_properties.moduleView source
<?php
/**
* @file
* Provides an example that shows how to add custom properties to Webform elements.
*/
use Drupal\Core\Form\FormStateInterface;
/**
* Implements hook_webform_element_default_properties_alter().
*/
function webform_example_element_properties_webform_element_default_properties_alter(array &$properties, array &$definition) {
// Add custom data property to all webform elements.
// Setting the custom property to an empty string makes the corresponding
// element defined via hook_webform_element_configuration_form_alter()
// automatically visible.
$properties['custom_data'] = '';
}
/**
* Implements hook_webform_element_translatable_properties_alter().
*/
function webform_example_element_properties_webform_element_translatable_properties_alter(array &$properties, array &$definition) {
// Make the custom data property translatable.
$properties[] = 'custom_data';
}
/**
* Implements hook_webform_element_configuration_form_alter().
*/
function webform_example_element_properties_webform_element_configuration_form_alter(&$form, FormStateInterface $form_state) {
// If you want add element properties to specific element type, you can use
// the below code to the current element's type and more.
/** @var Drupal\webform_ui\Form\WebformUiElementEditForm $form_object */
$form_object = $form_state
->getFormObject();
$element_plugin = $form_object
->getWebformElementPlugin();
$element_label = $element_plugin
->getPluginLabel();
$element_type = $element_plugin
->getTypeName();
// Append custom properties details container and textfield element.
$t_args = [
'@label' => $element_label,
'@type' => $element_type,
];
$form['custom_properties'] = [
'#type' => 'details',
'#title' => t('Custom properties'),
'#description' => t('The below custom properties are provided and managed by the webform_example_element_properties.module.'),
'#open' => TRUE,
// Add custom properties after all fieldset elements, which have a
// weight of -20.
// @see \Drupal\webform\Plugin\WebformElementBase::buildConfigurationForm
'#weight' => -10,
];
$form['custom_properties']['custom_data'] = [
'#type' => 'textfield',
'#title' => t('Custom data'),
'#description' => t("The custom data value will be added to @label (@type) data-* attributes.", $t_args),
];
}
/**
* Implements hook_webform_element_alter().
*/
function webform_example_element_properties_webform_element_alter(array &$element, FormStateInterface $form_state, array $context) {
// Add data-custom to the element's attributes.
if (!empty($element['#custom_data'])) {
$element['#attributes']['data-custom'] = $element['#custom_data'];
}
}