הסתרת מחירים עם כפתור 'גלה מחיר': ארכיטקטורה ומימוש
לקוח סיטונאי נכנס לקטלוג שלך, רואה את מחיר הקמעונאי ועוזב — חושב שזה יקר מדי. או שמתחרה עוקב אחר המחירים שלך באמצעות פרסר. הסתרת מחירים עם כפתור 'גלה מחיר' פותרת את שתי הבעיות: הלקוח ה-B2B שולח בקשה, והפרסר מקבל שדה ריק במקום מספר.
הצוות שלנו הגדיר מחירים מוסתרים בפרויקט עם למעלה מ-15,000 מוצרים ו-4 סוגי סוחרים. הגישה התבררה כלא טריוויאלית — היינו צריכים לשלב הרשאות סוג מחיר, מאפייני אינפובלוק וטופס בקשה מותאם אישית. להלן אנו חולקים את הארכיטקטורה ומבטיחים שהפתרון יתאים לקטלוג שלך תוך שעתיים בלבד.
כיצד מחירים מאוחסנים ב-1C-Bitrix
מחיר המוצר נמצא בטבלת b_catalog_price, מקושר לסוג מחיר (b_catalog_group). הרכיב catalog.element משתמש ב-CCatalogProduct::GetOptimalPrice() — הוא בוחר את סוג המחיר הזמין עבור המשתמש הנוכחי. אם אין סוג מחיר מורשה, השיטה מחזירה מערך ריק. זו נקודת ההתחברות להסתרה.
רמות הסתרת מחירים
- רמת תבנית הרכיב. הפשוט ביותר: בקובץ
template.phpאתה בודק תנאי ומציג כפתור במקום המחיר. תנאים: קבוצת משתמשים, מאפיין אינפובלוקHIDE_PRICE, נוכחות של סוג מחיר ספציפי. - רמת סוג המחיר. צור סוג מחיר נפרד 'לפי בקשה' ב-חנות → הגדרות → סוגי מחירים. עבור מוצרים עם מחירים מוסתרים, אל תקצה מחיר קמעונאי.
CCatalogProduct::GetOptimalPrice()לא מוצא מחיר — טפל בכך בתבנית. - רמת מאפיין האינפובלוק. הוסף מאפיין
PRICE_ON_REQUESTמסוג 'רשימה' (כן/לא). בתבנית בדוק את ערך המאפיין והחלף את בלוק המחיר בטופס בקשה. שיטה זו נוחה לניהול גורפי באמצעות CommerceML.
מימוש כפתור 'גלה מחיר'
הכפתור צריך לפתוח טופס עם מינימום שדות: שם, טלפון/דוא"ל, ומק"ט מוצר המוכנס אוטומטית. אפשרויות עיקריות:
| אפשרות | מהירות מימוש | תכונות נוספות |
|---|---|---|
bitrix:form.result.new |
2–3 שעות | תבניות מוכנות, מודל אירועים |
| BX.SidePanel | 4–6 שעות | לא עוזב את הדף, יכול להטמיע טופס CRM |
| בקשת AJAX | 3–5 שעות | טופס מינימלי, שליטה מלאה בעיצוב |
הבקשה חייבת להגיע ל-CRM (אם Bitrix24) או להישלח לדוא"ל של מנהל. עבור CRM השתמש ב-crm.lead.add דרך REST API או באירוע OnAfterResultAdd של טופס האינטרנט עם מטפל ליצירת ליד.
בפרויקט אחד, דרך האירוע יצרנו לא רק ליד אלא גם עסקה המקושרת למוצר באמצעות crm.item.add — לקוחות קיבלו הצעה עם המחיר המוסתר בפועל.
מדוע חשוב לבדוק את סל הקניות?
אם המחיר מוסתר בדף המוצר אך ניתן להוסיף את המוצר לסל ולבצע תשלום, ההסתרה מאבדת את מטרתה. עליך לעקוף את CatalogBasketProvider או לבדוק את המחיר ב-OnBeforeBasketAdd. זו טעות נפוצה: הם שוכחים להגדיר את הסל, ולקוחות רואים את המחיר רק בעת התשלום.
כיצד לארגן עדכון גורפי של דגל ההסתרה?
עבור קטלוגים של למעלה מ-1000 מוצרים, השתמש במאפיין האינפובלוק PRICE_ON_REQUEST וייבא באמצעות CSV או החלפת 1C (CommerceML). אנו כותבים סקריפט סוכן שעובר על כל המוצרים ומגדיר את הדגל תוך 1–2 ימים. הגדרה קבוצתית דרך API של האינפובלוק אף היא אפשרית.
הסתרת מחירים לפי קבוצות משתמשים
עבור תרחיש B2B: סוחרים מורשים רואים את המחיר, אורחים רואים את כפתור הבקשה. בדוק באמצעות $USER->GetUserGroupArray() בתבנית הרכיב. או באמצעות הרשאות סוג מחיר — בהגדרות סוג המחיר ציין אילו קבוצות משתמשים יש להן גישה. השיטה CCatalogGroup::GetGroupsList() מחזירה את הקבוצות המורשות.
| תרחיש | גישה | זמן הגדרה |
|---|---|---|
| הסתר עבור כולם, כפתור 'גלה מחיר' | מאפיין אינפובלוק + שינוי תבנית | 2–4 שעות |
| הסתר עבור אורחים, הצג עבור סוחרים | הרשאות סוג מחיר + בדיקת קבוצה | 4–6 שעות |
| ניהול גורפי (למעלה מ-1000 מוצרים) | מאפיין + ייבוא CSV/1C | 1–2 ימים |
כיצד הגדרנו הסתרת מחירים בפרויקט עם 4 רמות סוחרים
מקרה קונקרטי: חנות מסחר אלקטרוני לחלקי רכב. 4 קבוצות סוחרים, כל אחת עם המחיר שלה לאותו מוצר. מחיר הקמעונאי הוצג רק למשתמשי אורח; סוחרים ראו את מחיר הקבוצה שלהם. האתגר: להסתיר את מחיר הקמעונאי הן עבור אורחים והן עבור סוחרים מכיוון שהספק אסר לפרסם מחירים.
פתרון: יצרנו סוג מחיר 'לפי בקשה' ללא קישורי קבוצה. כל המוצרים קיבלו סוג מחיר זה עם ערך אפס. בתבנית catalog.element הוספנו בדיקה: אם סוג המחיר הוא 'לפי בקשה' והמחיר שווה ל-0, הצג את כפתור 'גלה מחיר'.
עבור סוחרים — בדיקה נוספת: אם המשתמש בקבוצת סוחרים, במקום הכפתור הצג את המחיר שלהם (המאוחסן במאפיין אינפובלוק נפרד). הטופס יושם דרך BX.SidePanel עם טופס bitrix:form.result.new. בקשות נשלחות ללידים דרך REST; המנהל רואה את המוצר ואת קבוצת הלקוח ויכול להגיב מיד.
הטעויות הנפוצות ביותר
- שכחה להגדיר הרשאות סוג מחיר — אז
GetOptimalPrice()עשוי להחזיר מחיר זמין אחר, וההסתרה לא תעבוד. - אי-בדיקת מחיר ריק — כפתור 'גלה מחיר' מוצג גם אם המחיר למעשה קיים (שווה ל-0).
- התעלמות מהסל — אם המחיר מוסתר אך ניתן להוסיף את המוצר לסל ולבצע תשלום, ההסתרה חסרת טעם.
הרשאות גישה לסוג מחיר
השיטה `CCatalogGroup::GetGroupsList()` מחזירה מערך של קבוצות מורשות עבור כל סוג מחיר. אם לא צוינה קבוצה, המחיר גלוי לכולם. ודא שעבור סוג המחיר המוסתר לא הוגדרו קבוצות חריגות.מה כלול בהגדרת מחיר מוסתר
- ניתוח מבנה הקטלוג הנוכחי וסוגי המחירים.
- עיצוב לוגיקת התצוגה (לפי קבוצות, מאפיינים, תנאים).
- מימוש תבנית הרכיב עם כפתור וטופס.
- אינטגרציה עם CRM (לידים/עסקאות).
- בדיקה על למעלה מ-10 תרחישים (אורח, סוחר, פרסר).
- תיעוד לניהול המשך.
אנו נעריך את הפרויקט שלך תוך יום עסקים אחד. צור קשר — נכין תוכנית עבודה מפורטת ולוח זמנים.

