הגדרת ייבוא/ייצוא מוצרים ב-PrestaShop
בעת העברת קטלוג מ-ERP ל-PrestaShop, כלי הייבוא המובנה נתקל במגבלות PHP ואינו יכול להתמודד עם הנפח. עבור משימות ייצור עם קטלוג של 5,000+ מוצרים, הכלי הסטנדרטי דורש כוונון עדין או החלפה בפתרון מותאם אישית באמצעות עיבוד אצווה וניהול זיכרון. יש לנו ניסיון של 7+ שנים באינטגרציית PrestaShop, עם מסירה של למעלה מ-300 פרויקטים. כוונון ייבוא נכון מפחית את זמן טעינת הקטלוג ב-60% וחוסך עד 600$ לחודש בעבודה ידנית. מודול מותאם אישית מהיר פי 10 מהמייבא המובנה עבור קטלוגים גדולים. תצורה בסיסית מתחילה ב-299$, פיתוח מותאם אישית מ-1,500$. מומחים מנוסים ומוסמכים מבטיחים יציבות ייבוא. בואו נפרק כיצד לארגן כראוי העברת נתונים ולהימנע ממלכודות נפוצות. צרו קשר לייעוץ על הקטלוג שלכם.
בעיות שנפתרות על ידי הגדרת ייבוא נכונה
שגיאות ייבוא ב-PrestaShop נובעות לעיתים קרובות ממבנה CSV לא תואם, מיפוי מאפיינים שגוי או הפרות מגבלות PHP. המהנדסים שלנו מגדירים ייבוא עם מודעות לפרטי הקטלוג שלכם, ומבטיחים טעינה יציבה של אלפי מוצרים.
מדוע המייבא הסטנדרטי אינו מספק עבור קטלוגים גדולים
המייבא המובנה עובד היטב עבור טעינות חד-פעמיות של עד 1,000 מוצרים. ניסיון עם 10,000+ שורות גורם לשגיאות timeout או דלדול זיכרון. האשם הוא הגדרות PHP ברירת מחדל: memory_limit = 128M, max_execution_time = 30 שניות. עבור קבצים גדולים, יש להגדיל במפורש מגבלות אלה או לעבור לעיבוד אצווה באמצעות API, שהוא מהיר משמעותית. לדוגמה, בפרויקט אחד הקטלוג הכיל 50,000 SKU עם וריאציות. המייבא המקורי לא הצליח לעבד אפילו 10% מהנתונים. בנינו מודול מותאם אישית עם טעינת אצווה באמצעות API, והשלמנו את הייבוא תוך שעתיים — שיפור של פי 5 לעומת שיטות סטנדרטיות.
מבנה CSV המצופה על ידי PrestaShop
המייבא מצפה לקבוצה קבועה של שדות. תוחם וקידוד ניתנים להגדרה בעת ההעלאה:
ID;Active (0/1);Name *;Categories;Price tax excl.;Tax rules ID;Wholesale price;On sale (0/1);Discount amount;Discount percent;Discount from (yyyy-mm-dd);Discount to (yyyy-mm-dd);Reference #;Supplier reference #;Supplier;Brand;EAN13;UPC;MPN;Ecotax;Weight;Quantity;Description;Short description;Tags (x,y,z...);Meta title;Meta description;URL rewritten;Image URLs (x,y,z...);Image alt texts (x,y,z...);Feature (Name:Value:Position:Customized);Available for order;Available date;Show price;Visibility;Additional shipping cost;Unity;Unit price;Summary;Shop (for multi-shop only)
;1;Куртка зимняя мужская;Верхняя одежда,Мужская одежда;2999.00;1;0;0;0;0;;;ART-001;;Бренд;КурткаБренд;4607167430120;;;0;1.5;50;"Полное описание куртки...";"Куртка зимняя";"куртка, зима, мужская";"Купить куртку зимнюю мужскую";"Куртка зимняя мужская — купить";"kurtka-zimnyaya-muzhskaya";"https://cdn.example.com/img1.jpg,https://cdn.example.com/img2.jpg";"Куртка вид 1,Куртка вид 2";"Цвет:Чёрный:1:0;Размер:L:2:0";1;;;1;everywhere;0;;;הערה: כתובות URL של תמונות חייבות להיות מוחלטות ונגישות; אנו ממליצים להשתמש ב-CDN. שורת הדוגמה משמיטה כתובות URL לקיצור.
תצורה לייבוא בכמות גדולה
כברירת מחדל, תהליך הייבוא של PHP נתקל ב-ID;Active (0/1);Name *;Categories;Price tax excl.;Tax rules ID;Wholesale price;On sale (0/1);Discount amount;Discount percent;Discount from (yyyy-mm-dd);Discount to (yyyy-mm-dd);Reference #;Supplier reference #;Supplier;Brand;EAN13;UPC;MPN;Ecotax;Weight;Quantity;Description;Short description;Tags (x,y,z...);Meta title;Meta description;URL rewritten;Image URLs (x,y,z...);Image alt texts (x,y,z...);Feature (Name:Value:Position:Customized);Available for order;Available date;Show price;Visibility;Additional shipping cost;Unity;Unit price;Summary;Shop (for multi-shop only) ;1;Куртка зимняя мужская;Верхняя одежда,Мужская одежда;2999.00;1;0;0;0;0;;;ART-001;;Бренд;КурткаБренд;4607167430120;;;0;1.5;50;"Полное описание куртки...";"Куртка зимняя";"куртка, зима, мужская";"Купить куртку зимнюю мужскую";"Куртка зимняя мужская — купить";"kurtka-zimnyaya-muzhskaya";"https://cdn.example.com/img1.jpg,https://cdn.example.com/img2.jpg";"Куртка вид 1,Куртка вид 2";"Цвет:Чёрный:1:0;Размер:L:2:0";1;;;1;everywhere;0;;; וב-memory_limit. עבור קבצים עם למעלה מ-10,000 שורות, אנו ממליצים להגדיל מגבלות באמצעות עקיפת בקר או מאגר PHP-FPM ייעודי:
// override/controllers/admin/AdminImportController.php
class AdminImportControllerCore extends AdminImportController {
public function __construct() {
parent::__construct();
@ini_set('memory_limit', '512M');
@ini_set('max_execution_time', '3600');
}
const MAX_LINE_SIZE = 4096;
}אנו ממליצים להגדיל מגבלות באמצעות מאגר PHP-FPM ייעודי: memory_limit ל-1G, max_execution_time ל-7200.
מגבלות PHP מומלצות לפי גודל קטלוג
| גודל קטלוג | memory_limit | max_execution_time |
|---|---|---|
| עד 5,000 שורות | 256M | 300 |
| 5,000 – 50,000 | 512M | 600 |
| 50,000+ | 1G | 1800 |
ייבוא פרוגרמטי באמצעות ObjectModel ו-WebService API
לאינטגרציית ERP/1C, עוקפים את מייבא האינטרנט ועובדים ישירות דרך ה-API של PrestaShop. PrestaShop WebService מספק REST API לייצוא:
$client = new PrestaShopWebservice('https://example.com', 'YOUR_API_KEY', false);
$params = [
'resource' => 'products',
'display' => '[id,reference,name,price,quantity]',
'sort' => '[id_ASC]',
'limit' => '100,100',
];
$xml = $client->get($params);
$products = $xml->products->product;ייבוא מוצר עם מאפיינים באמצעות ObjectModel:
class ProductImporter {
private int $defaultLangId;
private int $shopId;
public function importProduct(array $data): int {
$product = new Product();
$product->name[$this->defaultLangId] = $data['name'];
$product->description[$this->defaultLangId] = $data['description'];
$product->reference = $data['sku'];
$product->price = (float) $data['price'];
$product->weight = (float) ($data['weight'] ?? 0);
$product->active = 1;
$product->id_category_default = $data['category_id'];
if (!$product->add()) {
throw new \RuntimeException('Failed to add product: ' . $data['sku']);
}
$product->addToCategories($data['category_ids']);
StockAvailable::setQuantity($product->id, 0, (int) $data['qty']);
Search::indexation(false, $product->id);
return (int) $product->id;
}
} מתי לבחור מודול מותאם אישית
| קריטריון | מייבא מובנה | מודול מותאם אישית |
|---|---|---|
| נפח נתונים | עד 5,000 שורות לכל ריצה | כל נפח, עם פיצול אצווה |
| מאפיינים (וריאציות) | באמצעות CSV (מוגבל) | תמיכה מלאה באמצעות ObjectModel |
| מהירות עיבוד | בינונית (תלוי בתצורה) | גבוהה (שאילתות מותאמות) |
| אינטגרציה עם מערכות חיצוניות | קבצים בלבד | באמצעות API, webhooks, תור |
| אוטומציה (cron) | לא מובנה | תמיכה מלאה |
מודול מותאם אישית עדיף עבור קטלוגים הדורשים סנכרון תכוף ולוגיקת עדכון מורכבת. הזמינו הגדרת ייבוא PrestaShop מהצוות שלנו.
תצורה ב-4 שלבים לייבוא מוצרים ב-PrestaShop
- הכנת נתונים — המרת CSV לפורמט הנדרש, בדיקת קידוד UTF-8 ותוחם.
- תצורת PHP — הגדלת memory_limit ו-max_execution_time לפי גודל הקטלוג.
- ייבוא בדיקה — טעינת 100–200 רשומות על עותק של מסד הנתונים, אימות מיפוי שדות ומאפיינים.
- אוטומציה — הגדרת cron לריצות סנכרון קבועות, רישום שגיאות באמצעות PrestaShopLogger.
הגדרת מודול ייבוא ל-cron
לעדכוני קטלוג קבועים ממקור חיצוני:
// modules/erpimport/cron.php
define('_PS_ADMIN_DIR_', getcwd());
include(dirname(__FILE__) . '/../../config/config.inc.php');
$importer = new ErpProductImporter();
$products = $importer->fetchFromErp(strtotime('-1 hour'));
foreach (array_chunk($products, 100) as $batch) {
foreach ($batch as $productData) {
try {
$importer->upsert($productData);
} catch (Exception $e) {
PrestaShopLogger::addLog('ERP import error: ' . $e->getMessage(), 3, null, 'Product', $productData['id'] ?? 0);
}
}
usleep(100000);
}ערך cron: max_execution_time
מה כלול בעבודה
העבודה כוללת: תיעוד מיפוי שדות והוראות הרצת ייבוא; הגדרת גישה עם יצירת מפתח API עבור WebService והרשאות cron; הדרכה על העלאת קבצי בדיקה וטיפול בשגיאות נפוצות; תמיכה טכנית עם תיקוני באגים תוך 5 ימי עסקים לאחר המסירה.
לוחות זמנים משוערים
- תצורת מייבא מובנה + ייבוא בדיקה: 4–8 שעות
- פיתוח מייבא מותאם אישית עם אינטגרציית ERP: 3–7 ימים
- הגדרת סנכרון קבוע עם ניטור שגיאות: 2–3 ימים
- העברת קטלוג של 10,000+ SKU עם תמונות: 3–7 ימים
העלות מחושבת באופן אישי לאחר הערכת נפח הנתונים ומורכבות האינטגרציה. שלחו בקשה — המהנדסים שלנו ינתחו את הקטלוג שלכם ויציעו את הפתרון האופטימלי. קבלו ייעוץ על ייבוא מוצרים ב-PrestaShop עוד היום.
רשימת בדיקה לייבוא מוצלח
- בדקו מגבלות PHP לפני התחלה.
- פצלו את הקובץ לאצוות של 100-200 רשומות.
- בדקו על עותק של מסד הנתונים.
- הגדירו רישום שגיאות.
- תזמנו ריצות קבועות באמצעות cron.
לפי תיעוד PrestaShop, עבור קטלוגים בעומס גבוה מומלץ להשתמש ב-WebService API במקום ייבוא CSV.







