Điểm:1

Làm cách nào để sử dụng Trình giả mạo nguồn cấp dữ liệu để xử lý nhiều cột CSV thành một trường?

lá cờ cn

Tôi có tệp CSV mà tôi nhập vào trang web của mình bằng cách sử dụng Giả mạo nguồn cấp dữ liệu.

Tệp CSV có các cột như

  • đường dẫn URL
  • rau yêu thích
  • Trái cây yêu thích
  • mì ống yêu thích

Trong Drupal, loại nội dung của tôi có một Trường JSONvà tôi muốn nhập "Rau yêu thích", "Trái cây yêu thích" và "Mì ống yêu thích" vào trường JSON.

Có cách nào để ánh xạ cả ba cột yêu thích trong tệp CSV sang trường Drupal JSON và kết hợp các giá trị của chúng trong plugin Tamper không? Tôi không thể tìm thấy bất kỳ cách nào để lấy dữ liệu từ nhiều nguồn (ba cột CSV) trong plugin Tamper.

Đây là cấu trúc của một plugin Tamper.

<?php

không gian tên Drupal\tamper\Plugin\Tamper;

sử dụng Drupal\tamper\Annotation\Tamper;
sử dụng Drupal\tamper\TamperableItemInterface;
sử dụng Drupal\tamper\TamperBase;

/**
 * Triển khai plugin để nhập CSV. Sao chép từ plugin mã hóa.
 *
 * @Tamper(
 * id = "json_import",
 * nhãn = @Translation("Nhập JSON"),
 * description = @Translation("Nhập tùy chỉnh cho JSON."),
 * danh mục = "Văn bản",
 * handle_multiples = TRUE
 * )
 */
lớp JsonImport mở rộng TamperBase {

  /**
   * {@inheritdoc}
   */
  hàm công khai defaultConfiguration() {
    $config = cha mẹ::defaultConfiguration();
    trả về $config;
  }

  /**
   * {@inheritdoc}
   */
  giả mạo chức năng công cộng($data, TamperableItemInterface $item = NULL) {
    trả lại dữ liệu $;
  }

}
Điểm:3
lá cờ cn

Ok, đây là cách chính xác để làm điều này.

getSource() sẽ trả về một mảng có khóa cho tất cả các cột CSV.

Tên cột được xử lý như sau:

  • từ đơn: Viết hoa được giữ nguyên. (màu vàng, kỳ dị

  • nhiều từ: Dấu cách được thay thế bằng _ và tất cả chữ thường. (Thẻ meta trở thành thẻ meta)

    /**
     * {@inheritdoc}
     */
    giả mạo chức năng công cộng($data, TamperableItemInterface $item = NULL) {
      $csv_columns = $item->getSource();
    
      $json = [];
      $json['favoriteFruit'] = $csv_columns['favorite_fruit'];
      $json['Rau yêu thích'] = $csv_columns['rau_yêu thích'];
      $json['Mì ống yêu thích'] = $csv_columns['mì ống yêu thích'];
      $encoded_json = json_encode($json);
      trả về $encoded_json;
    }
    
Điểm:-1
lá cờ cn

Tôi chưa tìm ra cách truy cập vào nhiều cột CSV, nhưng có một giải pháp thay thế là sử dụng Excel hoặc phần mềm bảng tính khác để tạo một cột mới và tạo các giá trị JSON trong Excel. Đây không phải là một cách tiếp cận tốt vì bạn phải thực hiện tất cả các thao tác thoát trong Excel, điều này không thú vị và dễ bị lỗi.

Ví dụ: trong Excel, bạn có thể sử dụng công thức như sau:

=CONCAT("{"+CHAR(34)+"Trái cây yêu thích"+CHAR(34)+":"+CHAR(34)+J3+CHAR(34)+","+CHAR(34)+"Rau yêu thích"+ CHAR(34)+":"++CHAR(34)+K3+CHAR(34)+","+CHAR(34)+"Mì ống yêu thích"+CHAR(34)+":"+CHAR(34)+C3 +CHAR(34)+"}")

Sau đó, trong Feeds Tamper, bạn cần thêm mã hóa plugin và "Giải mã JSON" theo sau là mã hóa plugin lại với "Mã hóa JSON". Nếu JSON của bạn không có bất kỳ lỗi nào, nó sẽ được nhập vào Drupal.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.