Skip to content

Instantly share code, notes, and snippets.

@apotashov
Forked from ftm-bill/d8-hook-update-n.php
Last active May 7, 2021 14:02
Show Gist options
  • Select an option

  • Save apotashov/078e116203f5519636f64a3895a56cfe to your computer and use it in GitHub Desktop.

Select an option

Save apotashov/078e116203f5519636f64a3895a56cfe to your computer and use it in GitHub Desktop.
Drupal 8: hook_update_N() Examples
<?php
// Add base field to entity
$storage_definition = BaseFieldDefinition::create('email')
->setLabel(t('Email address'))
->setDescription(t('The email address associated with the event participant.'))
->setDisplayOptions('form', [
'region' => 'hidden',
'weight' => 0,
]);
\Drupal::entityDefinitionUpdateManager()
->installFieldStorageDefinition('email', 'cmb_event_participant', 'cmb_event_participant', $storage_definition);
// Delete a single base field from entity
$update_manager = Drupal::service('entity.definition_update_manager');
$definition = $update_manager->getFieldStorageDefinition('participant_id', 'cmb_event_participant');
$update_manager->uninstallFieldStorageDefinition($definition);
// Delete multiple base fields from entity
$update_manager = Drupal::service('entity.definition_update_manager');
$base_fields = [
'email_confirmation',
'email_from_name',
'email_from_address',
'email_message'
];
foreach ($base_fields as $base_field) {
$definition = $update_manager->getFieldStorageDefinition($base_field, 'cmb_event');
$update_manager->uninstallFieldStorageDefinition($definition);
}
// Delete configurable fields
use Drupal\field\Entity\FieldStorageConfig;
use Drupal\field\Entity\FieldConfig;
$field_names = [
'field_cmb_author_img',
'field_cmb_author_sub_title'
];
// Delete field instances
foreach ($field_names as $field_name) {
$field = FieldConfig::loadByName('node', 'cmb_author', $field_name);
if (!empty($field)) {
$field->delete();
}
}
// Delete field storages
foreach ($field_names as $field_name) {
$field_storage = FieldStorageConfig::loadByName('node', $field_name);
if (!empty($field_storage)) {
$field_storage->delete();
}
}
// Delete content type
$content_type = \Drupal::entityManager()->getStorage('node_type')->load('cmb_author');
$content_type->delete();
// Add or update a view from config file
if (\Drupal::moduleHandler()->moduleExists('views')) {
$config_path = drupal_get_path('module', 'cmb_event_participant') . '/config/install/views.view.cmb_event_participants.yml';
$data = Yaml::parse(file_get_contents($config_path));
\Drupal::configFactory()->getEditable('views.view.cmb_event_participants')->setData($data)->save(TRUE);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment