פיתוח מודול מותאם אישית ב-Craft CMS לצורכי עסק

כאשר הלוגיקה של הפרויקט גדלה מעבר ליכולות של פתרונות מוכנים, פעולות ידניות מאטות את עבודת הצוות ויוצרות סיכונים. אנו מפתחים מודולים מותאמים אישית ב-Craft CMS מקצה לקצה: מתכננים ארכיטקטורה, מייעלים תהליכים ומוסרים את הפתרון עם תיעוד. כתוצאה מכך, פעולות שגרתיות מצטמצמות וזמן התגובה של המערכת מתקצר באופן משמעותי.

פיתוח ותחזוקה של כל סוגי האתרים:

אתרי מידע או יישומי אינטרנט
אתרי תדמית, דפי נחיתה, אתרי חברה, קטלוגים מקוונים, חידונים, אתרי קידום, בלוגים, מקורות חדשות, פורטלי מידע, פורומים, אגרגטורים
אתרי מסחר אלקטרוני או יישומי אינטרנט
חנויות מקוונות, פורטלי B2B, שווקים, בורסות מקוונות, אתרי קאשבק, בורסות, פלטפורמות דרופשיפינג, מנתחי מוצרים
יישומי אינטרנט לניהול תהליכים עסקיים
מערכות CRM, מערכות ERP, פורטלים ארגוניים, מערכות ניהול ייצור, מנתחי מידע
אתרי שירות אלקטרוני או יישומי אינטרנט
פלטפורמות מודעות, בתי ספר מקוונים, בתי קולנוע מקוונים, בוני אתרים, פורטלים לשירותים אלקטרוניים, פלטפורמות אירוח וידאו, פורטלים נושאיים

אלה רק חלק מהסוגים הטכניים של אתרים שאנו עובדים איתם, ולכל אחד מהם יכולים להיות מאפיינים ופונקציונליות ספציפיים משלו, וכן ניתן להתאים אותם לצרכים ולמטרות הספציפיים של הלקוח.

השירותים שאנו מציעים
מציג 1 מתוך 1כל 2062 השירותים
פיתוח מודול מותאם אישית ב-Craft CMS לצורכי עסק
בינוני
~3-5 ימים
שאלות נפוצות

מודול מותאם אישית ב-Craft CMS: היכן נשברת הלוגיקה של הפרויקט

המודל המובנה של Craft CMS מיועד לישויות צפויות מראש: רשומות, קטגוריות, שדות, הרשאות לפי תפקידים. כל עוד הפרויקט חי בתוך המסגרת הזו, הכול עובד ללא התערבות בליבה.

הבעיות מתחילות במקום שבו הלוגיקה העסקית מפסיקה להיות סטנדרטית — ולא מדובר ב"מעט מדי תוספים", אלא בכך שמודל הנתונים עצמו אינו מתאר את היחסים האמיתיים.

צוואר הבקבוק הראשון — לוגיקת הרשאות לא סטנדרטית. התפקידים המובנים פועלים על מדורים וקבוצות של רשומות, אך אינם עונים על שאלות כמו "עורך רואה רק את החומרים שלו בתוך היחידה שלו" או "מאשר יכול לערוך שדה, אך לא לפרסם". מתחילות דרכי עקיפות באמצעות בדיקות מאולתרות בתבניות, וכל כלל חדש צריך להיכתב ידנית בעשרה מקומות.

השני — קשרים בין ישויות. כאשר רשומה צריכה להפנות למספר אובייקטים מקושרים עם סוגי יחסים שונים ותנאי תצוגה, השדות המובנים של Relations אינם מספיקים: ההקשר של הקשר הולך לאיבוד, מופיעים כפילויות, והשליפות הופכות לכבדות.

כך גם עם אינטגרציות למערכות פנימיות — מחסן, CRM, חיוב: ההחלפה דורשת לוגיקת ביניים, שפשוט אינה קיימת ב-CMS.

