פיתוח מקצועי של חנות מסחר אלקטרוני PrestaShop
נתקלנו בלקוחות שחנות ה-PrestaShop שלהם הואטה עקב שאילתות N+1 בקטלוג — זמן טעינת העמוד הגיע ל-8 שניות. פתרנו זאת על ידי שיפוץ ObjectModel והטמעת מטמון Redis. פרויקט אחד — חנות עם 50,000 מוצרים ו-10 שפות. לאחר האופטימיזציה, TTFB ירד מ-3 שניות ל-200ms, ו-LCP ירד מ-8 שניות ל-1.5 שניות. הפחתת עלויות תמיכה בעד 30% עם מודולים מותאמים אישית.
PrestaShop היא פלטפורמת PHP בקוד פתוח המותאמת למסחר אלקטרוני. הגרסה הנוכחית 8.x מבוססת על רכיבי Symfony, Doctrine ORM עבור ישויות מסוימות, וליבת ObjectModel legacy משלה עבור הקטלוג. הדואליות הארכיטקטונית הזו היא המאפיין העיקרי שיש לקחת בחשבון במהלך הפיתוח. בהשוואה ל-WooCommerce, PrestaShop מייצרת דפי קטלוג מהר יותר ב-50% עבור כמויות נתונים שוות בזכות מערכת המטמון המובנית שלה.
כיצד פועלת הארכיטקטורה של PrestaShop
PrestaShop 8.x רצה על PHP 8.1–8.2 ומשתמשת ברכיבי Symfony 4.4. DI חלקי של Symfony מיושם. עבור החזית הקדמית (front office) משתמשים ב-Smarty 3; עבור החזית האחורית (back office) — Twig. מסד הנתונים הראשי הוא MySQL/MariaDB. Doctrine ORM משמש רק עבור ישויות חדשות בפאנל הניהול. ObjectModel הוא Active Record legacy עבור כל המוצרים, הקטגוריות וההזמנות. מנגנון ההרחבה המרכזי הוא מערכת ה-hooks.
מבנה התיקיות:
- /classes/ — ישויות ObjectModel (Product, Category, Order...)
- /controllers/ — בקרי חזית קדמית (FrontController)
- /modules/ — מודולים של צד שלישי ומודולים מותאמים אישית
- /themes/ — ערכות נושא לחזית קדמית (Smarty)
- /src/ — קוד בסגנון Symfony (PrestaShop\PrestaShop...)
- /admin-dev/ — חזית אחורית (Symfony + Twig)
- /override/ — דריסת מחלקות ליבה
מודלי נתונים ועבודה עם קטלוג
כל פעולות המוצר והקטלוג עוברות דרך ObjectModel. דוגמה לשליפה ושמירה:
$product = new Product($id, true, $langId, $shopId);
echo $product->name; // строка на нужном языке
echo $product->price; // базовая цена без НДС
echo $product->getPrice(); // с учётом налогов, скидок
$products = Product::getProducts($langId, $page * $limit, $limit, 'id_product', 'ASC', $categoryId);עבור ישויות מותאמות אישית, מומלץ לרשת מ-ObjectModel:
class CustomAttribute extends ObjectModel {
public $id_custom_attribute;
public $name;
public $value;
public $active;
public static $definition = [
'table' => 'custom_attribute',
'primary' => 'id_custom_attribute',
'multilang' => true,
'fields' => [
'active' => ['type' => self::TYPE_BOOL, 'validate' => 'isBool'],
'name' => ['type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'required' => true, 'size' => 128],
'value' => ['type' => self::TYPE_STRING, 'lang' => true, 'size' => 255],
],
];
} איזה תפקיד ממלאים ה-hooks?
Hooks הם התבנית המרכזית להרחבת PrestaShop. יישום נכון של hooks קובע עד כמה מודול יהיה תואם לעדכוני ליבה:
class CustomModule extends Module
{
public function __construct()
{
$this->name = 'custommodule';
$this->tab = 'front_office_features';
$this->version = '1.0.0';
$this->author = 'Company';
$this->need_instance = 0;
$this->ps_versions_compliancy = ['min' => '8.0.0', 'max' => _PS_VERSION_];
parent::__construct();
}
public function install(): bool
{
return parent::install() && $this->registerHook('actionProductAdd') && $this->registerHook('displayProductAdditionalInfo') && $this->installDb();
}
public function hookDisplayProductAdditionalInfo(array $params): string
{
$product = $params['product'];
$this->smarty->assign('custom_data', $this->getCustomData($product['id_product']));
return $this->display(__FILE__, 'views/templates/hook/product_info.tpl');
}
} כיצד לשפר את ביצועי PrestaShop?
PrestaShop תומכת במספר רמות מטמון: CCC (Combine, Compress, Cache), מטמון Smarty, מטמון דפים, ומטמון אובייקטים דרך Redis/Memcached. דוגמה להגדרת Redis:
// Настройка Redis в app/config/parameters.php
parameters:
cache_driver: 'redis'
cache_server: '127.0.0.1'
cache_port: 6379
cache_prefix: '_PRESTASHOP_'
// Программный кэш в модуле
$cacheKey = 'module_data_' . $productId . '_' . $langId;
if (!Cache::isStored($cacheKey)) {
$data = $this->fetchExpensiveData($productId);
Cache::store($cacheKey, $data);
} else {
$data = Cache::retrieve($cacheKey);
}הגדרת CCC נכונה יכולה להפחית את גודל הנתונים המועברים ב-40%. שימוש ב-Redis מפחית את עומס מסד הנתונים ב-70%. לדוגמה, בעיית שאילתות N+1 נפתרת על ידי שיפוץ ObjectModel עם Db::getInstance לבחירה המונית. התנגשויות עם מודולים מותאמים אישית לאחר עדכונים נמנעות על ידי יישום נכון של hooks. טעינת דפים איטית מסולקת על ידי מטמון מקיף.
| שיטת מטמון | האצת מהירות | הפחתת עומס מסד נתונים |
|---|---|---|
| CCC | 20–40% | 0% |
| מטמון אובייקטים Redis | 50–70% | 70% |
| מטמון Smarty | 30–50% | 0% |
למה לבחור בפיתוח מותאם אישית במקום תבנית מוכנה?
תבניות מוכנות מכילות לעיתים קרובות קוד מיותר ומודולים לא בדוקים, מה שפוגע בביצועים. פיתוח מותאם אישית מאפשר להסיר כל מה שמיותר, לבצע אופטימיזציה לשאילתות, וליישם רק את ה-hooks הדרושים. כתוצאה מכך, החנות פועלת מהר יותר וניתנת להרחבה בקלות רבה יותר.מה זה multistore ואיך להגדיר אותו?
PrestaShop תומכת בניהול מספר חנויות מפאנל ניהול אחד. הקונטקסט של החנות משפיע על כל השאילתות:
Shop::setContext(Shop::CONTEXT_SHOP, $shopId);
$product = new Product(null, false, null, $shopId);
$product->name[$langId] = 'Название для магазина ' . $shopId;
$product->price = 999.00;
$product->id_shop_default = $shopId;
$product->save();Multistore מאפשר ניהול קטלוגים, מחירים ועיצובים שונים עבור כל חנות. זה שימושי במיוחד בכניסה למספר שווקים או למגזרי B2B/B2C.
תהליך הפיתוח
- אנליזה: ביקורת על החנות הקיימת (אם יש), הגדרת דרישות.
- עיצוב: ארכיטקטורת מודולים, סכמת מסד נתונים, אבות טיפוס.
- יישום: כתיבת מודולים מותאמים אישית, שילוב hooks.
- בדיקות: בדיקות עומס, בדיקת תאימות לעדכונים.
- פריסה ותיעוד: העלאה לסביבת ייצור, מסירת הוראות.
מה כלול בפיתוח?
| תיעוד | קוד מקור | גישה | הדרכה |
|---|---|---|---|
| תיעוד API למודולים | קוד מלא עם הערות | FTP/SSH, פאנל ניהול | הוראות למפעילים |
| סכמת מסד נתונים ותיאור ObjectModel | הוראות פריסה | גישה לאחסון (hosting) | הדרכת מנהלים |
לוחות זמנים משוערים
- חנות מקוונת עם ערכת נושא סטנדרטית והתאמות אישיות: 3–5 שבועות.
- חנות עם ערכת נושא מותאמת אישית ומודולים ללוגיקה עסקית: 6–10 שבועות.
- העברה מפלטפורמה אחרת (WooCommerce, OpenCart): 4–8 שבועות.
- הגדרת Multistore עם קטלוגים שונים: +2–3 שבועות לפיתוח הבסיסי.
העלות מחושבת באופן אישי לאחר הערכת היקף העבודה. שיפורי המהירות מחזירים את עצמם תוך חודשיים מההשקה.
יש לנו 5 שנות ניסיון בפיתוח על PrestaShop, עם יותר מ-50 פרויקטים שהושלמו, כולל תצורות multistore. אנו מבטיחים עמידה בלוחות זמנים ואיכות קוד. לפי התיעוד הרשמי של PrestaShop, יישום נכון של hooks משפר את תאימות העדכונים.
קבלו ייעוץ לפרויקט שלכם — אנו מעריכים אותו. הזמינו ביקורת על החנות הנוכחית שלכם כדי לזהות צווארי בקבוק בביצועים.







