הגדרנו ארכיטקטורת תוכן לעשרות פרויקטים על Craft CMS ואנחנו יודעים איך להימנע מעבודה חוזרת. בחירה בסוג Section או Entry Type שגוי מובילה לצורך בביצוע מחדש של מבנה ה-URL, התבניות והמיגרציות חודש לאחר מכן. לדוגמה, אם תבחרו בתחילה ב-Channel עבור קטלוג מוצרים, אבל מאוחר יותר תצטרכו היררכיה (קטגוריות בעומק 3 רמות), תצטרכו לשנות את הסוג ל-Structure, להעביר את כל הערכים ולהגדיר הפניות מכתובות URL ישנות לחדשות. זה אומר שעות של עבודה וסיכונים ל-SEO. הבנת ההבדלים בין סוגי Sections מקצרת את זמן התכנון ומפשטת את התחזוקה.
פנו אלינו — אנו מבטיחים הגדרה נכונה תוך התחשבות בכל הניואנסים של הפרויקט שלכם.
סוגי Sections
| סוג Section | מאפיינים | דוגמאות שימוש |
|---|---|---|
| Channel | אוסף של ערכים ללא היררכיה | בלוג, חדשות, ביקורות |
| Structure | עמודים היררכיים עם מיון ידני | תיעוד, קטלוג עם תת-קטגוריות |
| Single | ערך יחיד וייחודי, ללא slug | עמוד הבית, אודות, צור קשר |
Channel — אוסף של ערכים ללא היררכיה. בלוג, חדשות, מוצרים, רשימות משרות. תבנית URL: /blog/{slug}. אידיאלי עבור פיד של תוכן הומוגני. ניתן להשתמש בסוגי Entry Types שונים בתוכו — למשל, עבור מאמרים ופודקאסטים.
Structure — עמודים היררכיים עם קינון ומיון ידני. תיעוד, קטלוג עם תת-קטגוריות. URL: /services/web-development/landing-pages. Structure עדיף על Channel כאשר יש צורך בקינון — למשל, עבור קטלוג מוצרים עם תת-קטגוריות עד 3 רמות עומק. עם זאת, שאילתות לעץ יכולות להפוך לצוואר בקבוק — השתמשו ב-caching או ב-level() ב-Twig כדי להגביל את קבוצת השאילתות.
Single — ערך יחיד וייחודי. עמוד הבית, אודות, צור קשר. ללא slug, ללא ארכיון. השתמשו עבור עמודים סטטיים. שימו לב: אם אתם צריכים גרסאות מרובות (למשל, עמוד עבור כל אתר במצב multisite), השתמשו ב-Structure Section עם ערך אחד — זה נותן גמישות רבה יותר.
איך לבחור סוג Section?
הבחירה תלויה באופי התוכן. עבור אוספים שטוחים השתמשו ב-Channel, עבור היררכיות ב-Structure, ועבור עמודים ייחודיים ב-Single. אם אינכם בטוחים, התחילו עם Channel — זו האפשרות הגמישה ביותר וניתן להרחיב אותה בקלות מאוחר יותר. אבל זכרו: מעבר מ-Channel ל-Structure הוא עתיר עבודה, ולכן עדיף לחשוב מראש על סיבוכים מבניים אפשריים.
מהם Entry Types ואיך להגדיר אותם?
כל Section יכול לכלול מספר Entry Types עם קבוצות שדות שונות. זה מאפשר ניהול גמיש של פורמטי תוכן שונים באותו section. דוגמה עבור Blog Section:
Section: blog (Channel)
├── Entry Type: article
│ └── Fields: body (Matrix), readingTime (calculated), podcast (false)
├── Entry Type: podcast
│ └── Fields: audioFile (Asset), transcript (Redactor), duration (Number)
└── Entry Type: video
└── Fields: videoUrl (URL), thumbnail (Asset), youtubeId (computed)ב-Twig, הבדילו את התצוגה לפי סוג:
{% switch entry.type.handle %}
{% case 'article' %}
{% include '_blog/_article' %}
{% case 'podcast' %}
{% include '_blog/_podcast' %}
{% case 'video' %}
{% include '_blog/_video' %}
{% endswitch %} איך להגדיר Project Config עבור Sections?
השתמשו בקבצי YAML להגדרת sections — זה מפשט את הפריסה ואת ניהול הגרסאות. עיינו בתיעוד הרשמי על Project Config. דוגמה עבור בלוג:
---
# config/project/sections/blog.yaml
name: Blog
handle: blog
type: channel
enableVersioning: true
defaultPlacement: end
propagationMethod: all
siteSettings:
default:
hasUrls: true
uriFormat: 'blog/{slug}'
template: blog/_entry
enabledByDefault: true
entryTypes:
article:
name: Article
handle: article
hasTitleField: true
titleTranslationMethod: site
fieldLayout:
- type: craft\fieldlayoutelements\TitleField
- type: craft\fieldlayoutelements\CustomField
fieldUid: [uid-of-body-field]
- type: craft\fieldlayoutelements\CustomField
fieldUid: [uid-of-categories-field]
---
איך להגדיר Structure עם קינון?
עבור Structure, ציינו Section: blog (Channel) ├── Entry Type: article │ └── Fields: body (Matrix), readingTime (calculated), podcast (false) ├── Entry Type: podcast │ └── Fields: audioFile (Asset), transcript (Redactor), duration (Number) └── Entry Type: video └── Fields: videoUrl (URL), thumbnail (Asset), youtubeId (computed) כדי להגביל את העומק. לדוגמה, עבור קטלוג תלת-רמתי:
Section: services (Structure)
├── maxLevels: 3
├── enableVersioning: true
└── defaultSort: structure (ручная сортировка в дереве)שאילתת אלמנטים ילדים:
{# Получить всех потомков текущей страницы #}
{% set children = craft.entries()
.section('services')
.descendantOf(entry)
.level(entry.level + 1)
.orderBy('lft asc')
.all() %} איך להגדיר תרגומים עבור Sections?
במצב multisite, חשוב להגדיר נכון את translationMethod:
| שיטה | תיאור | דוגמה |
|---|---|---|
| none | ערך זהה לכל האתרים | שם מותג |
| site | ערך שונה לכל אתר | שם מוצר |
| language | ערך שונה לכל שפה | טקסט בשפה |
| siteGroup | ערך שונה לכל קבוצת אתרים | הגדרות אזוריות |
בחירת השיטה תלויה בתרחיש. לדוגמה, עבור שדה "שם מוצר", השתמשו ב-{% switch entry.type.handle %} {% case 'article' %} {% include '_blog/_article' %} {% case 'podcast' %} {% include '_blog/_podcast' %} {% case 'video' %} {% include '_blog/_video' %} {% endswitch %} אם המוצר מתורגם, או ב-# config/project/sections/blog.yaml name: Blog handle: blog type: channel enableVersioning: true defaultPlacement: end propagationMethod: all siteSettings: default: hasUrls: true uriFormat: 'blog/{slug}' template: blog/_entry enabledByDefault: true entryTypes: article: name: Article handle: article hasTitleField: true titleTranslationMethod: site fieldLayout: - type: craft\fieldlayoutelements\TitleField - type: craft\fieldlayoutelements\CustomField fieldUid: [uid-of-body-field] - type: craft\fieldlayoutelements\CustomField fieldUid: [uid-of-categories-field] אם השם משותף לכל השפות.
טיפ מעשי: caching למבנה
כדי להימנע משאילתות N+1 בעת רינדור העץ, השתמשו ב-maxLevels או טענו מראש ערכים עם Section: services (Structure) ├── maxLevels: 3 ├── enableVersioning: true └── defaultSort: structure (ручная сортировка в дереве) . עבור קטלוגים גדולים (1000+ ערכים), שקלו Elasticsearch או Meilisearch לחיפוש טקסט מלא.
למה להזמין אצלנו הגדרת Sections?
הניסיון שלנו — 5+ שנים בפיתוח על Craft CMS, מעל 50 פרויקטים מוצלחים. אנו משתמשים בתצורות מוכחות, מבטיחים יציבות וביצועים. הגדרה של 5–8 Sections עם Entry Types אורכת 1–2 ימים. עבור ארכיטקטורת תוכן מורכבת, פנו אלינו — נבחן את הפרויקט שלכם תוך יום אחד.
מה כלול בהגדרה?
- פיתוח ארכיטקטורת Sections ו-Entry Types
- הגדרת Project Config (YAML)
- הגדרת שדות ותרגומים
- יצירת תבניות תצוגה בסיסיות
- תיעוד מבנה התוכן
- תמיכה לאחר השקה
קבלו ייעוץ לפרויקט שלכם — נבחר את הארכיטקטורה האופטימלית.







