Рейтинг:1

How do I use Feeds Tamper to process multiple CSV columns into a single field?

флаг cn

I have a CSV file that I import into my site using Feeds Tamper.

The CSV file has columns like

  • URL path
  • Favorite vegetable
  • Favorite fruit
  • Favorite pasta

In Drupal, my content type has a JSON Field, and I want to import "Favorite vegetable", "Favorite fruit", and "Favorite pasta" into the JSON field.

Is there a way to map all three favorites columns in the CSV file to the Drupal JSON field and combine their values in a Tamper plugin? I can't find any way to pull in data from multiple sources (the three CSV columns) in a Tamper plugin.

Here's the structure of a Tamper plugin.

<?php

namespace Drupal\tamper\Plugin\Tamper;

use Drupal\tamper\Annotation\Tamper;
use Drupal\tamper\TamperableItemInterface;
use Drupal\tamper\TamperBase;

/**
 * Plugin implementation for CSV import. Copied from the encode plugin.
 *
 * @Tamper(
 *   id = "json_import",
 *   label = @Translation("JSON Import"),
 *   description = @Translation("Custom import for JSON."),
 *   category = "Text",
 *   handle_multiples = TRUE
 * )
 */
class JsonImport extends TamperBase {

  /**
   * {@inheritdoc}
   */
  public function defaultConfiguration() {
    $config = parent::defaultConfiguration();
    return $config;
  }

  /**
   * {@inheritdoc}
   */
  public function tamper($data, TamperableItemInterface $item = NULL) {
    return $data;
  }

}
Рейтинг:3
флаг cn

Хорошо, вот правильный способ сделать это.

получить источник () вернет массив с ключами для всех столбцов CSV.

Имена столбцов обрабатываются следующим образом:

  • отдельные слова: Заглавные буквы сохранены. (желтый, странный

  • несколько слов: пробелы заменяются на _ и все в нижнем регистре. (Метатег становится мета_тег)

    /**
     * {@inheritdoc}
     */
    Тампер публичной функции ($ data, TamperableItemInterface $ item = NULL) {
      $csv_columns = $item->getSource();
    
      $json = [];
      $json['любимый_фрукт'] = $csv_columns['любимый_фрукт'];
      $json['любимый_овощ'] = $csv_columns['любимый_овощ'];
      $json['любимая паста'] = $csv_columns['любимая_паста'];
      $encoded_json = json_encode($json);
      вернуть $encoded_json;
    }
    
Рейтинг:-1
флаг cn

Я не понял, как получить доступ к нескольким столбцам CSV, но одним из способов обхода является использование Excel или другого программного обеспечения для работы с электронными таблицами, чтобы создать новый столбец и сгенерировать значения JSON в Excel. Это не очень хороший подход, потому что вам придется делать все экранирование в Excel, что не очень весело и чревато ошибками.

Например, в Excel можно использовать такую ​​формулу:

=CONCAT("{"+CHAR(34)+"любимыйфрукт"+CHAR(34)+":"+CHAR(34)+J3+CHAR(34)+","+CHAR(34)+"любимыйовощ"+ CHAR(34)+":"++CHAR(34)+K3+CHAR(34)+","+CHAR(34)+"любимая паста"+CHAR(34)+":"+CHAR(34)+C3 +СИМВОЛ(34)+"}")

Затем в Feeds Tamper вам нужно добавить Кодировать плагин и «Декодировать JSON», за которым следует Кодировать плагин снова с «Кодировать JSON». Если в вашем JSON нет ошибок, он будет импортирован в Drupal.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.