1C-Bitrix Size Filter: בדיקת מלאי ושמירה במטמון
רכיב ה-catalog.smart.filter הסטנדרטי אינו יכול לסנן מוצרים לפי נוכחות של מידה ספציפית בין הצעות מסחריות. התוצאה: המשתמש לוחץ על מידה 42, אבל הדף ריק כי הפריט אזל מהמלאי. אובדן המרות בקטגוריות ביגוד והנעלה יכול להגיע ל-30% — זה מאות דולרים של חיסכון באובדן רווח חודשי. אנו פותרים בעיה זו תוך 2–3 ימי עבודה.
אנחנו צוות של מפתחים מוסמכים עם 10 שנות ניסיון עם Bitrix ו-Bitrix24. אנו מיישמים את הפילטר במפתח Key: מעיצוב מבנה הנתונים ועד לפריסה על שרת ייצור. אנו מבטיחים טיפול נכון במלאי ומהירות גבוהה באמצעות שמירה במטמון עם תגיות.
בעיות בסינון מידות סטנדרטי
הבעיה הראשונה היא חוסר התחשבות במלאי. הפילטר הסטנדרטי מציג את כל המידות מאינפובלוק ההצעות המסחריות, כולל אלה עם מלאי אפס. המשתמש בוחר מידה, רואה דף ריק, ועוזב. השנייה היא ביצועים. שאילתות על אלפי הצעות ללא שמירה במטמון יכולות לקחת עד 2 שניות, דבר שאינו מקובל בחנות מקוונת. השלישית היא קיבוץ מידות שגוי (לדוגמה, S/M/L צריך להופיע בסדר מוגדר, לא אלפביתי).
אנו פותרים את כל שלוש הבעיות: אנו מסננים לפי PROPERTY_SIZE עם CATALOG_QUANTITY > 0, מיישמים שמירה במטמון עם תגיות וביטול באמצעות סוכן, וממיינים מידות לפי הסדר במאפיין הרשימה.
ארכיטקטורת נתונים למידות
Товар (инфоблок каталога)
└── Торговые предложения (инфоблок торговых предложений)
├── PROPERTY_SIZE = "S" CATALOG_QUANTITY = 3
├── PROPERTY_SIZE = "M" CATALOG_QUANTITY = 0
└── PROPERTY_SIZE = "L" CATALOG_QUANTITY = 7הפילטר למידה M עם אפשרות "רק במלאי" מופעלת לא צריך להציג מוצר זה — הצעת המסחר M אזלה מהמלאי.
איך לאחסן מידות?
שלוש גישות טיפוסיות. הבחירה תלויה בקטלוג:
| שיטת אחסון | דוגמה | מתי להשתמש |
|---|---|---|
| מאפיין טקסט (רשימה) | S, M, L, XL | קטלוגים פשוטים, טבלאות מידות קבועות |
| מאפיין מספרי | 36, 37, 38... | נעליים, ביגוד עם מידות מספריות, צורך בסינון טווחים |
| מידות מורכבות | EU 42 / US 9, 32/34 | המרה בין מותגים, תקנים מרובים |
אנו ממליצים על האפשרות הראשונה: היא מציעה מיון נוח דרך מאפיין רשימה וממשק משתמש פשוט. לפרטים נוספים על מאפייני Bitrix, ראו את התיעוד הרשמי. עקרונות שמירה במטמון כלליים מתוארים במאמר ויקיפדיה.
איך לקבל מידות עם התחשבות במלאי?
הפונקציה שלהלן אוספת את כל המידות שקיימות לפחות בהצעה מסחרית פעילה אחת עם מלאי שאינו אפס, וממיינת אותן לפי הסדר מהגדרת המאפיין.
function getAvailableSizes(int $offersIblockId): array
{
$sizes = [];
$res = CIBlockElement::GetList(
[],
[
'IBLOCK_ID' => $offersIblockId,
'ACTIVE' => 'Y',
'>CATALOG_QUANTITY' => 0,
],
['PROPERTY_SIZE'],
false,
['PROPERTY_SIZE']
);
while ($item = $res->Fetch()) {
$sizeId = $item['PROPERTY_SIZE_ENUM_ID'];
$sizeValue = $item['PROPERTY_SIZE_VALUE'];
if ($sizeId && !isset($sizes[$sizeId])) {
$sizes[$sizeId] = [
'id' => $sizeId,
'xmlId' => $item['PROPERTY_SIZE_ENUM_XML_ID'],
'value' => $sizeValue,
'sort' => 0,
];
}
}
if (!empty($sizes)) {
$enumRes = CIBlockPropertyEnum::GetList(
['SORT' => 'ASC'],
['IBLOCK_ID' => $offersIblockId, 'CODE' => 'SIZE']
);
$sortMap = [];
while ($enum = $enumRes->Fetch()) {
$sortMap[$enum['ID']] = intval($enum['SORT']);
}
foreach ($sizes as &$size) {
$size['sort'] = $sortMap[$size['id']] ?? 999;
}
usort($sizes, fn($a, $b) => $a['sort'] <=> $b['sort']);
}
return array_values($sizes);
} סינון קטלוג לפי מידה עם התחשבות במלאי
function getProductIdsBySize( int $catalogIblockId, int $offersIblockId, array $sizeXmlIds, bool $onlyInStock = true ): array {
if (empty($sizeXmlIds)) return [];
$offerFilter = [
'IBLOCK_ID' => $offersIblockId,
'ACTIVE' => 'Y',
'PROPERTY_SIZE' => $sizeXmlIds,
];
if ($onlyInStock) {
$offerFilter['>CATALOG_QUANTITY'] = 0;
}
$productIds = [];
$res = CIBlockElement::GetList(
[],
$offerFilter,
false,
false,
['PROPERTY_CML2_LINK']
);
while ($row = $res->GetNext()) {
if ($pid = intval($row['PROPERTY_CML2_LINK_VALUE'])) {
$productIds[$pid] = true;
}
}
return array_keys($productIds);
} ממשק משתמש: רשת מידות
אנו מציגים מידות כתיבות סימון בפריסת רשת. מידות פעילות מודגשות, האחרות עם גבול אפור.
$availableSizes = getAvailableSizes(OFFERS_IBLOCK_ID);
$selectedSizes = array_map('htmlspecialchars', (array)($_GET['SIZE'] ?? []));
?>
<div class="filter-block filter-block--sizes">
<h3 class="filter-block__title">Размер</h3>
<div class="size-grid">
<?php foreach ($availableSizes as $size): ?>
<?php $isSelected = in_array($size['xmlId'], $selectedSizes); ?>
<label class="size-option <?= $isSelected ? 'is-selected' : '' ?>">
<input type="checkbox" name="SIZE[]" value="<?= htmlspecialchars($size['xmlId']) ?>" <?= $isSelected ? 'checked' : '' ?>>
<span class="size-label"><?= htmlspecialchars($size['value']) ?></span>
</label>
<?php endforeach; ?>
</div>
</div> למה שמירה במטמון של מידות חשובה
רשימת המידות הזמינות משתנה לעיתים רחוקות — רק כשסחורה מגיעה או נמחקת. ללא שמירה במטמון, כל בקשה לקטלוג שואלת אלפי הצעות. גישת השמירה במטמון עם תגיות שלנו מאיצה את טעינת הפילטר פי 3 בהשוואה ללא מטמון. זמן התגובה של הפילטר יורד מ-0.9 ל-0.3 שניות עבור קטלוג עם 50,000 מוצרים. זה חוסך עד 15% משיעור הנטישה של המשתמשים, ומגדיל את הרווח.
$cacheId = 'available_sizes_' . OFFERS_IBLOCK_ID;
$cache = \Bitrix\Main\Data\Cache::createInstance();
if ($cache->initCache(600, $cacheId, '/catalog/filter/')) {
$availableSizes = $cache->getVars();
} else {
$availableSizes = getAvailableSizes(OFFERS_IBLOCK_ID);
$cache->startDataCache();
$cache->endDataCache($availableSizes);
}לביטול, אנו מגדירים סוכן שמעדכן מלאי כל 10 דקות — המטמון נמחק אוטומטית.
מה כלול
| שלב | תוכן |
|---|---|
| ניתוח | חקר קטלוג, טבלאות מידות, דרישות פילטר |
| עיצוב | בחירת שיטת אחסון, עיצוב מטמון |
| פיתוח | לוגיקת PHP, תבנית רכיב, CSS/JS |
| בדיקות | אימות על נתונים אמיתיים, בדיקות עומס |
| תיעוד | ארכיטקטורה, סכמת נתונים, מדריך פריסה |
| הדרכה | העברת ידע לצוות שלך (1–2 שעות מקוונות) |
| תמיכה | 30 ימי תמיכה באחריות לאחר ההשקה |
תהליך
- ניתוח — חקר הקטלוג, טבלאות מידות, דרישות פילטר.
- עיצוב — בחירת שיטת אחסון, עיצוב המטמון.
- פיתוח — כתיבת פונקציות לקבלת מידות, סינון, ממשק משתמש.
- בדיקות — אימות על נתונים אמיתיים.
- פריסה — פריסה על שרת ייצור, הגדרת ביטול מטמון.
לוח זמנים ליישום
יישום בסיסי (ללא בדיקת מלאי): מ-4 שעות. גרסה מלאה עם מלאי, שמירה במטמון וממשק משתמש מותאם: 2–3 ימי עבודה. תרחישים מורכבים (טבלאות מידות מרובות, המרה בין מותגים): עד 5 ימים. העלות מחושבת באופן אישי: אנו מעריכים מורכבות, נפח קטלוג, מספר טבלאות מידות. צור קשר — נכין הצעת מחיר תוך יום אחד.
הניסיון שלנו: מעל 50 פרויקטי פילטר ב-Bitrix, מומחים מוסמכים. בקש ייעוץ — נדון במשימה שלך ללא התחייבות.

