Відвідувач інтернет-магазину приймає рішення за секунди. Якщо він бачить картинку товару в меню, йому не потрібно відкривати сторінку категорії. Це прискорює шлях до покупки та знижує відмови.
Але просто вставити картинки недостатньо — потрібно правильно спроєктувати структуру, налаштувати продуктивність і адаптивність під мобільні. Наша команда з досвідом на Бітрікс розробляє меню із зображеннями та AJAX-підвантаженням. Рішення підвищує клікабельність у 2–3 рази та скорочує навігаційні помилки. Користувачі все частіше заходять з телефонів, тому ми робимо адаптивну верстку на CSS Grid з lazy-завантаженням картинок. Порівняно із звичайним текстовим меню, мегаменю із зображеннями краще у 2-3 рази за клікабельністю.
Чому мегаменю із зображеннями підвищує конверсію?
Візуальне меню привертає увагу. Замість нудного списку посилань користувач бачить прев'ю товарів. Це підштовхує його зазирнути в розділ. За нашими даними, після впровадження мегаменю глибина перегляду зростає на 20–30%, а відмови падають на 10–15%. Джерело: внутрішня статистика. Окупність такого рішення — 2–4 місяці за рахунок зростання продажів. Інвестиції в розробку повертаються втричі.
Порівняння: мегаменю із зображеннями vs текстове меню
| Характеристика | Текстове меню | Мегаменю із зображеннями |
|---|---|---|
| Клікабельність категорій | базова | вища в 2-3 рази |
| Візуальна привабливість | низька | висока |
| Інформативність | тільки текст | текст + прев'ю товарів |
| Швидкість завантаження | швидка | з кешуванням — не гірше |
| Mobile-friendly | так | з адаптивом — так |
Текстове меню поступається мегаменю з картинками за всіма ключовими метриками. Особливо помітна різниця в клікабельності — візуальне меню працює в 2–3 рази ефективніше.
Як реалізувати мегаменю із зображеннями?
Покрокова інструкція з впровадження мегаменю із зображеннями
- Аналіз поточної навігації — визначаємо точки зростання.
-
Підготовка інфоблоків — додаємо користувацьке поле
UF_MENU_IMAGEдля розділів. -
Реалізація компонента — пишемо клас
SectionProductPreviewsіз тегованим кешуванням. - Верстка шаблону — використовуємо CSS Grid для двоколонкового layout.
- AJAX-підвантаження — додаємо ендпоінт для динамічного завантаження прев'ю товарів при наведенні.
- Оптимізація — налаштовуємо lazy-завантаження для всіх зображень (атрибут loading="lazy" (MDN)).
- Тестування — перевіряємо на мобільних пристроях і фіксуємо метрики.
В якості прикладу — кейс магазину електроніки з 15 000 товарів. Після впровадження клікабельність категорій зросла в 2,5 рази, а глибина перегляду — на 25%. Це підтверджує, що кастомізація меню Bitrix із зображеннями дає відчутний ефект.
Як прискорити завантаження мегаменю?
Реалізація: код компонента
Використовуємо користувацьке поле UF_MENU_IMAGE для кожного розділу інфоблоку. Якщо його немає — беремо стандартну картинку PICTURE. Пріоритет: спеціальне зображення для меню, потім стандартне. Далі кешуємо вибрані поля на 1 годину.
// При побудові дерева розділів додаємо поля зображень
$res = \CIBlockSection::GetList(
['LEFT_MARGIN' => 'ASC'],
['IBLOCK_ID' => $iblockId, 'ACTIVE' => 'Y', 'DEPTH_LEVEL' => [1, 2]],
false,
['ID', 'NAME', 'CODE', 'SECTION_PAGE_URL', 'DEPTH_LEVEL',
'IBLOCK_SECTION_ID', 'PICTURE', 'UF_MENU_IMAGE']
);
while ($s = $res->GetNext()) {
// Пріоритет: спеціальне зображення меню > стандартна картинка розділу
$imageId = $s['UF_MENU_IMAGE'] ?: $s['PICTURE'];
$s['MENU_IMAGE_SRC'] = $imageId ? \CFile::ResizeImageGet(
$imageId,
['width' => 240, 'height' => 160],
BX_RESIZE_IMAGE_EXACT
)['src'] : null;
$result[$s['ID']] = $s;
}
Замість картинки розділу можна показувати прев'ю 3–4 популярних товарів. Це оживлює меню.
namespace Local\Menu;
class SectionProductPreviews
{
public static function getForSections(array $sectionIds, int $limit = 4): array
{
if (empty($sectionIds)) return [];
$cache = new \CPHPCache();
$cacheId = 'menu_previews_' . md5(implode(',', $sectionIds));
if ($cache->InitCache(3600, $cacheId, '/megamenu/previews/')) {
return $cache->GetVars()['previews'];
}
$result = [];
foreach ($sectionIds as $sectionId) {
$res = \CIBlockElement::GetList(
['RAND' => 'ASC'],
[
'IBLOCK_ID' => CATALOG_IBLOCK_ID,
'SECTION_ID' => $sectionId,
'ACTIVE' => 'Y',
'PREVIEW_PICTURE' => ['>', 0],
],
false,
['nPageSize' => $limit, 'iNumPage' => 1],
['ID', 'NAME', 'PREVIEW_PICTURE', 'DETAIL_PAGE_URL']
);
$items = [];
while ($el = $res->GetNext()) {
$items[] = [
'name' => $el['NAME'],
'url' => $el['DETAIL_PAGE_URL'],
'image' => \CFile::ResizeImageGet(
$el['PREVIEW_PICTURE'],
['width' => 120, 'height' => 120],
BX_RESIZE_IMAGE_PROPORTIONAL
)['src'],
];
}
$result[$sectionId] = $items;
}
$cache->StartDataCache();
$cache->EndDataCache(['previews' => $result]);
return $result;
}
}
Шаблон мегаменю із зображеннями
// В шаблоні для кожної категорії першого рівня
foreach ($arResult['MENU'] as $category):
$previews = $productPreviews[$category['ID']] ?? [];
?>
<div class="megamenu__dropdown megamenu__dropdown--with-images">
<div class="megamenu__inner">
<!-- Колонки підкатегорій зліва -->
<div class="megamenu__nav">
<?php foreach ($category['children'] as $sub): ?>
<a href="<?= htmlspecialchars($sub['SECTION_PAGE_URL']) ?>"
class="megamenu__subcat"
data-section="<?= $sub['ID'] ?>">
<?php if ($sub['MENU_IMAGE_SRC']): ?>
<img src="<?= $sub['MENU_IMAGE_SRC'] ?>"
alt="<?= htmlspecialchars($sub['NAME']) ?>"
width="60" height="40" loading="lazy">
<?php endif ?>
<span><?= htmlspecialchars($sub['NAME']) ?></span>
</a>
<?php endforeach ?>
</div>
<!-- Прев'ю товарів справа -->
<?php if (!empty($previews)): ?>
<div class="megamenu__products">
<div class="megamenu__products-label">Популярні товари</div>
<div class="megamenu__products-grid">
<?php foreach ($previews as $product): ?>
<a href="<?= htmlspecialchars($product['url']) ?>"
class="megamenu__product-card">
<img src="<?= htmlspecialchars($product['image']) ?>"
alt="Прев'ю товару в мегаменю"
width="120" height="120" loading="lazy">
<span class="megamenu__product-name">
<?= htmlspecialchars($product['name']) ?>
</span>
</a>
<?php endforeach ?>
</div>
</div>
<?php endif ?>
</div>
</div>
<?php endforeach ?>
CSS для layout із зображеннями
.megamenu__dropdown--with-images .megamenu__inner {
display: grid;
grid-template-columns: 260px 1fr;
gap: 0;
min-height: 300px;
}
.megamenu__nav {
border-right: 1px solid #eee;
padding: 1rem;
display: flex;
flex-direction: column;
gap: 0.25rem;
}
.megamenu__subcat {
display: flex;
align-items: center;
gap: 0.75rem;
padding: 0.5rem 0.75rem;
border-radius: 4px;
transition: background 0.15s;
text-decoration: none;
color: inherit;
}
.megamenu__subcat:hover,
.megamenu__subcat.is-active {
background: #f5f7fa;
}
.megamenu__products-grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 1rem;
padding: 1rem 1.5rem;
}
.megamenu__product-card {
display: flex;
flex-direction: column;
gap: 0.5rem;
text-decoration: none;
color: inherit;
font-size: 0.8125rem;
}
.megamenu__product-card img {
border-radius: 4px;
object-fit: contain;
background: #f8f8f8;
}
Як налаштувати кешування для мегаменю?
Основна проблема меню з безліччю картинок — вага сторінки. Ми вирішуємо це дворівневим кешуванням. Зображення розділів завантажуються разом із деревом і кешуються на 1 годину. Товари підвантажуються динамічно через AJAX тільки при наведенні на підкатегорію. Кеш на прев'ю — 30 хвилин на розділ. Це забезпечує швидке завантаження навіть для великих каталогів. Теговане кешування через CPHPCache (Бітрікс документація) оновлює кеш при зміні даних.
document.querySelectorAll('.megamenu__subcat').forEach(link => {
link.addEventListener('mouseenter', async () => {
const sectionId = link.dataset.section;
if (link.dataset.loaded) return;
const data = await fetch(`/local/ajax/menu-products.php?section=${sectionId}`)
.then(r => r.json());
const grid = link.closest('.megamenu__dropdown').querySelector('.megamenu__products-grid');
grid.innerHTML = data.products.map(p =>
`<a href="${p.url}" class="megamenu__product-card">
<img src="${p.image}" alt="Прев'ю товару в мегаменю" width="120" height="120" loading="lazy">
<span>${p.name}</span>
</a>`
).join('');
link.dataset.loaded = '1';
});
});
Усі зображення забезпечуються атрибутом loading="lazy". Браузер не завантажує приховані панелі, поки користувач не відкриє меню. Додатково налаштовуємо теговане кешування — при зміні розділу або товару кеш скидається автоматично.
Чи допомагає мегаменю збільшити продажі?
Так, інвестиції в розробку окупаються швидко. Після впровадження клієнти бачать зростання конверсії на 15–20% та зниження відмов на 10–15%. Окупність — 2–4 місяці. Наш досвід: понад 50 проєктів на Бітрікс, включаючи каталоги до 100 000 товарів. Наша команда має 7-річний досвід 1С-Бітрікс розробки меню. Гарантуємо підтримку після здачі — виправлення багів безкоштовно протягом місяця.
Що входить у роботу під ключ
- Проєктування: аналіз поточної навігації, прототип нової структури.
- Налаштування інфоблоків: додавання UF_MENU_IMAGE, пресети ресайзу.
- Реалізація компонента: клас SectionProductPreviews із кешуванням, шаблон із CSS Grid.
- AJAX-підвантаження: ендпоінт для динамічного завантаження прев'ю.
- Адаптація під мобільні: медіа-запити, бургер-меню.
- Тестування на реальних даних, у тому числі замір швидкості.
- Документація: інструкція з наповнення картинками.
Терміни реалізації
| Конфігурація | Термін | Вартість |
|---|---|---|
| Мегаменю із зображеннями розділів | 4–5 днів | від $500 |
| + прев'ю популярних товарів, Ajax-підвантаження | +2–3 дні | +$300 |
| + анімації, доступність, мобільна версія | +2–3 дні | +$200 |
Оцініть проєкт: пишіть нам, і ми запропонуємо точну вартість. Замовте розробку мегаменю під ключ — отримайте готове рішення з документацією та гарантією.