מודול מותאם אישית ב-Craft CMS פותר זאת ברמת הארכיטקטורה: טבלאות ושירותים משלו לקשרים, שכבה נפרדת של כללי גישה, מטפלי אירועים לאינטגרציות. הליבה נשארת ללא שינוי — עדכוני ה-CMS אינם שוברים את הלוגיקה שלכם. נפרט כיצד זה נסגר בפועל.

מה נותן המודול: מהירות, עמידות בפני כשלים, שליטה

לוגיקה לא סטנדרטית, המפוזרת על פני תבניות ותוספים, יוצרת שלוש בעיות אופייניות: שאילתות כבדות בעמודים ציבוריים, כשלים בעת עדכון הליבה והרשאות גישה אטומות. העברת הלוגיקה הזו למודול נפרד Craft CMS פותרת אותן ברמת הארכיטקטורה, ולא באמצעות תיקונים נקודתיים.

מהירות תגובה

המודול רושם מסלולים ושירותים משלו, ולכן שאילתות כבדות יוצאות מהתבניות אל שכבה מבוקרת עם מטמון וטעינה עצלה של קשרים. בפועל, זמן התגובה של הקטלוג והאזורים האישיים יורד פי כמה, ועומסי שיא מפסיקים להיתקע על רינדור התבנית.

מחלקות כשלים שנמנעו

הלוגיקה במודול אינה תלויה במבנה התבניות ובסדר התוספים — עדכון הליבה או החלפת ערכת נושא אינם שוברים אותה. בנפרד נסגרת מחלקת הכשלים הקשורה למרוצי כתיבה: טרנזקציות ותורים מוציאים פעולות כבדות מהבקשה של המשתמש, ושינויים שיושמו חלקית בבסיס הנתונים אינם נותרים.

צפיות בעדכונים

המודול מותקן ומתעדכן כחבילה נפרדת עם מיגרציות סכימה ותִקְנוּן גרסאות. עדכון הליבה מפסיק להיות אירוע עם בדיקה ידנית של כל תבנית: אי-תאימות מתגלה בשלב המיגרציות, ולא בפרודקשן.

שליטה בגישה

ההרשאות מתוארות באופן הצהרתי — לפי תפקידים, מדורים ופעולות בודדות, ולא בבדיקות מפוזרות בתבניות. זה נותן נקודת ביקורת אחודה: רואים מי יכול מה, וכל שינוי במדיניות הגישה עובר סקירה, ולא מתוקן בעשרה מקומות.

האפקט מצטבר: ככל שיותר תרחישים לא סטנדרטיים חיים במודול, כך קטנה המשטח לחוסרים בכל שחרור.

דרכי מימוש: מודול מובנה, תוסף, שירות חיצוני

ב-Craft CMS לוגיקה מותאמת אישית חיה בשלושה מקומות שונים, והבחירה ביניהם קובעת כיצד הפרויקט יתוחזק בהמשך. מודול מובנה הוא קוד בתוך הפרויקט: הוא רואה את המודלים, האירועים והתורים של הליבה ישירות, מותקן יחד עם האפליקציה ואינו דורש מחזור שחרור נפרד.

תוסף הוא חבילה עצמאית עם מחזור חיים משל עצמה: ניתן להשתמש בו מחדש בין פרויקטים ולעדכן אותו באופן עצמאי, אך כל פנייה ל-API הפנימי של Craft צריכה להישמר בגבולות תואמים.

שירות חיצוני מוציא את הלוגיקה אל מחוץ לאפליקציה ומתקשר איתה דרך הרשת — הדבר מסיר עומס מתהליכי ה-PHP, אך מוסיף כשל רשת, השהיה וקו פריסה נפרד.

אפשרות מתי מתאימה מגבלות הארכיטקטורה
מודול מובנה הלוגיקה ספציפית לפרויקט אחד, נדרש גישה ישירה לאירועים ולמודלים של הליבה חי רק בפרויקט הזה, מתעדכן יחד איתו, לא ניתן להשתמש בו מחדש באתר אחר
תוסף הפונקציונליות חוזרת על עצמה במספר פרויקטים או שנדרשת הפרדת גרסאות דורש API ציבורי יציב, בעת עדכון מג'ורי של Craft יש לשמור על תאימות
שירות חיצוני חישובים כבדים, אינטגרציות, עבודה עם מערכות חיצוניות ונתונים משלהם כשל רשת והשהיה, הרשאות נפרדות, לוגים וניטור, סנכרון מצב

