הגדרת מודול Migrate להעברת תוכן ב-Drupal

העברת תוכן ידנית בין גרסאות Drupal או ממערכות אחרות היא תהליך ארוך ומסוכן שבו נתונים עלולים ללכת לאיבוד בקלות. אנו מגדירים את מודול ה-Migrate כדי להפוך את החילוץ, ההמרה והטעינה של המידע לאוטומטיים, תוך הבטחת דיוק ושלמות. הצוות שלנו מספק העברת מעבר מלאה - מהבדיקה ועד לתמיכה לאחר ההשקה.

פיתוח ותחזוקה של כל סוגי האתרים:

אתרי מידע או יישומי אינטרנט
אתרי תדמית, דפי נחיתה, אתרי חברה, קטלוגים מקוונים, חידונים, אתרי קידום, בלוגים, מקורות חדשות, פורטלי מידע, פורומים, אגרגטורים
אתרי מסחר אלקטרוני או יישומי אינטרנט
חנויות מקוונות, פורטלי B2B, שווקים, בורסות מקוונות, אתרי קאשבק, בורסות, פלטפורמות דרופשיפינג, מנתחי מוצרים
יישומי אינטרנט לניהול תהליכים עסקיים
מערכות CRM, מערכות ERP, פורטלים ארגוניים, מערכות ניהול ייצור, מנתחי מידע
אתרי שירות אלקטרוני או יישומי אינטרנט
פלטפורמות מודעות, בתי ספר מקוונים, בתי קולנוע מקוונים, בוני אתרים, פורטלים לשירותים אלקטרוניים, פלטפורמות אירוח וידאו, פורטלים נושאיים

אלה רק חלק מהסוגים הטכניים של אתרים שאנו עובדים איתם, ולכל אחד מהם יכולים להיות מאפיינים ופונקציונליות ספציפיים משלו, וכן ניתן להתאים אותם לצרכים ולמטרות הספציפיים של הלקוח.

השירותים שאנו מציעים
מציג 1 מתוך 1כל 2062 השירותים
הגדרת מודול Migrate להעברת תוכן ב-Drupal
מורכב
~3-5 ימים

הכישורים שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אתר חברה B2B ADVANCE
    פיתוח אתר חברה B2B ADVANCE
    1502
  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1344
  • פיתוח אתר עבור BELFINGROUP
    פיתוח אתר עבור BELFINGROUP
    1052
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1307
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1049
  • פיתוח אתר לחברת FIXPER
    פיתוח אתר לחברת FIXPER
    1033

מדריך זה מכסה הגירת Drupal באמצעות מודול Migrate. דמיינו את התרחיש הבא: אתם מגירים חנות מסחר אלקטרוני עם 80,000 מוצרים, היסטוריית הזמנות ופרופילי משתמשים מ-Drupal 7 ישן ל-Drupal 10. הקטגוריות עוברות מבנה מחדש, התמונות מאוחסנות בנתיבים לא סטנדרטיים, וטבלת התגובות מכילה 300,000 רשומות עם תגובות מקוננות בעומק של עד 10 רמות. ביצוע ידני של משימה זו ייקח חודשים, ושגיאות יהיו בלתי נמנעות. אנו משתמשים במסגרת ה-ETL המובנית של Drupal — מודול Migrate — אשר מחלץ, הופך וטוען נתונים. במשך חמש שנים, השלמנו למעלה מ-50 הגירות, תוך הבטחת שלמות נתונים (99.9%) ועמידה מלאה במבנה החדש. עם תצורה נכונה, Migrate מעבד 10,000 רשומות תוך 15–20 דקות, ומשיג למעלה מ-10,000 רשומות לשעה. עלות ההגירה הטיפוסית שלנו נעה בין $500 ל-$3000 בהתאם למורכבות. צרו קשר לבדיקת פרויקט ותכנית הגירה אופטימלית.

הארכיטקטורה של Migrate

המודול מורכב משלושה רכיבים לוגיים המוגדרים באמצעות קבצי YAML:

  • מקור (Source) — מקור נתונים: CSV, SQL, JSON, Drupal 7 ישן, WordPress, כל API.
  • עיבוד (Process) — טרנספורמציה: מיפוי שדות, המרת פורמטים, העשרה באמצעות תוספים.
  • יעד (Destination) — לאן לכתוב: Node, Term, User, File, Config.

כל הגירה מוגדרת בקובץ config/install/migrate_plus.migration.*.yml. אנו משתמשים ב-Migrate Plus, Migrate Tools ובתוספי מקור נוספים. כל ההגירות יורשות מהמחלקה הבסיסית Migration.

