Score:0

ฉันจะย้ายฟิลด์ย่อหน้าที่ซ้อนกันได้อย่างไร

ธง fi

ฉันมีย่อหน้ากระดาษห่อ เค้าโครง (para_layout)ซึ่งมีฟิลด์ดังต่อไปนี้

ป้อนคำอธิบายรูปภาพที่นี่

ฉันสร้างย่อหน้าและโครงสร้างฟิลด์เดียวกันในเว็บไซต์ Drupal 9 ฉันสร้างปลั๊กอินการโยกย้ายที่กำหนดเองต่อไปนี้

รหัส: custom_para1
ป้ายกำกับ: การย้ายย่อหน้าแบบกำหนดเอง
การโยกย้าย_กลุ่ม: กำหนดเอง
การโยกย้าย_tags:
  - โหนด
แหล่งที่มา:
  ปลั๊กอิน: d7_paragraphs_item
  กลุ่ม: para_layout
กระบวนการ:
  field_left_column: field_left_column
  field_right_column: field_right_column
ปลายทาง:
  ปลั๊กอิน: 'entity_reference_revisions:paragraph'
  default_bundle: para_layout

drush มิม custom_para1 แสดงว่ากำลังประมวลผลรายการ แต่ฉันไม่เห็นข้อมูลใด ๆ ที่ย้ายไปยังตารางฟิลด์ที่เกี่ยวข้อง

ใช้งานได้ดีเมื่อช่องเป็นช่องข้อความปกติแทนที่จะเป็นช่องย่อหน้า

Kevin avatar
in flag
คุณต้องย้ายข้อมูลย่อหน้าก่อน แล้วจึงย้ายบันทึกโฮสต์ที่โหนดอ้างถึงเพื่อเชื่อมต่อทั้งสองรายการ
ARUN avatar
fi flag
@apaderno ดังนั้นบันทึกโฮสต์จะถูกแทรกโดยตรงผ่าน SQL หรือสามารถโอนย้ายผ่าน yml โอนย้ายได้หรือไม่
apaderno avatar
us flag
คุณย้ายระเบียนโฮสต์ด้วยวิธีเดียวกับที่คุณย้ายข้อมูลย่อหน้า ฉันจะรอความคิดเห็นจาก @Kevin เนื่องจากเขาโพสต์ความคิดเห็นแรก
ARUN avatar
fi flag
@apaderno ฉันพยายามโอนย้ายรายการโฮสต์ แต่ผลลัพธ์ก็เหมือนกัน Drush show ประมวลผลบางอย่าง แต่ไม่มีอะไรแสดงใน DB (ฉันได้ย้ายเนื้อหาย่อหน้าแล้ว) ฉันควรเปลี่ยน 'ปลั๊กอินปลายทาง' เป็นอย่างอื่นหรือไม่
Score:3
ธง fr

นี่คือวิธีที่ฉันสามารถบรรลุได้

การย้ายย่อหน้า:

รหัส: fup_balance_csv_import

....
....

กระบวนการ:
  field_upload: field_upload
  field_download: field_download
  field_total: field_total

ปลายทาง:
  ปลั๊กอิน: entity_reference_revisions:ย่อหน้า
  default_bundle: fup_balance

การโยกย้ายโหนด:

รหัส: subscribe_list_csv_import

.............
........

กระบวนการ:
  # ฟิลด์ย่อหน้า
  pseudo_field_fup_details:
    -
      ปลั๊กอิน: การโยกย้าย_lookup
      การย้ายข้อมูล: fup_balance_csv_import
      ที่มา: title # ตัวระบุเฉพาะ.
  field_fup_details:
    -
      ปลั๊กอิน: sub_process
      แหล่งที่มา:
        - '@pseudo_field_fup_details'
      กระบวนการ:
        target_id: '0'
        target_revision_id: '1'

โดยใช้กระบวนการโยกย้ายมาตรฐาน บางครั้งอาจไม่มีประโยชน์ ดังนั้นคุณต้องเขียนปลั๊กอินการย้ายข้อมูลของคุณเอง ด้านล่างนี้คือวิธีทำ

# ฟิลด์ย่อหน้า
field_country_time_zones:
  -
    ปลั๊กอิน: country_timezones_paragraphs
    แหล่งที่มา: 
      field_1: source_field_1
      field_2: source_field_2

ปลั๊กอินการโยกย้าย:

<?php

เนมสเปซ Drupal\countries_list_migration\Plugin\migrate\process;

ใช้ Drupal\Core\Plugin\ContainerFactoryPluginInterface;
ใช้ Drupal\migrate\MigrateExecutableInterface
ใช้ Drupal\migrate\ProcessPluginBase;
ใช้ Drupal\migrate\Row;
ใช้ Symfony\Component\DependencyInjection\ContainerInterface;
ใช้ Drupal\paragraphs\Entity\Paragraph;
ใช้ Drupal\Core\Logger\LoggerChannelFactoryInterface