בפועל הגבולות לרוב משולבים: המודול מחזיק את כללי העסק והאירועים, השירות החיצוני לוקח על עצמו את הכבד, והתוסף מופיע כאשר הפתרון הוכיח את ערכו והגיע הזמן להעביר אותו בין פרויקטים.

אנו קובעים את הבחירה הזו בשלב התכנון — ממנה תלויים סכמת הפריסה, אסטרטגיית העדכונים וכמה יעלה התחזוקה בעוד שנה.

שלבי יישום: מביקורת הלוגיקה ועד מסירה לצוות

את העבודה מתחילים בביקורת הלוגיקה: מנתחים כיצד המשימה נפתרת כיום — באמצעות תוספים, פעולות ידניות של העורך או עריכות בתבניות. בשלב זה מזהים נקודות שבהן הלוגיקה משוכפלת, ומקומות שנשברים בעת עדכון הליבה. תוצר הביקורת — מפת תלויות ורשימה של מה שהמודול צריך לקחת על עצמו.

  1. ביקורת הלוגיקה הנוכחית. אוספים תרחישי עבודה אמיתיים של עורכים ומנהלים, בוחנים אילו נתונים ואירועים המשימה נוגעת בהם. מגדירים את גבולות המודול: מה עובר אליו, מה נשאר בליבה.
  2. תכנון סכימת המודול. מתארים את המבנה: ישויות, שדות, קשרים, הרשאות גישה לפי תפקידים. בנפרד מתכננים מיגרציות — כך שמבנה הנתונים ייפרס בכל סביבה בפקודה אחת.
  3. הגדרה והרכבה. מיישמים את הלוגיקה, מוציאים את התצורה לקבצי הפרויקט, מחברים את המודול ללא עריכות בליבה. כך עדכון הפלטפורמה אינו מוחק את ההתאמות.
  4. בדיקת תרחישים. מריצים את המודול על נתונים אמיתיים ומקרי קצה: תוצאות ריקות, פעולות מרובות, עבודה בו-זמנית של כמה עורכים. כל תרחיש מכסים בבדיקה.
  5. קבלה בסביבת בדיקה. מציגים את העבודה על עותק של תוכן הייצור, משווים את ההתנהגות ללוגיקה המקורית. עריכות מבוצעות לפני העלייה לאוויר, ולא אחריה.
  6. מסירה לצוות. מוסרים תיעוד של המבנה וההגדרות, הוראות לעורכים, נוהל rollback. מקיימים סקירה עם המפתחים שלכם, כדי שניתן יהיה לפתח את המודול בלעדינו.

כל שלב מסתיים בתוצר שניתן לבדוק: מפת תלויות, סכימת נתונים, מערך בדיקות, הוראות תפעול. כך בסיום אתם מקבלים לא "קופסה שחורה", אלא רכיב צפוי עם תחום אחריות ברור.

מה הלקוח מקבל לידיו: קונפיגורציות, תרשימים, נהלים