קריטריון Migrate ייבוא ידני
מהירות שעות עבור 10,000 רשומות ימים או שבועות
טרנספורמציות תוספים מובנים סקריפטים ידניים
טיפול בשגיאות רישום לוג, המשך על כישלון ללא בקרה
שימוש חוזר תצורות YAML התחלה מאפס בכל פעם

Migrate מהיר בדרך כלל פי 10 מהעברה ידנית בהשוואת זמן פיתוח וביצוע.

כיצד להגדיר הגירה ב-Drupal?

התהליך כולל שישה שלבים:

  1. ניתוח נתוני המקור: מבנה, סוגים, קשרים, נפח. לדוגמה, קביעה שקטגוריות מאוחסנות בטבלה נפרדת ותמונות הן כתובות URL חיצוניות.
  2. תכנון הגירות: מיפוי שדות, בחירת תוספי מקור, הגדרת תלויות (לדוגמה, קטגוריות תחילה, ולאחר מכן מאמרים).
  3. יישום: כתיבת YAML, תוספים מותאמים אישית, בדיקה על מדגם של 10–20 רשומות.
  4. בדיקות: אימות שלמות, רגרסיה, תיקון שגיאות — הרצה על עותק מלא.
  5. ביצוע: ייבוא בשלבים עם ניטור, גלגול לאחור במידת הצורך.
  6. תמיכה: התאמות למקורות חדשים, עדכונים לאחר שחרורי Drupal.

אילו מקורות נתונים נתמכים?

על פי תיעוד Migrate של Drupal בdrupal.org, המודול תומך באופן טבעי ב-CSV, JSON, XML, מסדי נתונים של SQL דרך PDO, ובגרסאות Drupal ישנות יותר (6, 7). קיים תוסף מקור מוכן עבור WordPress, ותוספים מותאמים אישית משמשים עבור APIs שרירותיים. השיטות שלנו תואמות גם להגירת Drupal 8. הטבלה שלהלן מציגה אפשרויות פופולריות:

מקור תוסף דוגמת שימוש
CSV csv ייבוא מייצוא Excel
JSON json REST API של שירות צד שלישי
WordPress wordpress הגירת WordPress: הגירת בלוג מ-WP
Drupal 7 d7_node שדרוג ל-Drupal 10
API מותאם אישית source מותאם אישית אינטגרציה עם CRM

דוגמה: הגירה מ-CSV

לייבוא CSV ב-Drupal, השתמשו בתוסף ה-csv כפי שמוצג להלן.

הצגת תצורת הגירת CSV
---
id: articles_from_csv
label: 'Статьи из CSV'
migration_group: content_import
source:
  plugin: csv
  path: 'public://import/articles.csv'
  ids:
    - external_id
  header_row_count: 1
  column_names:
    - external_id
    - title
    - body
    - category
    - publish_date
    - image_url
process:
  title: title
  'body/value': body
  'body/format':
    plugin: default_value
    default_value: full_html
  created:
    plugin: format_date
    source: publish_date
    from_format: 'd.m.Y'
    to_format: 'U'
  status:
    plugin: default_value
    default_value: 1
  field_category:
    plugin: migration_lookup
    migration: categories_from_csv
    source: category
  field_image:
    plugin: download
    source:
      - image_url
      - '@filename'
    destination:
      plugin: 'public://images'
    rename: true
destination:
  plugin: 'entity:node'
  default_bundle: article
migration_dependencies:
  required:
    - categories_from_csv
---

פיתוח תוסף מקור מותאם אישית ל-Drupal הוא פשוט. דוגמה לתוסף מקור מותאם אישית עבור API:

<?php

// src/Plugin/migrate/source/ExternalApiSource.php

namespace Drupal\mymodule\Plugin\migrate\source;

use Drupal\migrate\Plugin\migrate\source\SourcePluginBase;

/**
 * @MigrateSource(
 *   id = "external_api",
 *   source_module = "mymodule"
 * )
 */
class ExternalApiSource extends SourcePluginBase {

  public function getIds(): array {
    return ['id' => ['type' => 'integer']];
  }

  public function fields(): array {
    return [
      'id' => 'ID записи',
      'title' => 'Заголовок',
      'content' => 'Содержимое',
      'tags' => 'Теги (через запятую)',
    ];
  }

  protected function initializeIterator(): \Iterator {
    $page = 0;
    do {
      $response = \Drupal::httpClient()->get(
        'https://api.external.com/posts?page=' . $page,
        ['headers' => ['Authorization' => 'Bearer ' . $this->configuration['api_key']]]
      );
      $data = json_decode($response->getBody(), true);
      $items = $data['items'];
      foreach ($items as $item) {
        yield $item;
      }
      $page++;
    } while (!empty($items) && $page < $data['total_pages']);
  }

}

