שדות ותבניות הם הבסיס של כל פרויקט ProcessWire. מבנה לא נכון מוביל לתיקונים מאולתרים: קשרים מסובכים, נתונים כפולים, שאילתות N+1 איטיות. לדוגמה, בפרויקט אחד ללא הגדרת FieldtypePage נכונה, נאלצנו להריץ 15 שאילתות במקום אחת, מה שהגדיל את ה-TTFB ב-400 אלפיות השנייה. עיצוב שדות משתלם פי עשרה: הפיתוח מואץ ב-30–50%, והתחזוקה הופכת לפשוטה יותר. צברנו ניסיון על 15+ פרויקטים, ובכל פעם הארכיטקטורה הנכונה חסכה ללקוח לפחות 40 שעות עבודה ראשונית. צרו קשר לקבלת ייעוץ לפרויקט שלכם.
סוגי שדות: מה לבחור לכל משימה
שדה מגדיר את הסוג ואת שיטת האחסון. ל-ProcessWire יש למעלה מ-20 סוגים מובנים. להלן טבלה של הנפוצים ביותר:
| סוג שדה | אחסון | מתי להשתמש |
|---|---|---|
FieldtypeText |
VARCHAR | כותרות, שמות קצרים |
FieldtypeTextarea |
TEXT | מאמרים, תיאורים ללא HTML |
FieldtypeTextareaLanguage |
TEXT (לפי שפה) | טקסטים רב-לשוניים |
FieldtypeImage |
טבלה נפרדת | תמונות עם טקסט חלופי |
FieldtypeFile |
טבלה נפרדת | קובצי PDF, מסמכים |
FieldtypePage |
INT/טבלה | קשרים בין עמודים |
FieldtypeRepeater |
עמודי ילדים | בלוקים חוזרים (למשל, יתרונות) |
FieldtypeOptions |
INT | רשימה נפתחת |
FieldtypeCheckbox |
INT(1) | כן/לא |
FieldtypeInteger |
INT | גיל, כמות |
FieldtypeFloat |
FLOAT | מחירים, דירוג |
FieldtypeDatetime |
INT (חותמת זמן unix) | תאריך פרסום |
FieldtypePage מאיץ את הפיתוח פי 5 בהשוואה לשאילתות SQL ישירות, ו-Repeater יכול להחליף עד 10 תבניות נפרדות. בחירת הסוג הנכון מפחיתה את מספר השדות ב-20–30% ומבטלת טבלאות מיותרות.
יצירת שדות וטעויות נפוצות
שדות נוצרים ב-Setup → Fields → Add New. העיקר הוא להגדיר נכון את ה-Name (לטינית, עם קו תחתון) ואת ה-Label. טעות נפוצה היא שימוש בשמות מכונה ארוכים מדי. עדיף review_date מאשר data_otziva_klienta_v2.
יש להקדיש תשומת לב מיוחדת לשדה FieldtypePage. בהגדרות שלו, יש לוודא:
- Dereference as:
Page(יחיד) אוPageArray(מרובה) - Parent: הגבלת הבחירה לילדים של הורה ספציפי — מונע חיבורים מקריים
- Template filter: הצגת עמודים רק עם התבנית הנדרשת
// В коде: одиночная связь
echo $page->category->title;
// Множественная связь
foreach ($page->tags as $tag) {
echo "<span class='tag'>{$tag->title}</span>";
} יצירת תבניות: שלב אחר שלב
תבנית מקשרת שדות לקובץ עיבוד PHP. התהליך:
- יצירת קובץ PHP ב-
// В коде: одиночная связь echo $page->category->title; // Множественная связь foreach ($page->tags as $tag) { echo "<span class='tag'>{$tag->title}</span>"; } - ב-Setup → Templates → Add New — ProcessWire ימצא את הקובץ אוטומטית
- הוספת השדות הנדרשים בכרטיסיית Fields
- הגדרת Access (הרשאות)
- הגדרת URLs (אישור/איסור עמודי ילדים, סיומת URL)
בכרטיסיית Advanced, יש אפשרויות מפתח:
- Page class — מחלקת PHP מותאמת אישית לעמודי תבנית זו (מאפשרת מתודות מותאמות כמו
/site/templates/) - Prepend/Append file — הכללת
getFullName()ו-_init.php - Cache time — שמירת פלט התבנית במטמון למשך N שניות (לעמודים עם תעבורה גבוהה)
- Allow page numbers — הפעלת
_main.php,/page2(לחלוקה לעמודים)
שדה Fieldset: קיבוץ בעורך
/page3 / FieldtypeFieldsetOpen מקבץ שדות ויזואלית מבלי להשפיע על האחסון. לדוגמה, בלוק SEO:
-
FieldtypeFieldsetClose— FieldtypeFieldsetOpen, label="SEO" -
fieldset_seo_open— FieldtypeText -
meta_title— FieldtypeTextarea -
meta_description— FieldtypeFieldsetClose
בעורך, שדות אלה יקופלו לבלוק "SEO" אחד.
למה להשתמש ב-Repeater במקום בתבניות נפרדות?
Repeater מאפשר לעורכים להוסיף/להסיר קבוצות שדות דינמית. זה גמיש יותר מאשר יצירת תבניות נפרדות לכל בלוק. דוגמה: בלוק "יתרונות" עם שדות icon, headline, text.
// Поле features (Repeater)
foreach ($page->features as $feature) {
echo "<div class='feature-card'>";
echo " <img src='{$feature->icon->url}' alt=''>";
echo " <h3>{$feature->headline}</h3>";
echo " <p>{$feature->text}</p>";
echo "</div>";
}fieldset_seo_close (מודול ProFields בתשלום) הולך רחוק יותר: הוא מאפשר מספר סוגי בלוקים בשדה אחד — בדומה ל-ACF Flexible Content. זו הבחירה שלנו לעמודי נחיתה מורכבים.
איך לייצא ולייבא תצורה?
העברת מבנה בין סביבות היא כאב נפוץ. אנו משתמשים במודול // Поле features (Repeater) foreach ($page->features as $feature) { echo "<div class='feature-card'>"; echo " <img src='{$feature->icon->url}' alt=''>"; echo " <h3>{$feature->headline}</h3>"; echo " <p>{$feature->text}</p>"; echo "</div>"; } : הוא מתאר שדות ותבניות בקוד PHP כמו מיגרציות של Laravel. חלופה היא ייצוא JSON דרך API:
php -r " require '/var/www/site/index.php'; echo \$templates->get('product')->exportJSON(); " > product-template.json ניתן גם לייצא תצורה דרך Setup → Export/Import.
מה כלול בעבודת הגדרת ProcessWire שלנו?
- ניתוח מבנה תוכן — הגדרת ישויות וקשרים
- עיצוב שדות ותבניות — תוך התחשבות בביצועים ובחוויית העורך
- יישום — יצירת שדות, תבניות, מיגרציות
- בדיקות — בדיקת שאילתות N+1, Core Web Vitals
- פריסה ותיעוד — מסירת תיאור ומדריך לעורך
- אחריות — 3 חודשי תמיכה לאחר המסירה
המהנדסים שלנו מוסמכים ב-ProcessWire ויש להם ניסיון בפרויקטים בכל רמת מורכבות. מבנה נכון חוסך עד 30% מזמן הפיתוח. בקשו ביקורת על המבנה הנוכחי שלכם — נמצא צווארי בקבוק ונציע אופטימיזציות.
השוואת גישות: Fieldtype לעומת יישום ידני
| היבט | ProcessWire Fieldtype | יישום ידני (SQL+PHP) |
|---|---|---|
| מהירות פיתוח | פי 5 מהיר יותר | איטי, הרבה קוד |
| גמישות | גבוהה (סוגים מובנים) | מלאה, אבל דורשת יותר מאמץ |
| ביצועים | מותאם על ידי הליבה | תלוי ביישום |
| תחזוקה | קלה, מודולרית | מורכבת, מונוליטית |
שימוש בשדות ProcessWire נותן יתרון במהירות ובאמינות. תיעוד ProcessWire: Fieldtypes.
שדות ותבניות מוגדרים כהלכה הם המפתח לפיתוח מהיר ולעורכים מרוצים. אם יש לכם ספקות לגבי הארכיטקטורה, צרו קשר — נעזור.







