metatags_quick-4.0.x-dev/metatags_quick.feeds.inc

metatags_quick.feeds.inc
<?php

/**
 * @file
 */

use Drupal\feeds\Feeds\TargetDefinition;
use Drupal\node\Entity\Node;

/**
 * Implements hook_feeds_parser_sources_alter().
 */
function metatags_quick_feeds_parser_sources_alter(array &$sources, $content_type) {
  if (!empty($content_type)) {
    $fields = \Drupal::service('entity_field.manager')->getFieldDefinitions('node', $content_type);
    foreach ($fields as $field_name => $field_definition) {
      if ($field_definition->getType() == 'metatags_quick') {
        $sources['parent:metatags_quick:' . $field_definition->get('field_meta_name')] = [
          'name' => t('Feed node: Metatag: @meta_name', ['@meta_name' => $field_definition->get('field_meta_name')]),
          'description' => t('Metatags the parent feed node.'),
          'callback' => 'metatags_quick_feeds_get_source',
        ];
      }
    }
  }
}

/**
 * Callback for mapping parent metatags to child metatag values.
 *
 * @param string $key
 *   The key as defined in the _feeds_parser_sources_alter() hook defined above.
 *
 * @return array
 *   The metatag value.
 */
function metatags_quick_feeds_get_source($source, $result, $key) {
  if ($node = Node::load($source->feed_nid)) {
    $results = [];
    $field = substr($key, 23);
    if (!empty($node->{$field})) {
      foreach ($node->{$field} as $item) {
        $results[] = $item['metatags_quick'];
      }
    }
    return $results;
  }
}

/**
 * Implements hook_feeds_processor_targets_alter() for metatags_quick fields.
 *
 * @see \Drupal\feeds\Processor\FeedsNodeProcessor::getMappingTargets()
 */
function metatags_quick_feeds_processor_targets_alter(array &$targets, $entity_type, $bundle_name) {
  foreach (\Drupal::entityTypeManager()->getFieldDefinitions($entity_type, $bundle_name) as $name => $field_definition) {
    if ($field_definition->getType() == 'metatags_quick') {
      $targets[$name] = new TargetDefinition([
        'name' => $field_definition->getLabel(),
        'callback' => 'metatags_quick_feeds_set_target',
        'description' => t('The @label metatag.', ['@label' => $field_definition->getLabel()]),
        'real_target' => $name,
      ]);
    }
  }
}

/**
 * Callback for mapping metatag fields.
 *
 * Implementation of hook_feeds_set_target().
 *
 * @param \Drupal\feeds\Feeds\FeedsSourceInterface $source
 *   A FeedsSource object.
 * @param object $entity
 *   The entity to map to.
 * @param string $target
 *   The target key on $entity to map to.
 * @param mixed $value
 *   The value to map. Can be an array or a string.
 */
function metatags_quick_feeds_set_target($source, $entity, $target, $value) {
  if (empty($value)) {
    return;
  }

  if (strpos($target, 'meta') === 0) {
    $field = [
      'value' => $value,
    // Strip off 'field_meta_'.
      'meta_name' => substr($target, 11),
    ];
    $entity->{$target}[] = $field;
  }
}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc