רכיב מורכב של ביטריקס: היכן נשברת הלוגיקה
רכיב מורכב הוא חיבור של רשימה ועמוד מפורט, שבו ניתוב, מטמון והרשאות גישה תלויים זה בזה. שגיאה בשכבה אחת שוברת את האחרות: כלל שגוי של כתובת ידידותית הופך כתובות מפורטות לכפולים, מטמון אגרסיבי מגיש לאורח עמוד בתצוגת מנהל, והרשאות לא מחושבות פותחות מדורים של אחרים בכתובת ישירה. נבחן כיצד זה נסגר בעת פיתוח רכיב מורכב של ביטריקס.
השבירה הנפוצה ביותר היא ניתוב. תבנית הכתובת נבנית מקוד תווי וממדורים, אך אינה מביאה בחשבון קינון ושינוי קוד בעת עריכה: כתובות ישנות מפסיקות להיפתח, מנוע החיפוש רואה כפולים, וההפניות מחדש אינן מוגדרות.
כתובת ידידותית בביטריקס דורשת כללים מפורשים לבנייה מחדש ולטיפול ב-404 — אחרת העמוד המפורט מגיש תוכן בכל כתובת.
המקור השני לתקלות הוא מטמון. רכיב מורכב שומר במטמון גם את הרשימה, גם את הפרט וגם את התבנית הכללית; כאשר המפתחות שגויים המטמון אינו מתאפס בעת הוספת פריט או מתאפס כולו בכל פעולה. התוצאה — או נתונים מיושנים, או ירידה בזמן התגובה תחת עומס. הפתרון הוא הפרדת מטמון לפי מדורים וקשירת האיפוס לאירועים של בלוק המידע.
השכבה השלישית היא הרשאות גישה. בדיקת הרשאות רק ברמת הרשימה משאירה את העמודים המפורטים פתוחים: המשתמש מגיע בקישור ישיר למקום שאסור לו לראות. יש לבדוק הרשאות בכל מצב של הרכיב וברמת המדורים, ולא של העמוד כולו.
שלוש השכבות הללו קשורות זו בזו: כלל הכתובת הידידותית משפיע על מפתח המטמון, וההרשאות — על מה שנכנס בכלל למטמון. לכן רכיב מורכב מתכננים כמכלול, ולא מתקנים בחלקים.
מה מספקת פיתוח נכון של רכיב מורכב
רכיב מורכב ב-1С-Битрикс הוא נקודת המפגש של שלושה דברים שלרוב נשברים בפתרונות עצמאיים: כתובות העמודים, המטמון והרשאות הגישה.
כאשר מתכננים אותם יחד, ולא "מוסיפים אותם בדיעבד", התנהגות המערכת הופכת לצפויה: כללי ЧПУ מוגדרים באופן הצהרתי ואינם תלויים בסדר הפרמטרים במחרוזת הבקשה, המטמון מתבטל לפי תגים מוגדרים, ובדיקת ההרשאות מתבצעת בכניסה לרכיב, ולא בתבנית.
האפקט המעשי ניכר במדדים. ЧПУ יציבים מסירים כפילויות של עמודים וכתובות "מקפצות" בעת החלפת מסננים — שיעור המדורים הנסרקים כראוי עולה, והפניות מפסיקות להיות עבודה ידנית.
מטמון מנוהל מפחית את זמן תגובת עמוד הקטלוג משניות לעשרות מילישניות במטמון מחומם ומסיר עומס מהמסד בעת עומסי שיא.
הפרדת הגישה סוגרת מחלקה שלמה של כשלים: משתמש ללא תפקיד אינו מקבל נתונים דרך קריאה ישירה למתודה, גם אם התבנית רונדרה באופן שגוי. זו אינה בדיקה "קוסמטית" בתבנית, אלא מסנן ברמת השליפה והמטמון — וזו בדיוק הסיבה שהוא אינו נעקף על ידי החלפת פרמטרים בבקשה.
בנפרד ראוי לציין את מצב SEF ואת העבודה עם כתובות מורכבות: כאשר הכללים נשמרים בקונפיגורציה של הרכיב, ולא מפוזרים בין המטפלים, הוספת מדור חדש אינה דורשת תיקונים בכמה מקומות.
שגיאות של פתרונות טיפוסיים — "מטמון על הכל", הרשאות רק בממשק, כתובות התלויות בסשן — נעלמות בשלב התכנון, ולא לאחר ההרצה.
התוצאה — הפחתה של מחלקת הכשלים היקרים ביותר: אובדן מיקומים בחיפוש, זינוקות בעומס ודליפות נתונים. בהמשך נבחן כיצד זה נראה בשלבי העבודה.
מצבי עבודה: רכיב רגיל, מורכב, תבנית מותאמת אישית
הבחירה בין רכיב רגיל לרכיב מורכב אינה עניין של "מסובך יותר/פשוט יותר", אלא של היכן נמצאת לוגיקת הניתוב וכיצד היא מתקיימת לצד המטמון. רכיב רגיל פותר משימה אחת: להציג רשימה, עמוד מפורט או טופס.
רכיב מורכב לוקח על עצמו את הצירוף "רשימה + מפורט + מדורים" ומפרק בעצמו את הכתובת לפי כללי ЧПУ, ומחבר את התבנית המתאימה לכל מצב.
תבנית רכיב היא שכבת התצוגה: בה מוגדרים ЧПУ, חלוקה לעמודים, שדות השליפה ונקודות ההרחבה. אם מפרקים את הלוגיקה לפי תבניות כראוי, רכיב מורכב אחד מכסה את כל מדור הקטלוג או הבלוג, ולא הופך לאוסף של עותקים.
| אפשרות | מתי מתאימה | מגבלות |
|---|---|---|
| רכיב רגיל | עמוד אחד: הצגת רשימה, כרטיס, טופס | ЧПУ ומדורים נבנים ידנית, הלוגיקה משוכפלת בין עמודים |
| רכיב מורכב | מדור עם היררכיה: קטלוג, בלוג, שירותים | דורש הגדרה מדויקת של מטמון והרשאות, אחרת העמודים "נתקעים" |
| תבנית רכיב מותאמת אישית | נדרשת פריסה לא סטנדרטית ונקודות פלט משלך | יותר קוד בתבנית, סיכון גבוה יותר להחדיר לשם לוגיקה עסקית |
מטמון הוא קו פרשת המים המרכזי. ברכיב מורכב המטמון נפרד עבור הרשימה והעמוד המפורט, ולכן חשוב להגדיר נכון את המפתחות: פרמטרי השליפה, מספר העמוד, קבוצת המשתמש. אחרת לאחר עריכת כרטיס אחד מתאפס כל המדור, ובמפתחות שגויים המבקר רואה מטמון של אחר.
הרשאות גישה נבדקות ברמת הרכיב והתבנית: אורח, משתמש מאומת ומנהל עשויים לקבל שליפות שונות ותצוגה שונה. אם לא מתחשבים בכך, המטמון ימסור לאורח נתונים המיועדים לקבוצה אחרת. לכן המטמון מקושר לקבוצת המשתמש, ובדיקת ההרשאות מתבצעת לפני השליפה, ולא אחריה.
שלבי יישום: מביקורת ועד מסירה
את העבודה מתחילים בביקורת: בודקים אילו רכיבים כבר בשימוש, היכן משוכפלת לוגיקת השליפה, כיצד בנויים התבניות ומה למעשה נכנס למטמון. בשלב זה מזהים את צווארי הבקבוק — לרוב אלו שאילתות בלולאה, היעדר הפרדה לפי מדורים ומטמון שמתאפס בכל שינוי באינפובלוק.
- ביקורת הרכיב. מפרקים את המימוש הנוכחי: עץ הקריאות, מקורות הנתונים, הגדרות המטמון, ההתנהגות תחת עומס. בפלט — מפת בעיות עם סדרי עדיפויות: מה שובר את הביצועים, מה מעכב את הפיתוח.
- תכנון הסכמה. מגדירים את המבנה של הרכיב המורכב: אילו ענפים (רשימה, מפורט, מדורים) הוא מכסה, כיצד פורסים את הפרמטרים, היכן עובר הגבול בין הלוגיקה לתבנית. את הסכמה מתאמים לפני כתיבת הקוד — תיקונים על הנייר זולים מתיקונים בפרודקשן.
- מימוש והגדרת מטמון. בונים את הרכיב עם מטמון מנוהל: מטמון נפרד לפי ענפים ופרמטרים, איפוס מתויג בעת שינוי של אלמנטים מסוימים ולא של המדור כולו. זה מסיר את הסיבה העיקרית ל"האתר מאט אחרי כל עריכת תוכן".
- בדיקת הרשאות גישה. בודקים תרחישים לפי תפקידים: אורח, משתמש מאומת, עורך, מנהל. בנפרד בודקים שהמטמון לא מחזיר נתונים שאינם נגישים לתפקיד הנוכחי — זו דליפה אופיינית בהגדרה לא מדויקת.
- בדיקות ומדידות. מריצים תרחישי עומס לפני ואחרי, משווים את זמן התגובה ואת מספר השאילתות למסד הנתונים. מתעדים את התוצאה במספרים, כדי שהאפקט יהיה מדיד ולא "נהיה מהיר יותר".
- מסירת תיעוד. מוסרים תיאור של סכמת הרכיב, הפרמטרים, לוגיקת המטמון וההרשאות, והוראות לשינויים טיפוסיים. הצוות שלכם יכול לפתח את הרכיב הלאה בלעדינו — זה חלק מהתוצאה, לא אופציה.
כל שלב מסתיים בארטיפקט: מפת ביקורת, סכמה מאושרת, רכיב עובד, דוח מדידות, תיעוד. תארו את המשימה — נחזור עם הערכה ותוכנית לפי שלבים אלו.
מה הלקוח מקבל לידיו: תצורות ותקנונים
רכיב מורכב ללא תיעוד הופך ל"קופסה שחורה": כעבור חצי שנה איש כבר לא זוכר מדוע המטמון מתבטל דווקא לפי התג הזה, וההרשאות לסעיף ניתנו כך ולא אחרת. לכן אנו מוסרים לא רק קוד, אלא סט מלא של ארטיפקטים, שלפיו ניתן לפתח את הרכיב ולהעבירו לצוות אחר.
- תצורת הרכיב — קובץ
.parameters.phpעם תיאור כל פרמטרי הקלט, ערכי ברירת מחדל וטווחים מותרים. בנפרד אנו מתעדים את מצבי SEF ואת כללי בניית ЧПУ, כדי שהמסלולים לא "יזוזו" בעת החלפת תבנית. - סכמת מטמון — אילו תגים וזמן חיים הוגדרו לרשימה ולעמוד המפורט, מה מאפס את המטמון בעת הוספה או עריכה של פריט. הסכמה בצורת טבלה: אירוע → תג מבוטל → עמודים מושפעים.
- מדיניות גישה — מטריצת "תפקיד → פעולה → רמת גישה" לפי סעיפים ואינפובלוקים, עם קישור לקבוצות משתמשים והגדרות ברמת הרכיב. ניתן לראות מי קורא, מי עורך, מי מפרסם.
- סכמת ניתוב SEF — התאמת "URL → תבנית → פרמטרי הרכיב", כולל טיפול בכתובות לא קיימות והפניות מחדש.
- מפת תבניות — איזו תבנית רכיב אחראית למה, אילו בלוקים הוצאו לאזורים נכללים, והיכן נקודות ההרחבה ללוגיקה מותאמת אישית.
- תקנון עדכון — סדר עריכת הפרמטרים, כללי איפוס מטמון לאחר פריסה ורשימת בדיקה לאחר שינויים באינפובלוקים.
- הוראות למנהל התוכן — כיצד להוסיף סעיפים ופריטים מבלי לשבור את מבנה ЧПУ ומבלי לאפס מטמון מיותר.
- יומן החלטות — מדוע נבחרו דווקא הגדרות המטמון וההרשאות הללו, אילו חלופות נדחו ומאיזו סיבה.
את הסט אנו מעבירים למאגר הקוד לצד הקוד, ולא בארכיון נפרד — כך שבפיתוח הבא המהנדס פותח את הסכמה ורואה את הלוגיקה בשלמותה, בלי ארכאולוגיה בקוד המקור.
מקרה בוחן: כיצד רכיב מורכב ביטל סוג של כשלים
הלקוח — רשת חנויות קמעונאיות, קטלוג עם כמה עשרות אלפי פריטים עם מסננים לפי מאפיינים. לפני כן עמוד הקטלוג נבנה ברכיב מונוליטי: כל בקשה משכה מחדש את רשימת המדורים, המוצרים והצעות המסחר, והמטמון אופס בכל שינוי באינפובלוק. עריכות של מנהל התוכן הפילו את המטמון של כל המדור — תחת עומס זה יצר כשלים קבועים.
כתבנו מחדש את התצוגה כרכיב מורכב עם הפרדת לוגיקה: הרשימה והכרטיס המפורט קיבלו ענפי מטמון משלהם, ואיפוס המטמון נקשר לאלמנט מסוים ולא למדור כולו. הרשאות הגישה הועברו לשכבה נפרדת — בדיקת קבוצת המשתמש מתבצעת לפני שליפת הנתונים, ולכן מדורים סגורים לא נכנסים לא למטמון ולא לתצוגה.
העבודה עם 1С-Битрикс בוצעה דרך מנגנונים תקניים — ללא שינויים בליבה, כדי שעדכוני הפלטפורמה לא ישברו את הלוגיקה.
| מדד | לפני | אחרי |
|---|---|---|
| זמן בניית עמוד הקטלוג | 2.4 ש' | 0.4 ש' |
| זמן ההתאוששות לאחר תקלה | 40 דק' | 5 דק' |
| שיעור הבקשות עם שגיאה | 3.1% | 0.2% |
הנתונים נלקחו מתעבורה חיה במשך שבועיים לפני ואחרי היישום. זמן הבנייה ירד בזכות מטמון השליפות והוויתור על בקשות חוזרות להצעות המסחר; ההתאוששות הואצה מכיוון שהתקלה כעת ממוקדת בענף אחד של הרכיב ואינה דורשת טעינה מחדש מלאה של הקטלוג. שיעור השגיאות הצטמצם מכיוון שבדיקת ההרשאות והמסננים פועלים לפני הפנייה למסד הנתונים.
בנפרד תיעדנו את ההתנהגות תחת עומס שיא: במהלך מבצע מכירות, כאשר מספר המבקרים בו-זמנית גדל פי שלושה, עמוד הקטלוג נשאר באותם זמני תגובה. קודם לכן ברגעים כאלה המטמון נבנה מחדש בכל בקשה והשרת עבר לעומס יתר.
במה שונה רכיב מורכב מרכיב רגיל?
רכיב רגיל הוא קריאה אחת בתבנית: קיבל נתונים, עיבד, החזיר עמוד. רכיב מורכב בנוי כמו יישומון בתוך העמוד: יש לו רשימה, עמוד מפורט, מצב הוספה ועריכה, וכל מצב הוא ענף לוגיקה נפרד עם סט נתונים משלו.
לכן בקוד הוא פועל לא עם שאילתה אחת, אלא עם ניתוב: איזה מצב פעיל, איזה פריט מבוקש, מה להציג כאשר הפריט חסר. מכאן גם ההבדל העיקרי ברמת הארכיטקטורה — רכיב מורכב מנהל בעצמו את מבנה ה-URL, ולא נשען על קבצים פיזיים.
כתובות ידידותיות (ЧПУ) הן תוצאה ישירה של הארכיטקטורה הזו. רכיב מורכב קורא את הכתובת, מפרק אותה למצב ולמזהה ומציב את התבנית המתאימה, בלי ליצור קובץ נפרד לכל ישות.
כלל השכתוב בהגדרות הרכיב מקשר בין כתובת קריאה לאדם לבין פרמטרי השליפה, והוספת ישות חדשה אינה מחייבת שינויים במבנה האתר. לרכיב רגיל אין ניתוב כזה: הכתובת נקבעת על ידי העמוד, והסינון עובר לפרמטרי הבקשה.
גם הקישור (кеширование) שלהם הוא מסוג אחר. רכיב רגיל נשמר במטמון כולו לפי עמוד, וכל שינוי בנתונים מבטל את כל הבלוק. רכיב מורכב שומר במטמון לפי מצבים ובנפרד — את השליפות בתוך המצב, ולכן עדכון של פריט אחד אינו בונה מחדש את כל הרשימה.
כאשר מטמון מנוהל פעיל, האיפוס קשור לתגים: עריכת ישות מאפסת רק את הענפים הקשורים אליה, ולא את כל העמוד. בקטלוג עם שינויים תכופים זה ההבדל בין בנייה מחדש של כל המדור לבין עדכון ממוקד.
הרשאות גישה רכיב מורכב בודק בכניסה לכל מצב, ולא פעם אחת בעמוד. זה מאפשר להעניק לאורח רק את הרשימה והעמוד המפורט, ולסגור את העריכה בבדיקה לפני טעינת הנתונים — שליפות מיותרות אינן מבוצעות כלל. לרכיב רגיל הבדיקה היא בדרך כלל אחת לכל הפלט, וקשה יותר להפריד בין הפעולות בתוכו.
בדיוק משום כך בוחרים רכיב מורכב במקומות שבהם נדרשים כתובות ידידותיות, מטמון ממוקד והרשאות שונות לפעולות שונות.
ספקות טכניים נפוצים לגבי הרכיב
רכיב מורכב כמעט תמיד מתפתח סביב אותן שאלות — לגבי מטמון, הרשאות וכתובות ידידותיות לאדם. להלן נבחן אותן לגופן, בלי מילים כלליות.
האם המטמון לא יחזיר נתונים מיושנים לאחר עריכות?
הרכיב שומר במטמון לא "הכול באופן גורף", אלא את תוצאת העבודה בהתחשב במפתח: פרמטרי הקריאה, קבוצת המשתמש, השפה, המדור. עריכת תוכן דרך לוח הניהול מאפסת את המטמון המשויך באופן אוטומטי, ולמקורות חיצוניים אנו תולים את האיפוס על אירועי שינוי נתונים.
אם התוכן מתעדכן לפי לוח זמנים, נוסיף מטמון מתויג עם זמן חיים מוגבל — המבקר רואה גרסה עדכנית, ולא "תצלום" בן שבוע.
האם הרשאות הגישה לא יישברו בעת חלוקה לפי תפקידים?
ההרשאות נבדקות ברמת הרכיב וברמת שליפת הנתונים, ולא רק בתבנית. המשמעות היא שלא ניתן לפתוח מדור מוסתר בבקשה ישירה — השרת יחזיר סירוב, גם אם הקישור ידוע. לאורחים, למשתמשים מאומתים ולעובדים אנו מגדירים ענפי לוגיקה נפרדים, כך שכל קבוצה רואה בדיוק את מערך הנתונים שלה.
האם יהיה צורך לשנות את הכתובות הידידותיות לאחר ההשקה?
את הכתובות מתכננים מלכתחילה עם כללי ניתוב, ולא "מחברים" אותן בדיעבד. הרכיב מחזיר קישורים ידידותיים לאדם בשלב הפיתוח, ולכן בעת הוספת מדורים חדשים המבנה לא נשבר והכתובות הישנות ממשיכות לעבוד. בעת העברה ממערכת אחרת אנו מגדירים הפניות מחדש, כדי שתעבורת החיפוש לא תיחלש.
האם עדכוני הפלטפורמה לא ישברו את הרכיב?
אנו לא מתקנים את הליבה ולא מסתמכים על קריאות מיושנות — הלוגיקה חיה ברכיב משלה עם נקודות הרחבה ברורות. העדכונים מיושמים בסביבת בדיקה, מורצים על תרחישי המפתח ורק לאחר מכן עוברים לסביבת העבודה. אם עדכון משנה את ההתנהגות, יש לנו תוכנית נסיגה.
ארבעת הנושאים הללו סוגרים את מרבית הספקות עוד לפני ההתחלה. אם נותרו שאלות לגבי התצורה שלכם — נבחן אותן בשלב ההערכה.
בואו נדון במשימה: נחזור עם הערכה ותוכנית
כדי שההערכה תהיה מדויקת ולא "בעין", אנחנו צריכים מכם מינימום הקשר: איזה רכיב נוגעים בו — שלנו או טיפוסי, אילו כללי SEF יש לו כרגע, כיצד מוגדר המטמון ואיזו מקבוצות המשתמשים רואה מה.
לפי נתוני פתיחה אלה אנחנו מבינים את ההיקף: שדרוג של רכיב מורכב קיים בדרך כלל זול ומהיר יותר מאשר כתיבה מחדש מאפס, אבל רק אם ארכיטקטורת התבניות והמטמון מאפשרת זאת.
תארו את המשימה — נחזור עם הערכה ותוכנית עבודה. בתגובה תקבלו:
- ניתוח של הרכיב הנוכחי: היכן SEF נשבר, מה נשמר במטמון שלא לצורך, אילו בדיקות הרשאות גישה נעקפות;
- תוכנית עבודה לפי שלבים — מתכנון מבנה ה-URL ומצבי המטמון ועד להצגת תבניות ובדיקות;
- סכימת הרשאות גישה: אילו קבוצות רואות אילו נתונים ובאיזו רמה זה נבדק;
- אפשרויות מימוש עם מגבלות כנות של כל אחת — בלי "נעשה הכל בבת אחת";
- הרכב העבודות למיגרציה, אם הרכיב מחליף מדור קיים;
- רשימה של מה שצריך מצדכם: הרשאות גישה, סביבת בדיקה, דוגמאות URL;
- לוחות זמנים לפי שלבים ונקודות שבהן אתם מקבלים את התוצאה.
אם המשימה עדיין לא מנוסחת עד הסוף — זה בסדר. תארו במילים שלכם מה אמור לעבוד ומה מפריע כרגע: נשאל שאלות הבהרה בנוגע ל-SEF, למטמון ולהרשאות ונחזור עם הערכה.

