public function SlideConfigurationForm::buildForm in Nivo Slider 8
Form constructor.
Parameters
array $form: An associative array containing the structure of the form.
\Drupal\Core\Form\FormStateInterface $form_state: The current state of the form.
Return value
array The form structure.
Overrides ConfigFormBase::buildForm
File
- src/
Form/ SlideConfigurationForm.php, line 23
Class
Namespace
Drupal\nivo_slider\FormCode
public function buildForm(array $form, FormStateInterface $form_state) {
$config = $this
->config('nivo_slider.settings');
// Get all available slides.
$slides = $config
->get('slides');
// Upload.
$form['upload'] = [
'#type' => 'file',
'#title' => $this
->t('Upload a new slide image'),
];
// Draggable table.
$form['order'] = [
'#type' => 'table',
'#header' => [
$this
->t('Name'),
$this
->t('Published'),
$this
->t('Delete'),
$this
->t('Weight'),
],
'#empty' => $this
->t('There are no slides yet.'),
'#tabledrag' => [
[
'order',
'sibling',
'slide-weight',
],
],
'#tree' => TRUE,
];
// Vertical tab.
$form['images'] = [
'#type' => 'vertical_tabs',
'#title' => $this
->t('Slider images'),
'#tree' => TRUE,
];
// Process available slides.
foreach ($slides as $slide => $settings) {
// Table.
$form['order'][$slide]['#attributes']['class'][] = 'draggable';
$form['order'][$slide]['#weight'] = $settings['weight'];
$form['order'][$slide]['title'] = [
'#plain_text' => $settings['title'],
];
$form['order'][$slide]['published'] = [
'#type' => 'checkbox',
'#default_value' => $settings['published'],
];
$form['order'][$slide]['delete'] = [
'#type' => 'checkbox',
'#default_value' => $settings['delete'],
];
$form['order'][$slide]['weight'] = [
'#type' => 'weight',
'#title' => $this
->t('Weight for @title', [
'@title' => $settings['title'],
]),
'#title_display' => 'invisible',
'#default_value' => $settings['weight'],
'#attributes' => [
'class' => [
'slide-weight',
],
],
];
// Vertical Tabs.
$form['images'][$slide] = [
'#type' => 'details',
'#group' => 'images',
'#title' => $this
->t('Image @number: @title', [
'@number' => $slide + 1,
'@title' => isset($settings['title']) ? $settings['title'] : '',
]),
'#weight' => $slide,
];
// Load the slide's image file.
$file = file_load($settings['fid']);
// Create a preview image of the slide using an image style if appropriate.
// if ($config->get('options.image_style') == FALSE && !empty($file)) {
$variables = array(
// 'style_name' => 'thumbnail',
'uri' => $file
->getFileUri(),
);
// The image.factory service will check if our image is valid.
$image = \Drupal::service('image.factory')
->get($file
->getFileUri());
if ($image
->isValid()) {
$variables['width'] = $image
->getWidth();
$variables['height'] = $image
->getHeight();
}
else {
$variables['width'] = $variables['height'] = NULL;
}
$image = [
'#theme' => 'image',
'#width' => $variables['width'],
'#height' => $variables['height'],
// '#style_name' => $variables['style_name'],
'#uri' => $variables['uri'],
];
// }
// else {
// $variables = [
// 'uri' => $file->uri,
// 'style_name' => $config->get('options.image_style_slide'),
// ];
// $image = theme('image_style', $variables);
// }
$form['images'][$slide]['preview'] = $image;
$form['images'][$slide]['fid'] = [
'#type' => 'hidden',
'#value' => isset($settings['fid']) ? $settings['fid'] : '',
];
$form['images'][$slide]['title'] = [
'#type' => 'textfield',
'#title' => $this
->t('Title'),
'#default_value' => isset($settings['title']) ? $settings['title'] : '',
'#description' => $this
->t('The title is used as alternative text for the slide image.'),
];
$form['images'][$slide]['description'] = [
'#type' => 'text_format',
'#title' => $this
->t('Description'),
'#default_value' => isset($settings['description']['value']) ? $settings['description']['value'] : '',
'#format' => isset($settings['description']['format']) ? $settings['description']['format'] : NULL,
'#description' => $this
->t('The description will be displayed with the slide image.'),
];
$form['images'][$slide]['url'] = [
'#type' => 'textfield',
'#title' => $this
->t('Link slide to URL'),
'#default_value' => isset($settings['url']) ? $settings['url'] : '',
'#description' => $this
->t('Specify a path or an absolute URL. An example path is @blog for the blog page. An example absolute URL is @url for the Drupal website. @front is the front page.', [
'@blog' => 'blog',
'@url' => 'http://drupal.org',
'@front' => '<front>',
]),
];
$form['images'][$slide]['visibility'] = [
'#type' => 'textarea',
'#title' => $this
->t('Show slide on specific pages'),
'#description' => $this
->t("Specify pages by using their paths. Enter one path per line. The '*' character is a wildcard. Example paths are @blog for the blog page and @blog-wildcard for every personal blog. @front is the front page.", [
'@blog' => 'blog',
'@blog-wildcard' => 'blog/*',
'@front' => '<front>',
]),
'#default_value' => isset($settings['visibility']) ? $settings['visibility'] : '*',
];
$form['images'][$slide]['transition'] = [
'#type' => 'select',
'#title' => $this
->t('Transition'),
'#options' => [
'' => $this
->t('- Default -'),
'sliceDown' => $this
->t('Slice Down'),
'sliceDownLeft' => $this
->t('Slice Down Left'),
'sliceUp' => $this
->t('Slice Up'),
'sliceUpLeft' => $this
->t('Slice Up Left'),
'sliceUpDown' => $this
->t('Slice Up Down'),
'sliceUpDownLeft' => $this
->t('Slice Up Down Left'),
'fold' => $this
->t('Fold'),
'fade' => $this
->t('Fade'),
'random' => $this
->t('Random'),
'slideInRight' => $this
->t('Slide In Right'),
'slideInLeft' => $this
->t('Slide in Left'),
'boxRandom' => $this
->t('Box Random'),
'boxRain' => $this
->t('Box Rain'),
'boxRainReverse' => $this
->t('Box Rain Reverse'),
'boxRainGrow' => $this
->t('Box Rain Grow'),
'boxRainGrowReverse' => $this
->t('Box Rain Grow Reverse'),
],
'#description' => $this
->t('Select a transition. Selecting an option other than %default will force this slide to use the selected transition every time it appears. It overrides all other effect settings.', [
'%default' => '- Default -',
]),
'#default_value' => isset($settings['transition']) ? $settings['transition'] : '',
];
}
return parent::buildForm($form, $form_state);
}