אנחנו מעבירים לא "קוד עובד על השרת שלנו", אלא ערכה שצוות שלכם או קבלן אחר ימשיכו איתה לעבוד בלעדינו. להלן מה שמתועד בדיוק במסירה עבור מודול מותאם אישית.

  • קונפיגורציות של המודול — קבצי הגדרות עם תיאור כל הפרמטרים: אילו שדות וסוגי תוכן המודול רושם, אילו אירועים הוא מיירט, אילו ערכי ברירת מחדל. ההגדרות מופרדות מהקוד, ולכן ההתנהגות משתנה על ידי עריכת הקונפיגורציה ולא על ידי פיתוח נוסף.
  • תרשימי קשרים — מפה של האופן שבו המודול מתקשר עם ליבת המערכת, עם מודולים אחרים ועם שירותים חיצוניים: נקודות הרחבה, סדר הקריאות, מקומות שבהם הלוגיקה תלויה בנתונים חיצוניים.
  • מדיניויות גישה — מטריצת הרשאות לפי תפקידים: מי רואה את מקטעי המודול, מי משנה הגדרות, מי רק קורא נתונים. בנפרד מתוארות הבדיקות בצד השרת, כדי שהרשאות לא ייעקפו באמצעות בקשה ישירה.
  • מיגרציות ומבנה הנתונים — תרחישים לשינוי סכימת האחסון עם ניהול גרסאות, כדי שהעדכון לא ישבור רשומות שכבר נצברו ויתבצע rollback באופן תקין.
  • תיעוד המודול — ייעוד, מתודות ציבוריות, דוגמאות לקריאות, מגבלות והנחות ידועות. מספיק כדי שמפתח חדש ית�צא את דרכו בלי להתכתב עם המחבר.
  • נהלי עדכון ו-rollback — סדר פריסת השינויים, בדיקות לפני שחרור, נקודות חזרה לגרסה הקודמת ותנאים שבהם ה-rollback מופעל אוטומטית.
  • הוראות תפעול — פעולות אופייניות: הפעלה וכיבוי של המודול, רוטציה של מפתחות, קריאת לוגים, תגובה לתקלות של שירותים חיצוניים.

הערכה סוגרת את הסיכון המרכזי של פיתוח מותאם אישית — תלות במבצע אחד. כל מהנדס שמכיר את ה-stack מרים את המודול בסביבה נקייה לפי התיעוד וממשיך את הפיתוח. תארו את המשימה — נחזור עם הערכה ותוכנית מסירה.

קייס: כיצד המודול הסיר פעולות ידניות והאיץ את התגובה

הלקוח — רשת של כמה עשרות נציגויות אזוריות — ניהל קטלוג מוצרים ומלאי ב-Craft CMS. מנהלי התוכן עדכנו מחירים וזמינות ביד: ייצוא ממערכת החשבונאות הגיע כקובץ, לאחר מכן העברה שורה-שורה, השוואה, פרסום. בשיא — כמה מאות עריכות ביום, וכל טעות במלאי עברה לחלון הראווה.

פירקנו את צוואר הבקבוק: הבעיה לא הייתה בנפח הנתונים, אלא בהיעדר שכבה בין מערכת החשבונאות לעורך. בנינו מודול מותאם אישית שמקבל ייצוא לפי לוח זמנים, מתאים רשומות לפי מזהה חיצוני ומעדכן שדות דרך ה-API התקני של Craft — ללא שאילתות ישירות למסד הנתונים וללא עקיפת המטמון.

קונפליקטים של גרסאות (מי ערך אחרון) המודול פותר לפי חתימת זמן ורושם אותם ביומן, ולא דורס "בשקט".

מה היה לפני ומה נהיה אחרי

מדד לפני אחרי
עדכון הקטלוג ידני, פעם ביום לפי לוח זמנים, כל 15 דקות
עריכות ידניות ביום כמה מאות בודדות (רק מקרים לא שגרתיים)
טעויות במלאי קבועות, נתפסו בדיעבד נחסמות בקליטת הנתונים
תגובת חלון הראווה לשינוי שעות דקות

בנפרד סגרנו את החזרה לאחור: כל עדכון רושם תמונת מצב של הרשומות ששונו, ולכן ניתן לבטל ייצוא כושל בפעולה אחת, מבלי לשחזר את מסד הנתונים כולו. הפעולות הידניות יצאו מהתהליך — המנהלים עוסקים בתוכן, ולא בהשוואת טבלאות.

במה שונה מודול מותאם אישית מתוסף מהמרקטפלייס?

