Спасибо большое. Хотел попробовать доработать сам фильтр. В нем есть логика отображения количества товаров в каждом варианте и она работает. Т.е если я в категории, где нет товаров с такими вариантами, то фильтре вариантов будут стоять 0 товара. Перейдя в другую, где эти варианты есть, в фильтре появляется число. Значит он умеет следить за тем, в какой категории товар имеет какие варианты. Вроде даже нашел файл, который отвечает за это \components\com_easystore\layouts\system\list.php но все изменения не применяются. Даже если его переименовать, фильтр не исчезает и не ломается. Может какое кэширование хитрое стоит, хотя все кэширование отключал, кэш чистил, сервер перезагружал. Дугие файлы, связанные с фильтром тоже ни на что не влияют, при удалении. Значит буду с джаваскриптом пробовать.
Может кому-нибудь будет полезно. В общем победил вроде эту напасть, но моим способом, он более универсальный и не требует грубой привязки. Я подумал, раз он знает и показывает в каких категориях в каких вариантах есть товары, а в каких нет, можно с помощью джаваскрипта срыть варианты, где товар 0. И название категории вариантов (например Ширина), в которой скрыты все варианты, тоже скрывается. Даже если в нужной категории в данном варианте товара нет и он скроется, то это не страшно. Как только товар добавят, этот вариант появится. Если категорию вариантов даже с нулем товара скрывать не хотите (я решил оставить "Доступность" и "Категории", хотя там при выборе двух вариантов товаров становится 0 и они тоже скрываются), добавьте эту категорию в WHITELISTED_FILTERS. Вставлял в custom js в настройках шаблона. Проверил, все работает.
JavaScript:
// Используем безопасную обертку, чтобы убедиться, что jQuery работает,
// даже если используется режим no-conflict (Joomla по умолчанию)
jQuery(document).ready(function($) {
// БЕЛЫЙ СПИСОК ФИЛЬТРОВ, КОТОРЫЕ ДОЛЖНЫ ПОКАЗЫВАТЬ НУЛЕВЫЕ ВАРИАНТЫ
const WHITELISTED_FILTERS = [
'filter_inventory_status', // Доступность
'filter_categories' // Категории
];
// ФАЗА 1: Скрытие отдельных вариантов с (0)
function hideZeroCountOptions() {
// 1. Ищем все элементы счетчиков
$('.easystore-filter-list .easystore-filter-item-count').each(function() {
var $li = $(this).closest('li');
var $filterContainer = $(this).closest('.easystore-product-filter');
var filterId = $filterContainer.data('easystore-filter-by');
// --- НОВАЯ ПРОВЕРКА: Если фильтр в белом списке, пропускаем скрытие опций ---
if (WHITELISTED_FILTERS.includes(filterId)) {
return true; // continue в jQuery.each, пропускаем эту итерацию
}
if ($li.is(':visible')) {
var countText = $(this).text().trim();
// Если текст счетчика - (0) или 0
if (countText === '(0)' || countText === '0') {
$li.hide();
}
}
});
// 2. После скрытия опций, запускаем проверку заголовков (Фаза 2)
checkAndHideEmptyFilters();
}
// ФАЗА 2: Скрытие заголовков, если список пуст
function checkAndHideEmptyFilters() {
// Проходим по каждому главному контейнеру фильтра
$('.easystore-product-filter').each(function() {
var $filterContainer = $(this);
var $list = $filterContainer.find('.easystore-filter-list');
var filterId = $filterContainer.data('easystore-filter-by');
// --- ПРОВЕРКА БЕЛОГО СПИСКА ---
if (WHITELISTED_FILTERS.includes(filterId)) {
$filterContainer.show(); // Если в белом списке, всегда показываем
return; // Переходим к следующему фильтру
}
// Если фильтр НЕ в белом списке, проверяем его на пустоту
var visibleItems = $list.find('li:visible').length;
if (visibleItems === 0) {
$filterContainer.hide();
} else {
$filterContainer.show();
}
});
}
// ЗАПУСК ЛОГИКИ
// 1. Запуск сразу при загрузке страницы
hideZeroCountOptions();
// 2. Повторный запуск для динамического контента (после AJAX-фильтрации)
$(document).on('sppbAjaxLoad sppbPageRefresh easystore:filterupdated', function() {
setTimeout(function() {
hideZeroCountOptions();
}, 100);
});
});
Как проверить ID других фильтров:
Если вам нужно добавить в белый список другие фильтры, просто откройте консоль разработчика, выберите заголовок, найдите родительский div с классом .easystore-product-filter и посмотрите, что указано в атрибуте data-easystore-filter-by. Затем добавьте это значение в массив WHITELISTED_FILTERS.