לקוח נזקק לפורטל ארגוני עם מבנה רב-לשוני ב-12 שפות, קטגוריות שירות מקוננות, והרשאות גישה לשלושה סוגי עורכים. וורדפרס הייתה דורשת התקנת תוספים של ACF, WPML ו-Custom Post Types – 2–3 פתרונות בתשלום. עם ProcessWire — CMS חינמי וקוד פתוח — יישמנו הכל באמצעות כלים מובנים: LanguageSupport, FieldtypePage והרשאת תבניות. תוך שבועיים, פאנל הניהול היה מוכן, והעורכים החלו למלא תוכן. לא תוסף אחד בתשלום — חיסכון של עד 40% בהשוואה ל-CMS מסחרי. אנו מעריכים כל פרויקט עם הצעת מחיר קבועה — ללא תשלומים נסתרים. ProcessWire היא אלטרנטיבה יעילה לוורדפרס לפרויקטים עם מבנה מותאם אישית.
כיצד ProcessWire מתמודדת עם מבני נתונים לא סטנדרטיים?
ProcessWire אידיאלית כאשר מבנה התוכן ייחודי. קטלוג שירותים עם 30+ מאפיינים, אתר רב-לשוני ב-15 שפות, פורטל עם היררכיית עמודים לא ליניארית — כאן היא עולה על WP ו-Drupal. התיעוד הרשמי של ProcessWire מציין: "ה-API בנוי על עקרון הפשטות: כל קריאה מחזירה את מה שאתה מצפה לו." בפאנל הניהול, אתה יוצר שדות, מקבץ אותם לתבניות, ומשייך אותם לעמודים. אין סוגי תוכן נוקשים, רק המשימה שלך.
דוגמה מעשית: לקוח ניהל רשת מרפאות ב-8 מדינות. לכל מרפאה היו סט שירותים, מחירים ורופאים משלה. בוורדפרס, היינו כותבים סוגי פוסטים מותאמים אישית ו-ACF — עשרות תוספים. עם ProcessWire, הסתדרנו עם 4 תבניות ושדות repeater. מנהלי תוכן שלטו בפאנל הניהול תוך שעה.
מדוע ProcessWire מהירה פי 7 מוורדפרס?
בבדיקות עם בחירה של 1000 עמודים, ProcessWire מחזירה תגובה ב-20 אלפיות השנייה, וורדפרס — 150 אלפיות השנייה. ההפרש של פי 7.5 מושג בשל היעדר הפשטות כבדות. ProcessWire אינה טוענת את כל המנוע עבור כל בקשה — רק את המודולים הדרושים.
ארכיטקטורת פרויקט: תבניות ושדות
כל תבנית היא קובץ PHP ב-/site/templates/. סימון, לוגיקה ונתונים מופרדים באמצעות בקרים או _init.php/_main.php. מבנה טיפוסי:
-
/site/templates/_init.php— משתנים גלובליים, עזרים -
/site/templates/_main.php— מעטפת פריסה -
/site/templates/home.php— דף הבית -
/site/templates/services.php— רשימת שירותים -
/site/templates/service-item.php— פרטים -
/site/templates/partials/nav.php,hero.php -
/site/modules/— מודולים מותאמים אישית -
/site/config.php
גישה לנתונים דרך ה-$pages API היא תמציתית:
$services = $pages->find("template=service-item, status=published, sort=sort, limit=12");
$results = $pages->find("template=service-item, title|body*=$q, limit=20");
$recent = $pages->find("template=news, date>=" . strtotime("-30 days") . ", sort=-date");
foreach ($page->related_cases as $case) {
echo "<a href='{$case->url}'>{$case->title}</a>";
}
foreach ($page->features as $feature) {
echo "<div class='feature'><h3>{$feature->headline}</h3><p>{$feature->text}</p></div>";
} רב-לשוניות מובנית
המודולים $services = $pages->find("template=service-item, status=published, sort=sort, limit=12"); $results = $pages->find("template=service-item, title|body*=$q, limit=20"); $recent = $pages->find("template=news, date>=" . strtotime("-30 days") . ", sort=-date"); foreach ($page->related_cases as $case) { echo "<a href='{$case->url}'>{$case->title}</a>"; } foreach ($page->features as $feature) { echo "<div class='feature'><h3>{$feature->headline}</h3><p>{$feature->text}</p></div>"; } , LanguageSupport, LanguageSupportFields מופעלים בפאנל הניהול (תיעוד). כל שדה טקסט מקבל לשוניות שפה. המעבר בתבנית הוא שורה אחת:
$user->language = $languages->get("en"); echo $page->title; // английский заголовок כתובות URL מתורגמות אוטומטית: LanguageSupportPageNames ו-$user->language = $languages->get("en"); echo $page->title; // английский заголовок — אותו עמוד.
מה אנחנו פותרים?
| בעיה | פתרון ProcessWire | אלטרנטיבה טיפוסית |
|---|---|---|
| היררכיית עמודים מורכבת | עמודים מקוננים עם ירושת שדות | מבני עץ של Drupal |
| שפות מרובות | LanguageSupport + שדות | WPML (בתשלום) |
| שדות מותאמים אישית | Fieldtype: טקסט, תמונה, repeater, עמוד | ACF (בתשלום) |
| תפקידים והרשאות | הרשאות גרעיניות ברמת התבנית | תוספים נוספים |
ביצועים וקאשינג
קאשינג דרך /ru/uslugi/ API:
$nav = $cache->get("main-nav");
if (!$nav) {
$nav = buildNav($pages);
$cache->save("main-nav", $nav, 3600);
}ProCache (מודול בתשלום) מייצר HTML סטטי ומגיש אותו ישירות דרך /en/services/ — מהירות דומה לאתרים סטטיים. פסילה מתרחשת באירועים: כאשר עמוד משתנה, קבצי ה-HTML המתאימים נוצרים מחדש. זה שומר על תוכן עדכני ללא אובדן ביצועים.
לוחות זמנים טיפוסיים לפיתוח
| סוג אתר | תבניות | לוח זמנים |
|---|---|---|
| ארגוני | 6–10 | 3–5 שבועות |
| קטלוג עם סינון | 8–14 | 5–8 שבועות |
| פורטל רב-לשוני | 10–20 | 7–12 שבועות |
| backend API (headless) | 4–8 | 2–4 שבועות |
מצב Headless
ProcessWire כ-CMS headless: התבנית מחזירה JSON, והפרונטאנד (React/Next.js) מביא נתונים דרך נקודת קצה. ProcessWire מטפלת רק באחסון והגשת תוכן.
header("Content-Type: application/json");
$data = [];
foreach ($pages->find("template=product, limit=50") as $p) {
$data[] = [
"id" => $p->id,
"title" => $p->title,
"slug" => $p->name,
"price" => $p->price,
"image" => $p->image->httpUrl ?? null,
];
}
echo json_encode($data); שלבי פיתוח
- ניתוח — לימוד תהליכים עסקיים, איסוף דרישות לשדות ותבניות.
- עיצוב — יצירת ארכיטקטורת תבניות, הגדרת פאנל ניהול.
- יישום — כתיבת מודולים מותאמים אישית, פיתוח תבניות.
- בדיקות — בדיקת הרשאות גישה, מהירות טעינה, Core Web Vitals.
- פריסה — הגדרת קאשינג, מסירת תיעוד.
טעויות נפוצות וכיצד להימנע מהן
- התעלמות משדות מותאמים אישית לנתונים שאינם מתאימים לתבנית — תמיד השתמש ב-Fieldtype ו-Repeater במקום אחסון נתונים בשדות טקסט כ-JSON.
- חוסר קאשינג לבקשות חוזרות — עטף שאילתות ב-
$cacheעם TTL. - הרשאות שגויות — בדוק תפקידים לפני השקה: עורך לא צריך לראות תבניות הגדרה.
מה כלול בעבודה
- עיצוב ארכיטקטורת שדות ותבניות
- הגדרת פאנל ניהול מותאם לתהליכים עסקיים
- כתיבת מודולי PHP מותאמים אישית
- אינטגרציה עם שירותים חיצוניים (1C, CRM, שערי תשלום)
- בדיקות ואופטימיזציה של Core Web Vitals
- הדרכת עורכים
- מסירת גישה ותיעוד
- עלות קבועה לאחר ניתוח מקדים
הניסיון והערבויות שלנו
אנו עובדים עם ProcessWire מאז גרסה 2.x — למעלה מ-5 שנים. במהלך תקופה זו, השלמנו 20+ פרויקטים: מאתרים ארגוניים פשוטים ועד פורטלים headless עם עומס של עד מיליון בקשות ביום. כל העבודה מגיעה עם אחריות ל-12 חודשים.
קבל ייעוץ לפרויקט שלך — נשלח הצעה מסחרית עם עלות קבועה תוך יום. צור קשר לדיון בפרטים. הזמן ניתוח ארכיטקטורה מקדים — נעריך את המורכבות ונציע פתרון אופטימלי.







