Компонент EasyStore - расширение электронной коммерции для Joomla от студии JoomShaper

В тесте, пока прорабатываю структуру. Очень скудные настройки внутри компонента по доставке и оплате с настройками полей в особенности. Нужно будет залезать в код и убирать поля вручную(
а общее впечатление пока неплохое.
Та я вот тоже решил посмотреть на этого зверя. Но сходу пару моментов не нравиться. Нет мультиязычности. Не могу сделать две валюты. Возможно не правильно ищу.
Пока версия 1.6 Ну и с импортом не очень. Любое редактирование експорта в екселе при импорте ошибка. не правильный формат файла. Возможно попробовать в опенофисе отредактировать.
 
EasyStore v1.7.2
Скрытое содержимое доступно для зарегистрированных пользователей!
 
Последнее редактирование модератором:
Подскажите, пожалуйста!!!! Как в EasyStore сделать так, что бы фильтр по вариантам, выводил варианты товара только из выбранной категории, в которой я нахожусь? Сейчас он показывает варианты товаров из всех категорий, а это потом будет очень как много!!! И не нужны они все! Подскажите, пожалуйста, а то уже все голову сломал.
 
Подскажите, пожалуйста!!!! Как в EasyStore сделать так, что бы фильтр по вариантам, выводил варианты товара только из выбранной категории, в которой я нахожусь? Сейчас он показывает варианты товаров из всех категорий, а это потом будет очень как много!!! И не нужны они все! Подскажите, пожалуйста, а то уже все голову сломал.
средствами EasyStore никак
можно прописать руками в скрипте, привязав определенные урлы (ваших категорий) каким частям (блокам в фильтре) не отображаться или наоборот, каким блокам отображаться и где, а в других по умолчанию не будут видны.

добавь custom.js в шаблон /templates/js/custom.js
 
Последнее редактирование:
средствами EasyStore никак
можно прописать руками в скрипте, привязав определенные урлы (ваших категорий) каким частям (блокам в фильтре) не отображаться или наоборот, каким блокам отображаться и где, а в других по умолчанию не будут видны.

добавь custom.js в шаблон /templates/js/custom.js
Спасибо большое. Хотел попробовать доработать сам фильтр. В нем есть логика отображения количества товаров в каждом варианте и она работает. Т.е если я в категории, где нет товаров с такими вариантами, то фильтре вариантов будут стоять 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.
 
Последнее редактирование:
Спасибо большое. Хотел попробовать доработать сам фильтр. В нем есть логика отображения количества товаров в каждом варианте и она работает. Т.е если я в категории, где нет товаров с такими вариантами, то фильтре вариантов будут стоять 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.
могу дать свой рабочий вариант, в него только названия своих блоков внесете и название урл магазина (у меня shop)
Я сделал, чтобы "блоки" в фильтре по умолчанию отображались везде, а тот блок для которого указана категория (урл категории) он отображается только в том месте в котором указано в скрипте.
Плюс, когда в фильтре выбираешь несколько категорий - отображаются блоки (если хоть в одном выбранном он должен быть, если нет, то и во всех выбранных категориях его не будет)

п.с. Блок = это варианты фильтра имеется в виду

Ниже часть кода, для понимания

Код:
    const visibilityRules = [
        {
            blockTitle: 'Газобетонний блок',
            visibleIn: ['hazobetonnyi-blok', 'betonnyi-blok'], // ← здесь handle категорий, где блок НУЖЕН и НЕ скрывается
        },
        {
            blockTitle: 'Колір',
            visibleIn: ['shpahat'],
        },
        {
            blockTitle: 'Щільність',
            visibleIn: ['shpahat'],
        },
        {
            blockTitle: 'Кількість метрів на 1 кг',
            visibleIn: ['shpahat'],
        },

        {
            blockTitle: 'Розмір',
            visibleIn: ['obladnannia'],
        },
        {
            blockTitle: 'Діаметр',
            visibleIn: ['shpahat'],
        },
        // Добавляй новые блоки сюда
    ]
 
Последнее редактирование:
Назад
Сверху