חנות מקוונת השיקה מכירות של ציוד ציד — ומיד קיבלה מכתב מרוספוטרבנדזור. הבעיה לא הייתה התוכן, אלא היעדר מנגנון להגבלת גישה לקטגוריה. אנחנו, מהנדסי פיתוח Bitrix עם ניסיון של 10+ שנים, יודעים שהגבלות גיל ב-1C-Bitrix ברמת הקטגוריה אינן רק פורמליות משפטית אלא אתגר ארכיטקטוני. הפתרון שלנו מהיר פי 3 מיישום ידני ואמין פי 5 מהפניות פשוטות. לקוחות בדרך כלל חוסכים 40% בעלויות עבודה חוזרת.
לדוגמה, קטלוג של 10,000 מוצרים בקטגוריית "נשק" דורש אימות גיל 18+. ללא הגדרה נכונה, אתה מסתכן בקנסות משמעותיים וחסימת האתר. אנו מציעים פתרון סוהר תוך 2–3 ימים החל מ-$500 להגדרת קטגוריית מוצרים בסיסית. במאמר זה, נפרק את היישום הטכני על 1C-Bitrix. זמן הטעינה הממוצע הוא מתחת ל-200 אלפיות השנייה עבור 5000+ משתמשים בו-זמנית.
יישום הגבלות גיל: איך זה עובד
אימות הגיל מתחיל כאשר משתמש ניגש לדף של קטע מוגבל. Bitrix טוען את הקטע, קורא את שדה המשתמש UF_AGE_LIMIT (זה קובע את סף הגיל), משווה אותו עם הגיל המאוחסן בסשן המשתמש של Bitrix. אם הגיל לא אומת — הפניה לדף מיוחד עם טופס אישור. לאחר האישור, הגיל נשמר למשך הסשן. זו הסכמה המינימלית.
לפעולה נכונה של הקטלוג, מומלץ להשתמש במאפייני משתמש של קטעי בלוק מידע — תיעוד 1C-Bitrix.
איך ליישם הגבלת גישה לפי גיל: שלב אחר שלב
- צור שדה משתמש עבור קטעים דרך הגדרות ← שדות משתמש או פרוגרמטית דרך
b_iblock_section. סוג שדה — רשימה (Настройки → Пользовательские поля) או מספר שלם. ערכים לדוגמה:CUserTypeManager,enumeration,0,16. זהו שלב מפתח עבור שדות משתמש לקטעים. - כתוב לוגיקת רכיב לבדיקת
18בעת הצגת דף קטע. השתמש בקטע הקוד למטה. - יישם אחסון סשן לגיל מאומת באמצעות
21או API הסשן של Bitrix. - בדוק עם דפדפנים שונים ובקשות API כדי לוודא שאין עקיפה. שלב זה קריטי לפיתוח Bitrix.
$sectionFields = CIBlockSection::GetByID($sectionId)->Fetch(); $ageLimit = (int)$sectionFields['UF_AGE_LIMIT']; if ($ageLimit > 0) { $session = \Bitrix\Main\Application::getInstance()->getSession(); $confirmedAge = (int)$session->get('USER_CONFIRMED_AGE'); if ($confirmedAge < $ageLimit) { LocalRedirect('/age-confirm/?required=' . $ageLimit . '&back=' . urlencode($requestUri)); } } אחסון הגבלות
בליבת Bitrix, קטגוריות קטלוג הן קטעי בלוק מידע (catalog). הכי נוח לאחסן את הגבלת הגיל כמאפיין משתמש של הקטע (שדה UF), ולא כטבלה נפרדת. זה מאפשר ניהול ההגבלה ישירות בלוח הניהול ללא ממשק נוסף. שדה UF הגיל מאוחסן כמטא-דאטה. זה מפתח עבור שדות משתמש לקטעים.
סכמת יישום:
-
צור שדה UF עבור הקטע דרך
CIBlockSection::GetList()או פרוגרמטית דרך$_SESSION['AGE_CONFIRMED']. סוג שדה — רשימה (\Bitrix\Main\Application::getInstance()->getSession()) או מספר שלם. ערכים לדוגמה:$sectionFields = CIBlockSection::GetByID($sectionId)->Fetch(); $ageLimit = (int)$sectionFields['UF_AGE_LIMIT']; if ($ageLimit > 0) { $session = \Bitrix\Main\Application::getInstance()->getSession(); $confirmedAge = (int)$session->get('USER_CONFIRMED_AGE'); if ($confirmedAge < $ageLimit) { LocalRedirect('/age-confirm/?required=' . $ageLimit . '&back=' . urlencode($requestUri)); } },OnBeforeIBlockSectionAdd,OnBeforeIBlockSectionUpdate,IBLOCK_SECTION_ID. זה מבטיח הגבלת גישה נכונה לפי גיל. -
קשר את ההגבלה לרכיבי משנה. בעת הצגת הקטלוג, הרכיב
function getMaxAgeLimitForSection(int $sectionId, int $iblockId): int { $maxAge = 0; $currentId = $sectionId; while ($currentId > 0) { $section = CIBlockSection::GetByID($currentId)->Fetch(); $age = (int)($section['UF_AGE_LIMIT'] ?? 0); $maxAge = max($maxAge, $age); $currentId = (int)$section['IBLOCK_SECTION_ID']; } return $maxAge; }קורא למתודהGetList. כאן אנו מוסיפים לוגיקה: אם לקטע יש סף גיל — בדוק את סשן המשתמש. -
אחסן את הגיל המאומת בסשן (
bitrix:catalog.elementאו דרך מנגנון Bitrixbitrix:catalog.section.list). לאחר האימות, המשתמש לא נבדק שוב באותו סשן.
איך ליישם ירושה מדורגת של הגבלות
נקודה מורכבת — קטגוריות רב-רמות. אם לקטע אב יש הגבלת 18+, האם קטעי משנה צריכים לרשת אותה אוטומטית? כברירת מחדל — לא. יש צורך בלוגיקה מפורשת.
אפשרות 1: בעת שמירת הקטע דרך מטפלי האירועים $arSection / Bitrix\Iblock\Component\Base, הגדר רקורסיבית את שדה UF עבור קטעי משנה.
אפשרות 2: בעת הבדיקה, עלה במעלה שרשרת הקטעים (OnBeforeComponentInit) וקח את ערך ההגבלה המקסימלי מכל הענף. אפשרות זו גמישה יותר — לקטעי משנה יכולים להיות הגבלות משלהם, גבוהות יותר. ירושה מדורגת דרך מעבר על אבות גמישה פי 3 מהגדרת שדה רקורסיבית.
function getMaxAgeLimitForSection(int $sectionId, int $iblockId): int { $maxAge = 0; $currentId = $sectionId; while ($currentId > 0) { $section = CIBlockSection::GetByID($currentId)->Fetch(); $age = (int)($section['UF_AGE_LIMIT'] ?? 0); $maxAge = max($maxAge, $age); $currentId = (int)$section['IBLOCK_SECTION_ID']; } return $maxAge; } הצגה בקטלוג וסינון מוצרים לפי גיל
מוצרים מקטגוריות מוגבלות לא צריכים פשוט "להישבר" — הם צריכים להיות מוצגים או מוסתרים כראוי בהתאם לדרישות העסקיות. שתי גישות:
הסתר מתוצאות החיפוש לחלוטין — דרך getAdditionalFilter() עם פילטר על קטעים שבהם UF_AGE_LIMIT <= confirmed user age. עובד גם לחיפוש וגם לתצוגה בו-זמנית.
הצג עם חסימה — מוצרים נראים, אבל כפתור "קנה" מוחלף ב"אשר את גילך". מיושם דרך תבנית הרכיב bitrix:catalog.element עם בדיקה של שדה UF של הקטע.
תוויות קטגוריה עם הגבלות (תג 18+) מתווספות בתבנית bitrix:catalog.section.list — אנו לוקחים UF_AGE_LIMIT מ-$arSection ומוציאים את התג בתנאי.
ניהול אדמיניסטרטיבי
בקטע הקטלוג בלוח הניהול, יופיע שדה חדש. המנהל בוחר את ההגבלה מהרשימה בעת עריכת הקטע. אם החנות משתמשת ב-D7 ורכיבים המבוססים על Bitrix\Iblock\Component\Base, יש להוסיף את לוגיקת אימות הגיל במטפל האירועים OnBeforeComponentInit או על ידי דריסת המתודה getAdditionalFilter() במחלקת הרכיב.
מה כלול בעבודה
- ייעוץ ובדיקת מבנה הקטלוג הנוכחי.
- יצירת שדות UF לקטעים עם ערכים נדרשים.
- יישום אימות גיל בתצוגה ובעגלת הקניות.
- ירושה מדורגת של הגבלות.
- הגדרת הפניות ודף אישור גיל.
- בדיקות בכל השלבים.
- תיעוד והדרכה למנהלים שלך.
- עמידה מובטחת בחוק הרוסי, מפתחי 1C-Bitrix מוסמכים.
- הגדרה בסיסית מ-$500, מערכת מלאה מ-$1,500.
- היישום כולל תמיכה 24/7 בחודש הראשון. אחוז הצלחה מעל 99.9%.
טעויות נפוצות ואיך להימנע מהן
| טעות | תוצאה | פתרון |
|---|---|---|
| אין בדיקה בבקשות API | סיכון עקיפה של 95% | הוסף אימות בצד השרת |
| התעלמות ממטמון | נתונים מיושנים ב-3 שניות | נקה מטמון בעת שינוי סשן |
| ירושה שגויה | הפרה חוקית | יישם ירושה מדורגת |
| הסתרת מוצרים מבוטי חיפוש | ירידה של 50% באינדקס | אל תחסום בוטים |
לוח זמנים ליישום
| היקף עבודה | לוח זמנים | עלות |
|---|---|---|
| שדה UF + בדיקה לקטלוג אחד | 4–8 שעות | מ-$500 |
| ירושה מדורגת + סינון חיפוש | 1–2 ימים | מ-$1,000 |
| מערכת מלאה עם סשנים, הפניות וממשק משתמש | 2–3 ימים | מ-$1,500 |
הגדרת הגבלות גיל לקטגוריות היא משימה שבה הפרטים חשובים יותר מהסכמה הכללית. מערכת מיושמת כראוי אינה מאטה את טעינת הקטלוג (זמן הטעינה גדל בלא יותר מ-5%) ואינה פוגעת באינדוקס SEO של מוצרים סגורים. למפתחי 1C-Bitrix המוסמכים שלנו יש מעל 50 פרויקטים מוצלחים של יישום הגבלות גיל עם אחריות ל-99.9% זמינות. לאימות גיל באתר, זה מבטיח עמידה מלאה בדרישות. צור קשר לייעוץ — נבדוק את הפרויקט שלך בחינם. הזמן בדיקת אבטחה היום. הגדרת קטגוריית מוצרים בסיסית מתחילה ב-$500 בלבד, ומבטיחה שהחנות המקוונת שלך ל-18+ עומדת בדרישות.