/**
 * จัดเตรียมปลั๊กอินการย้ายข้อมูล Country_timezones
 *
 * การใช้งาน:
 *
 *@รหัส
 * กระบวนการ:
 *   บาร์:
 * ปลั๊กอิน: country_timezones_paragraphs
 * ที่มา: source_field_name
 * @endcode
 *
 * @MigrateProcessPlugin(
 * id = "country_timezones_paragraphs",
 * handle_multiples = จริง
 * )
 */
คลาส CountryTimezonesParagraphs ขยาย ProcessPluginBase ใช้ ContainerFactoryPluginInterface {

  /**
   * บริการตัดไม้
   *
   * @var \Drupal\Core\Logger\LoggerChannelFactoryInterface
   */
  ป้องกัน $logger;

  /**
   * สร้างปลั๊กอิน CountryTimezones
   *
   * @param อาร์เรย์ $configuration
   * การกำหนดค่าปลั๊กอิน
   * @param สตริง $plugin_id
   * รหัสปลั๊กอิน
   * @param ผสม $plugin_definition
   * คำจำกัดความของปลั๊กอิน
   * @param \Drupal\Core\Logger\LoggerChannelFactoryInterface $logger
   * บริการคนตัดไม้
   */
  ฟังก์ชันสาธารณะ __construct (อาร์เรย์ $configuration, $plugin_id, $plugin_definition, LoggerChannelFactoryInterface $logger) {
    พาเรนต์::__construct($configuration, $plugin_id, $plugin_definition);
    $this->logger = $logger->get('countries_list_migration');
  }

  /**
   * {@inheritdoc}
   */
  การสร้างฟังก์ชันสแตติกสาธารณะ (ContainerInterface $container, อาร์เรย์ $configuration, $plugin_id, $plugin_definition) {
    ส่งคืนค่าคงที่ใหม่ (
      $configuration,
      $plugin_id,
      $plugin_definition,
      $container->get('logger.factory')
    );
  }

  /**
   * {@inheritdoc}
   */
  การแปลงฟังก์ชันสาธารณะ ($value, MigrateExecutableInterface $migrate_executable, แถว $row, $destination_property) {

  $วรรค =[];
  
   ถ้า (isset($value)) {
      $paragraphs[] = $this->createCountryTimezonesParagraphsItem($value);
    }

    กลับ $paragraphs;
  }

  /**
   * {@inheritdoc}
   */
  ฟังก์ชั่นสาธารณะหลายรายการ (): บูล {
    กลับ TRUE;
  }


  ฟังก์ชันที่มีการป้องกัน createCountryTimezonesParagraphsItem(array $item): array {

    $paragraph = ย่อหน้า::create([

      'type' => 'country_timezones',

      'field_1' => [
        'value' => $item['field_1'],
      ]
      'field_2' => [
        'value' => $item['field_2'],
      ]
    ]);

    $วรรค->บันทึก();

    กลับ [
      'target_id' => $paragraph->id(),
      'target_revision_id' => $paragraph->getRevisionId(),
    ];
  }

}

หวังว่ามันจะเป็นประโยชน์

Score:0
ธง in

ดังที่ฉันได้กล่าวไว้ในความคิดเห็น ปลั๊กอินในปัจจุบันทำให้แน่ใจว่าคอลเล็กชันฟิลด์ถูกย้ายไปยังกลุ่มย่อหน้าและเหมือนกันสำหรับย่อหน้า d7 ข้อมูลในฟิลด์จะไม่ถูกย้าย นี่เป็นช่องว่างที่คุณต้องเติมเอง ดังนั้นคุณต้องเขียนข้อกำหนดการย้ายข้อมูล YAML เพื่อทำสิ่งนี้

ฉันเพิ่งย้ายข้อมูล d7 เป็น d9 ที่มีข้อกำหนดนี้ (โดยมี Field Collections รวมอยู่ด้วยที่เราย้ายพอร์ต)

คุณจะต้องสร้างการโยกย้ายด้วยปลั๊กอินต้นทาง (แบบสอบถาม SQL ที่ดึงข้อมูลที่คุณต้องการเสียบ) เพื่อทำสิ่งต่อไปนี้:

  1. ย้ายย่อหน้าจริงทั้งหมดและข้อมูลภาคสนาม
  2. ย้ายย่อหน้าที่ถือย่อหน้า (เก็บข้อมูลฟิลด์)
  3. ย้ายเรกคอร์ดของเอนทิตีที่อ้างอิงย่อหน้าที่ถือย่อหน้าจากขั้นตอนที่ 2 (ใช้การโยกย้าย_lookup เพื่อค้นหารหัสปลายทางใหม่ใน D9)
ARUN avatar
fi flag
จะดีมากถ้าคุณสามารถให้ตัวอย่างไฟล์ yaml เพื่ออ้างอิง ดังที่ฉันได้กล่าวไปแล้วในคำถาม yaml ที่ฉันลองใช้งานไม่ได้

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา