Skip to content
Snippets Groups Projects

Draft: #3011202 add feeds integration

2 files
+ 104
0
Compare changes
  • Side-by-side
  • Inline
Files
2
+ 77
0
<?php
namespace Drupal\metatag\Feeds\Target;
use Drupal\Core\Entity\EntityInterface;
use Drupal\Core\Field\FieldDefinitionInterface;
use Drupal\feeds\FeedInterface;
use Drupal\feeds\Plugin\Type\Target\FieldTargetBase;
use Drupal\metatag\Feeds\MetatagFieldTargetDefinition;
/**
* Provides a generic field target.
*
* @FeedsTarget(
* id = "metatag",
* field_types = {
* "metatag"
* }
* )
*/
class Metatag extends FieldTargetBase
{
/**
* {@inheritdoc}
*/
protected static function prepareTarget(FieldDefinitionInterface $field_definition)
{
// Get metatag manager.
$metatag_manager = \Drupal::service('metatag.manager');
// Load basic tags.
// All tags are not manageable until https://www.drupal.org/project/feeds/issues/3173943 is resolved.
$metatag_basic = $metatag_manager->sortedGroupsWithTags()['basic']['tags'] ?? [];
$metatag_og = $metatag_manager->sortedGroupsWithTags()['open_graph']['tags'] ?? [];
$metatag_advanced = $metatag_manager->sortedGroupsWithTags()['advanced']['tags'] ?? [];
$metatag_tags = array_merge($metatag_basic, $metatag_og, $metatag_advanced);
// Create a field target definition.
// Can't use default FieldTargetDefinition because of https://www.drupal.org/project/feeds/issues/3173942.
$definition = MetatagFieldTargetDefinition::createFromFieldDefinition($field_definition);
// Loop over basic tags.
foreach ($metatag_tags as $tag_key => $tag_value) {
// Add tag as property
$definition->addProperty($tag_key, $tag_value['label'], $tag_value['label']);
}
return $definition;
}
/**
* {@inheritdoc}
*/
public function setTarget(FeedInterface $feed, EntityInterface $entity, $field_name, array $values)
{
if ($values = $this->prepareValues($values)) {
$entity_target = $this->getEntityTarget($feed, $entity);
if (!empty($entity_target)) {
$item_list = $entity_target->get($field_name);
// Append these values to the existing values.
$values = array_merge($item_list->getValue(), $values)[0];
// Serialize values
$values = serialize($values);
$item_list->setValue($values);
}
}
}
}
Loading