View source
<?php
namespace Drupal\bg_img_field\Plugin\Field\FieldType;
use Drupal\Core\Field\FieldStorageDefinitionInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\TypedData\DataDefinition;
use Drupal\image\Plugin\Field\FieldType\ImageItem;
use Robo\State\Data;
class BgImgItem extends ImageItem {
public static function defaultStorageSettings() {
$settings = parent::defaultStorageSettings();
$settings['css_settings']['css_selector'] = '';
$settings['css_settings']['css_repeat'] = 'inherit';
$settings['css_settings']['css_background_size'] = 'inherit';
$settings['css_settings']['css_background_position'] = 'inherit';
return $settings;
}
public function storageSettingsForm(array &$form, FormStateInterface $form_state, $has_data) {
$elements = parent::storageSettingsForm($form, $form_state, $has_data);
unset($elements['default_image']['alt']);
unset($elements['default_image']['title']);
return $elements;
}
public static function defaultFieldSettings() {
$settings = parent::defaultFieldSettings();
$settings['file_extensions'] = "png jpg jpeg svg";
$settings['alt_field'] = 0;
$settings['alt_field_required'] = 0;
$settings['css_settings']['css_selector'] = '';
$settings['css_settings']['css_repeat'] = 'inherit';
$settings['css_settings']['css_background_size'] = 'inherit';
$settings['css_settings']['css_background_position'] = 'inherit';
return $settings;
}
public static function schema(FieldStorageDefinitionInterface $field_definition) {
$schema = parent::schema($field_definition);
$schema['columns']['css_selector'] = [
'description' => t("CSS selector to target the background image placement."),
'type' => 'text',
];
$schema['columns']['css_repeat'] = [
'description' => t("CSS property that determines the repeat attribute."),
'type' => 'varchar',
'length' => 255,
];
$schema['columns']['css_background_size'] = [
'description' => t("CSS property that determines the background size attribute."),
'type' => 'varchar',
'length' => 255,
];
$schema['columns']['css_background_position'] = [
'description' => t("CSS property that determines the background position attribute."),
'type' => 'varchar',
'length' => 255,
];
return $schema;
}
public static function propertyDefinitions(FieldStorageDefinitionInterface $field_definition) {
$properties = parent::propertyDefinitions($field_definition);
$properties['css_selector'] = DataDefinition::create('string')
->setLabel(t('CSS Selector'))
->setDescription(t("CSS selector that will be used to place the background image. attribute."));
$properties['css_repeat'] = DataDefinition::create('string')
->setLabel(t('CSS Repeat Property'))
->setDescription(t("CSS attribute that set the repeating value of the background image."));
$properties['css_background_size'] = DataDefinition::create('string')
->setLabel(t('CSS Background Size Property'))
->setDescription(t("CSS attribute that set the background size value of the background image."));
$properties['css_background_position'] = DataDefinition::create('string')
->setLabel(t('CSS Background Position Property'))
->setDescription(t("CSS attribute that set the background position value of the background image."));
$properties['hide_css_Settings'] = DataDefinition::create('boolean')
->setLabel(t("Hide CSS Settings"))
->setDescription(t("Hides CSS settings on edit screens of the background image field type"));
return $properties;
}
public function fieldSettingsForm(array $form, FormStateInterface $form_state) {
$parentElements = parent::fieldSettingsForm($form, $form_state);
unset($parentElements['alt_field']);
unset($parentElements['alt_field_required']);
unset($parentElements['title_field']);
unset($parentElements['title_field_required']);
unset($parentElements['default_image']['alt']);
unset($parentElements['default_image']['title']);
$elements['css_settings'] = [
'#type' => 'details',
'#title' => $this
->t('CSS Settings'),
'#description' => $this
->t('Set default CSS properties for the background image.'),
'#open' => FALSE,
];
$token_types = [
$this
->getFieldDefinition()
->getTargetEntityTypeId(),
];
$css_option_settings = $this
->getSetting('css_settings');
$elements['css_settings']['css_selector'] = [
'#type' => 'textfield',
'#title' => $this
->t('Selector'),
'#description' => $this
->t('CSS Selector for background image.'),
'#default_value' => $css_option_settings['css_selector'],
'#token_types' => $token_types,
];
$elements['css_settings']['tokens'] = [
'#theme' => 'token_tree_link',
'#token_types' => $token_types,
'#global_types' => TRUE,
'#show_nested' => FALSE,
];
$elements['css_settings']['css_repeat'] = [
'#type' => 'radios',
'#title' => $this
->t('Repeat Options'),
'#description' => $this
->t('Add the css no repeat value to the background image.'),
'#default_value' => $css_option_settings['css_repeat'],
'#options' => [
"inherit" => $this
->t("inherit"),
"no-repeat" => $this
->t("no-repeat"),
"repeat" => $this
->t('repeat'),
],
];
$elements['css_settings']['css_background_size'] = [
'#type' => 'radios',
'#title' => $this
->t('Background Size'),
'#description' => $this
->t("Add the background size setting you would like for the image, use inherit for default."),
'#default_value' => $css_option_settings['css_background_size'],
'#options' => [
'inherit' => $this
->t('inherit'),
'auto' => $this
->t('auto'),
'cover' => $this
->t('cover'),
'contain' => $this
->t('contain'),
'initial' => $this
->t('initial'),
],
];
$elements['css_settings']['css_background_position'] = [
'#type' => 'radios',
'#title' => $this
->t('Background Position'),
'#description' => $this
->t('Set a background position'),
'#default_value' => $css_option_settings['css_background_position'],
'#options' => [
"inherit" => $this
->t("inherit"),
"left top" => $this
->t("left top"),
"left center" => $this
->t("left center"),
"left bottom" => $this
->t("left bottom"),
"right top" => $this
->t("right bottom"),
"right center" => $this
->t("right center"),
"right bottom" => $this
->t("right bottom"),
"center top" => $this
->t("center top"),
"center center" => $this
->t("center center"),
"center bottom" => $this
->t("center bottom"),
],
'#tree' => TRUE,
];
$elements['file_settings'] = [
'#type' => 'details',
'#title' => $this
->t("File Settings"),
'#open' => FALSE,
] + $parentElements;
return $elements;
}
}