לוגיקה מותנית בטפסי Bitrix: יישום ואימות

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

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

שאלות נפוצות

טופס משוב עם 15 שדות מציג את כל 15 בבת אחת. חמישה נדרשים רק לגופים משפטיים, שלושה לסוג בקשה ספציפי. המשתמש גולל דרך העודפים ועוזב. ההמרה יורדת ב-30–50%. לוגיקה מותנית מסתירה דינמית שדות לא רלוונטיים: נבחר "גוף משפטי" — מופיעים ח.פ. וק.מ. זמן המילוי יורד מ-5 ל-3 דקות — חיסכון של עד 40%. אנו מיישמים לוגיקה כזו במפתח מלא עם ולידציה בצד השרת ותיעוד. נעריך את הפרויקט שלך תוך יום אחד. צור קשר לייעוץ — קבל הערכה מדויקת.

אילו בעיות אנו פותרים

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

אנו פותרים שלוש בעיות מרכזיות:

  • עודפות: שדות לא רלוונטיים מוסתרים, הטופס קומפקטי. ההמרה עולה ב-30–50% בפרויקטי בדיקה.
  • שגיאות ולידציה: שדות מוסתרים אינם נדרשים בשרת. שגיאות שליחה יורדות לאפס.
  • ביצועים: JavaScript קליל מקורי — ללא jQuery, אינו מאט את הדף. זמן טעינת הטופס משתפר ב-200 אלפיות השנייה.

כיצד אנו עושים זאת

טכנולוגיות: מודול form (1C-Bitrix), רכיב bitrix:form.result.new, JavaScript מקורי (ES5+). כל שדה מעובד עם id לפי התבנית field_[SID] — עוגן ללוגיקה. אנו משתמשים בתכונות data לתיאור תנאים.

יישום באמצעות תכונות data

דוגמה: שדה ח.פ. מוצג רק כאשר סוג הלקוח הוא "חברה":

<div class="form-row" id="row_CLIENT_TYPE">
    <!-- рендер поля -->
</div>
<div class="form-row" id="row_INN" data-condition-field="CLIENT_TYPE" data-condition-value="company" style="display:none">
    <!-- рендер поля -->
</div>

מטפל ה-JavaScript מצרף אירוע <div class="form-row" id="row_CLIENT_TYPE"> <!-- рендер поля --> </div> <div class="form-row" id="row_INN" data-condition-field="CLIENT_TYPE" data-condition-value="company" style="display:none"> <!-- рендер поля --> </div> לשדות השולטים ובודק תנאים בכל שינוי. אם הערך תואם, הוא מציג את השורה; אחרת מסתיר אותה. שדות מוסתרים מנוקים (change, data-condition-rules).

קוד זה פשוט ומהיר פי 3 משילוב ספריית צד שלישי כמו jQuery UI. הוא אינו דורש בקשות נוספות ופועל מיד.

כיצד ליישם תנאים מרובים (AND/OR)?

עבור שדות עם תנאים מרובים, השתמש בתכונה data-condition-rules='[{"field":"CLIENT_TYPE","value":"company"},{"field":"REQUEST_TYPE","value":"credit"}]' :

data-condition-rules='[{"field":"CLIENT_TYPE","value":"company"},{"field":"REQUEST_TYPE","value":"credit"}]' 
יישום שלב אחר שלב של תנאים מרובים 1. בתבנית הרכיב, הוסף את התכונה `data-condition-rules` למכלול השדה. 2. הגדר מערך JSON של אובייקטים עם מפתחות `field` (SID של השדה השולט) ו-`value` (הערך הצפוי). 3. ב-JavaScript, השתמש ב-`Array.every()` ללוגיקת AND: `rules.every(r => checkField(r.field, r.value))`. 4. ללוגיקת OR, החלף את `every` ב-`some`. דוגמה: השדה "סכום הלוואה" מופיע רק אם `REQUEST_TYPE = credit` וגם `CLIENT_TYPE = company`.

ולידציה בצד השרת של שדות מוסתרים

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

AddEventHandler('form', 'OnBeforeResultAdd', function($formId, &$arFields) {
    if (($arFields['form_field_CLIENT_TYPE'] ?? '') !== 'company') {
        unset($arFields['form_field_INN']);
    }
});

גישה זו מבטיחה שהטופס לא יזרוק שגיאה עבור שדה מוסתר. למידע נוסף על האירוע, ראה תיעוד REST API.

השוואת גישות: JS מקורי לעומת jQuery

קריטריון JS מקורי jQuery
גודל קוד ~30 שורות ~20 שורות + ספרייה
תלותיות אין jQuery (80+ KB)
מהירות טעינה מיידית בקשה נוספת
תאימות IE9+ IE9+

JS מקורי עדיף לביצועים ולעצמאות. ב-30 פרויקטים נטשנו את jQuery — זמן טעינת הטופס ירד ב-15%.

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

הלקוח עלול להשבית JavaScript או לשלוח שדות מוסתרים בכוונה. בדיקה בצד השרת באמצעות AddEventHandler('form', 'OnBeforeResultAdd', function($formId, &$arFields) { if (($arFields['form_field_CLIENT_TYPE'] ?? '') !== 'company') { unset($arFields['form_field_INN']); } }); מונעת כתיבת נתונים לא תקינים. זהו שלב חובה בפתרונות ייצור. בלעדיו, שדה נדרש עלול להישאר ריק בעוד הטופס נשמר עם נתונים ריקים. "מומלץ להשתמש במטפל OnBeforeResultAdd לולידציה בצד השרת" — תיעוד 1C-Bitrix

תהליך העבודה

שלב משך תוצאה
ניתוח 1–2 ימים תיאור תנאים, רשימת שדות, אבטיפוס
עיצוב יום אחד הגדרת תכונות data, קוד JS
פיתוח 2–5 ימים סימון תבנית, JS, ולידציה בצד השרת
בדיקות 1–2 ימים בדיקת כל השילובים, רגרסיה
פריסה יום אחד שחרור לייצור, הגדרת מטמון

מה כלול בעבודה

  • העתקה ושינוי של תבנית רכיב OnBeforeResultAdd.
  • כתיבת לוגיקת JavaScript באמצעות תכונות data.
  • יישום ולידציה בצד השרת באמצעות אירוע form.result.new.
  • בדיקות בכל הדפדפנים (Chrome, Firefox, Safari, Edge).
  • גישה לתבנית הרכיב ששונתה (מאגר Git).
  • תיעוד לתנאים ו-API.
  • הדרכה למפתח שלך (פגישה מקוונת של שעה).
  • תמיכה לאחר פריסה למשך שבועיים.

לוחות זמנים ועלות

לוחות זמנים — מ-3 עד 10 ימים בהתאם למורכבות (מספר שדות, סוגי תנאים). עלות: מ-$270–390 לטפסים פשוטים (עד 10 שדות, תנאים בודדים). למקרים מורכבים (תנאי AND/OR מרובים, ולידציה מותאמת אישית) — מ-$540–780. נעריך את הפרויקט שלך תוך יום אחד. המומחים המוסמכים שלנו עובדים עם Bitrix למעלה מ-10 שנים ויישמו יותר מ-50 פרויקטי התאמת טפסים עם אחוז הצלחה של 100%. תוצאות מובטחות: אם הלוגיקה לא פועלת כפי שצוין, אנו מתקנים אותה ללא עלות נוספת.

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