מניעת כפילויות בעת הרצה חוזרת של הגירה

השתמשו בסימן מים גבוה (highwater mark) או ב-id: articles_from_csv label: 'Статьи из CSV' migration_group: content_import source: plugin: csv path: 'public://import/articles.csv' ids: - external_id header_row_count: 1 column_names: - external_id - title - body - category - publish_date - image_url process: title: title 'body/value': body 'body/format': plugin: default_value default_value: full_html created: plugin: format_date source: publish_date from_format: 'd.m.Y' to_format: 'U' status: plugin: default_value default_value: 1 field_category: plugin: migration_lookup migration: categories_from_csv source: category field_image: plugin: download source: - image_url - '@filename' destination: plugin: 'public://images' rename: true destination: plugin: 'entity:node' default_bundle: article migration_dependencies: required: - categories_from_csv בתצורת המקור. כך רק רשומות חדשות או שונות יוגרו. זה שימושי במיוחד להגירה מצטברת לאחר הייבוא הראשוני. דוגמת תצורה:

highwaterProperty: name: updated_at alias: u 

הגירת קבצי מדיה וייבוא מצטבר

הגירת קבצי מדיה כוללת תמונות וקבצים המוגרים בקובץ YAML נפרד, ולאחר מכן מקושרים לישויות דרך <?php // src/Plugin/migrate/source/ExternalApiSource.php namespace Drupal\mymodule\Plugin\migrate\source; use Drupal\migrate\Plugin\migrate\source\SourcePluginBase; /** * @MigrateSource( * id = "external_api", * source_module = "mymodule" * ) */ class ExternalApiSource extends SourcePluginBase { public function getIds(): array { return ['id' => ['type' => 'integer']]; } public function fields(): array { return [ 'id' => 'ID записи', 'title' => 'Заголовок', 'content' => 'Содержимое', 'tags' => 'Теги (через запятую)', ]; } protected function initializeIterator(): \Iterator { $page = 0; do { $response = \Drupal::httpClient()->get( 'https://api.external.com/posts?page=' . $page, ['headers' => ['Authorization' => 'Bearer ' . $this->configuration['api_key']]] ); $data = json_decode($response->getBody(), true); $items = $data['items']; foreach ($items as $item) { yield $item; } $page++; } while (!empty($items) && $page < $data['total_pages']); } } . דוגמת הגירת קבצים:

---
id: files_migration
source:
  plugin: csv
  path: 'public://import/files.csv'
process:
  filename:
    plugin: callback
    callable: basename
    source: file_url
  uri:
    plugin: download
    source:
      - file_url
      - '@filename'
    destination:
      plugin: 'public://migrated'
  destination:
    plugin: 'entity:file'

בהגירת הצומת, השדה track_changes: true משתמש ב-highwaterProperty: name: updated_at alias: u כדי להפנות לקובץ שהועלה.

מה כלול בשירותי הגירת התוכן שלנו?

תוצרים: כחלק מפתרון מפתח, אנו מספקים:

  • תיעוד מבנה ההגירה
  • גישה למאגר עם התצורה
  • אופטימיזציית ביצועים: גודל אצווה, סימן מים גבוה, עיבוד מקבילי
  • הכשרה למפתחים שלכם על שימוש ב-Migrate
  • חודש תמיכה לאחר ההשקה
  • אחריות להפעלה רציפה של האתר במהלך ההגירה
  • עלות: $500 - $3000 בהתאם למורכבות

לוח זמנים

הגירה פשוטה מ-CSV (500–5000 רשומות) — 2–3 ימים. הגירה מורכבת ממספר מקורות עם תוספים וטרנספורמציות מותאמים אישית — 1–2 שבועות. לוח הזמנים המדויק נקבע במהלך בדיקה.

מדוע הגירה עם Migrate עדיפה על העברה ידנית?

הגירה באמצעות Migrate אינה רק עניין של מהירות אלא גם של הבטחת שלמות. אנו משתמשים בשיטות מומלצות: סימן מים גבוה, migration_lookup, id: files_migration source: plugin: csv path: 'public://import/files.csv' process: filename: plugin: callback callable: basename source: file_url uri: plugin: download source: - file_url - '@filename' destination: plugin: 'public://migrated' destination: plugin: 'entity:file' . המהנדסים שלנו מחזיקים בהסמכות Drupal ויש להם ניסיון עם פרויקטים העולים על 500,000 רשומות תוכן. צרו קשר כדי לדון במשימה שלכם. קבלו ייעוץ הגירה.