תוסף מהמרקטפלייס הוא פתרון מוכן לתרחיש טיפוסי: טופס יצירת קשר, ייבוא פשוט, אינטגרציה בסיסית. כל עוד המשימה תואמת את מה שהמחבר הטמיע בתוסף, הכול עובד כצפוי.

הבעיה מתחילה במקום שבו הלוגיקה העסקית סוטה הצידה: יש צורך בחישוב לא סטנדרטי, בסכימת הרשאות גישה משלכם, בקישור של כמה יישויות לתהליך אחד. אז התוסף או שאינו סוגר את המשימה, או שסוגר אותה חלקית — ומסביבו מתחילים לצמוח פתרונות עוקפים.

מודול מותאם אישית נכתב עבור תהליך ספציפי, ולכן השליטה בלוגיקה נשארת בידי הצוות, ולא בידי מחבר חיצוני. אנחנו בעצמנו קובעים את מבנה הנתונים, את סדר הפעולות, את נקודות ההרחבה ואת האופן שבו המודול מתנהג בעת שגיאות.

זהו הבדל עקרוני: בתוסף אתם מקבלים החלטות של אחרים כנתון מוגמר, במודול — אתם מתכננים אותן עבור המשימה שלכם.

תלויות — זהו המקור השני לסיכונים. לתוסף תמיד יש שרשרת: המחבר, לוחות הזמנים שלו לתמיכה, תאימות לענף העדכני של ה-CMS, ספריות צד שלישי בפנים. בעת עדכון הליבה שרשרת כזו נקרעת ברגע הכי לא נוח, ואתם או שממתינים לטלאי מהמחבר, או שמקפיאים את העדכונים. מודול מותאם אישית אנחנו מחזיקים על ממשקי ליבה נתמכים ומעדכנים יחד איתה — בלי להמתין לצד שלישי.

מכאן גם סוג שונה של סיכונים בעת עדכון ה-CMS. תוסף עלול להישבר בעדכון מג'ורי, ואי אפשר לתקן אותו בלי גישה לקוד המקור. מודול אנחנו מתחזקים בעצמנו: רואים מה השתנה בליבה ומתקנים ממוקד, בלי לגעת בשאר המערכת.

לכן עבור תהליכים שמעניקים לעסק יתרון, מודול כמעט תמיד משתלם יותר — אתם לא חולקים את השליטה בלוגיקה עם צוות זר.

ספקות טכניים: עדכונים, אבטחה, שחזור

מודול מותאם אישית חי בבסיס הקוד של הפרויקט, ולא בליבת המערכת, ולכן עדכוני ה-CMS אינם שוברים אותו: ההרחבות מתחברות דרך נקודות ההרחבה התקניות, ולא על ידי עריכת קבצי הספק.

בעת עדכון מג'ורי אנו מריצים את המודול על סביבת בדיקה עם עותק של נתוני הייצור — אם חוזה נקודות ההרחבה השתנה, ההתאמה אורכת שעות, ולא שבועות של כתיבה מחדש מאפס.

ההרשאות מופרדות לפי תפקידים והרשאות בתוך ה-CMS עצמו: מנהל התוכן רואה רק את המדורים שלו, המנהל — את הגדרות המודול, ואינטגרציות חיצוניות פועלות באמצעות מפתחות נפרדים עם סט מוגבל של פעולות. כל הפעולות עם הנתונים נרשמות ביומן — ניתן לראות מי ומתי שינה רשומה, וזה גם מסייע בחקירת אירועים.

מה יקרה אם עדכון ה-CMS בכל זאת ישבור את המודול?

את העדכון מתקינים תחילה על עותק של סביבת הייצור, ולא על הפרודקשן. אם המודול לא עובר את הבדיקות, גרסת ה-CMS מוחזרת לענף הקודם, והמודול מותאם בנפרד — האתר בייצור ממשיך לעבוד ללא השבתה. לפני כל עדכון אנו מצלמים תמונת מצב של בסיס הנתונים והקבצים, ולכן החזרה למצב תקין אורכת דקות.

כיצד ניתן לשחזר שינויים שהמודול ביצע?

