/** * {@inheritdoc} */ public function preSave() { parent::preSave(); // Merge field defaults on top of global ones. $default_tags = metatag_get_default_tags(); // Get the value about to be saved. $current_value = $this->value; $current_tags = unserialize($current_value); // Only include values that differ from the default. // @TODO: When site defaults are added, account for those. $tags_to_save = []; foreach ($current_tags as $tag_id => $tag_value) { if (!isset($default_tags[$tag_id]) || $tag_value != $default_tags[$tag_id]) { $tags_to_save[$tag_id] = $tag_value; } } // Update the value to only save overridden tags. $this->value = serialize($tags_to_save); }
/** * {@inheritdoc} */ public function formElement(FieldItemListInterface $items, $delta, array $element, array &$form, FormStateInterface $form_state) { $item = $items[$delta]; $default_tags = metatag_get_default_tags(); // Retrieve the values for each metatag from the serialized array. $values = array(); if (!empty($item->value)) { $values = unserialize($item->value); } // Populate fields which have not been overridden in the entity. foreach ($default_tags as $tag_id => $tag_value) { if (!isset($values[$tag_id]) && !empty($tag_value)) { $values[$tag_id] = $tag_value; } } // Create the form element. $element = $this->metatagManager->form($values, $element); return $element; }