שינויי התוכן מנוהלים בגרסאות: עבור כל רשומה נשמרת היסטוריית修订, וכל אחת מהן ניתנת לשחזור נקודתי, מבלי להחזיר את כל השאר. עבור שינויים בסכימת הנתונים אנו מכינים מיגרציות הפוכות — הן מבוצעות באותה פקודת פריסה כמו הישירות, ונבדקות בסביבת הבדיקה לפני הפרודקשן.

האם המודול תואם להרחבות צד שלישי?

כן, אם הן משתמשות בנקודות ההרחבה התקניות, ולא דורסות את הליבה. קונפליקטים נוצרים בדרך כלל ברמת טבלאות משותפות או יירוט של אותם אירועים — מקומות כאלה אנו מזהים בשלב התכנון ומפרידים לפי סדרי עדיפויות של עיבוד. לפני ההטמעה אנו מריצים תרחיש עם מלוא סט ההרחבות של הלקוח.

למי יש גישה לשרת ולבסיס הנתונים לאחר המסירה?

ההרשאות נשארות בידי הלקוח: אנו עובדים דרך חשבונות נפרדים עם הרשאות מוגבלות ותיעוד ביומן, ולא דרך כניסה מנהלית משותפת. המשמעות היא שבעת החלפת קבלן או מהנדס, הגישה נשללת בפעולה אחת, ללא סיכון לאבד שליטה על המערכת.

בואו נדון במשימה: נחזור עם הערכה ותוכנית

כדי לחזור עם הערכה ותוכנית, ולא עם מילים כלליות, אנחנו צריכים מינימום של נתוני פתיחה על המשימה.

מודול מותאם אישית ב-Craft CMS כמעט תמיד צומח מצוואר בקבוק ספציפי: חישוב הנחות לא סטנדרטי, סנכרון קטלוג עם מערכת חיצונית, תפקידים והרשאות שלא קיימים בסט הבסיסי, או סוג תוכן משלו עם לוגיקת פרסום מורכבת. ככל שתתארו בצורה מדויקת יותר מה קורה כיום ומה אמור לקרות, כך נניח פחות הנחות בהערכה.

להתחלה מספיק הדבר הבא:

  • תיאור התהליך העסקי: מי עושה מה, היכן כרגע נשבר או נעשה ידנית;
  • דוגמאות לנתונים: ייצוא, צילומי מסך של ממשק הניהול, דוגמאות של שדות וקשרים בין ישויות;
  • כיצד המשימה נפתרת היום — באמצעות שירות חיצוני, טבלאות, עבודת מנהל;
  • דרישות לגישות: אילו תפקידים צריכים לראות ולשנות נתונים, ומה לקרוא בלבד;
  • אינטגרציות: עם מה המודול מחליף נתונים ובאיזה כיוון;
  • מגבלות: לוחות זמנים, תלות בריליסים, מה אסור לשבור באתר הנוכחי;
  • איש קשר של מי שיקבל את העבודה ויאשר את הלוגיקה.

בתגובה אנחנו מחזירים הערכה ותוכנית: חלוקה לשלבים עם מאמצי עבודה, טיוטת מפרט טכני, תרשים נתונים ונקודות אינטגרציה, רשימת סיכונים והנחות, וכן סדר העלאה — תחילה בסביבת בדיקות, ולאחר מכן בסביבת הייצור עם אפשרות לחזרה לאחור.

אם במהלך הניתוח עולים תלויות לא ברורות מאליהן, אנחנו מתעדים אותן בנפרד, כדי שתחילת העבודה לא תהפוך לבחינה מחדש של לוחות הזמנים.

תארו את המשימה בצורה חופשית — זה יספיק כדי לחזור עם הערכה ותוכנית.

הכישורים שלנו:

העבודות האחרונות

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1393
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1368
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1139
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1152
  • פיתוח אתר עבור SBH Partners
    פיתוח אתר עבור SBH Partners
    1231
  • פיתוח אתר עבור Red Pear
    פיתוח אתר עבור Red Pear
    641