Всего 123 808 комментариев

Александр Туниеков
23 сентября 2022, 15:35
0
@Артур после вчерашнего разбора mapFilter не сильно выигрывает у mFilter2. Так что его разработка обратно повисла.
Вообще участие в разработке Минишопа меня не сильно интересует. Он меня и в теущем виде устраивает, но вот фильтры для Минишопа интересуют. С ними проблемы есть.
mSearch2 платный компонент и дорабатывать его, чтоб деньги шли левому дяде меня обламывает :-).
Думаю, что участие в разработке бесплатных фильтров для Минишопа, мне интересно. Есть только одно препятствие. Я, обычно, пишу на jQuery. И на ванильный JS не спешу переходить. На jQuery удобней писать и есть мого примеров в интернете. Но если перед глазами будут лучшие примеры кода на ванильном JS, то писать на нем, конечно, смогу.
Примете в комманду? :-)
Илья
22 сентября 2022, 14:29
0
В localizator реализовано через setOption.
Если идти тем же путем, то можно взять за основу способ Василия Наумкина Переключение контекстов мультиязычного сайта, но
работать только с контекстом web и вместо переключения контекста переопределить значения для текущего контекста (web).

//выбираем только контекст web
$q = $modx->newQuery('modContextSetting', array('context_key' => 'web'))

//разбираем запрос в массив
$requestToArray = explode('/',$request);

//если в запросе en директория
if($requestToArray[0] == 'en'){
$modx->setOption('site_url', 'http://site.ru/en/');
$modx->setOption('cultureKey','en');
$modx->setOption('http_host','site.ru');
$modx->setOption('base_url','/en/');
$base_url = 'en';
}
//если директория ru
if($requestToArray[0] == 'ru'){
$modx->setOption('site_url', 'http://site.ru/ru/');
$modx->setOption('cultureKey','ru');
$modx->setOption('http_host','site.ru');
$modx->setOption('base_url','/ru/');
$base_url = 'ru';
}

Остается, конечно, вопрос про кеш…
Илья
22 сентября 2022, 14:04
0
Точно, в localizator такое было реализовано!
vectorserver
22 сентября 2022, 12:21
0
Для динамического обновления цены доставки в корзине можно использовать такой скрипт:

<select name="shk_delivery">
    <option value=""></option>
    <option id="otherTransport" value="700">Деловые линии</option>
</select>
<script type="text/javascript">
$(document).bind('ready',function(){
    
    let otherTransport =  $('#otherTransport');
    //Запишем цену отданную API сервисом
    otherTransport.val('Тут пишем цену');
    
    $('select[name="shk_delivery"]','#shopOrderForm').bind('change',function(){
        SHK.selectDelivery( $(this).val() );
    });
});
</script>
Дмитрий
22 сентября 2022, 10:18
0
как Вам помогли? мне на reg.ru ответили «Изменить sql_mode глобально не возможно»(
Роман
22 сентября 2022, 08:55
0
Тут основная боль, это phpthumbon с наложением ватермарка. =)
Александр Туниеков
22 сентября 2022, 08:39
0
Решил описать кеширование mFilter2. Начал здесь https://modx.pro/development/23310
Kirill A. Rusanov
22 сентября 2022, 08:17
0
Кажется, вы начали писать что-то подобное localizator. Он бесплатный – читайте доки, смотрите код.
Алексей Смирнов
21 сентября 2022, 23:30
0
Посмотрите это решение:
modx.pro/solutions/23005
Артур Шевченко
21 сентября 2022, 20:45
0
На самом деле, если сделали фильтры как в mFilter2, то suggestions уже просто посчитать.
Дело не в количестве строк кода, а в этом
И при выборе какого-то фильтра делает suggestions 25с.
Александр Туниеков
21 сентября 2022, 20:20
0
Ну тогда надо архитектуру как-то менять.
TV rubrika со списком множественного выбора (там несколько значений вида имя1==1||имя2==2||имя3==3) храниться в базе как текст например такой «1||3||13». И ни как запросом LIKE не отличишь 1 от 13.
Нужно список множественного выбора хранить как отдельные значения в таблице. Например tvsuperselect храниться в 2 таблицах и как текст «1||3||13» и в отдельной таблице отдельные значения. Я не помню как именно.
Если использовать tvsuperselect, то, наверно, можно в pdoPage подцепить 2-ю таблицу и написать что-то вроде
[[!pdoPage?
        &parents=`4`
        &loadModels=`tvsuperselect`
        &leftJoin=`{"2-таблица":....}`
        &groupby=`modResource.id`
        &where=`{"2-таблица.value":[[*option]]}`
        &tpl=`RowTpl`
]]
newbmod
21 сентября 2022, 20:02
0
Спасибо большое!
Да такой подход действительно работает! Мне подошел этот вариант (как раз сейчас 9 элементов).
Но есть ли более универсальный вариант, где более 10 вариантов?
Александр Туниеков
21 сентября 2022, 19:23
+1
Может так
[[!pdoPage?
        &parents=`4`
        &includeTVs=`rubrika`
        &where=`{"rubrika:LIKE":"%[[*option]]%"}`
        &tpl=`RowTpl`
]]
если значения rubrika меньше 10 должно ловить. Если больше 10, то на option=1 словит и 1 и 10 и 11 и т.д.
Александр Туниеков
21 сентября 2022, 18:44
0
Не быстрее. Так только от 1 запроса на картинку избавишься. По идее самый быстрый вариант подцепить парент титле и картинку в pdoResource. На 99% уверен. Но, конечно, если гнаться за скоростью, надо тестировать все варианты и на практике смотреть уже.
newbmod
21 сентября 2022, 16:55
0
TV текущего ресурса — option
TV выбираемых ресурсов с множественными значениями — rubrika
Александр Туниеков
21 сентября 2022, 16:51
0
Не знаю как в прошлый раз тестировал. Тогда в моем компоненте mapFilter загрузка с подсчетом результатов на 10т товавов в каталоге выдавало около 10с, а сейчас первая загрузка около 1,2с а вторая с кешем mysql 0.0769041: Total time. (В каталоге 10т. товаров — это самый большой каталог. Всего товаров на сайте 27т.). Правда сейчас я чуть подшаманил и запрос делаю только для 1 каталога.
А вот прокешированный mFilter2 на этом же каталоге при загрузке из кеша массива ids ресурсов тратит 1.7866640: Total time. И при выборе какого-то фильтра делает suggestions 25с.
mapFilter:

mFilter2:


То есть mapFilter работает все таки быстрее mFilter2. И имеет смысл его доделывать. То есть, я не буду выкладывать код. В течении 2-3 месяцев доделаю и буду продовать :-).

пс. Почему-то mFilter2 ошибочно считает suggestions. Для женщин он посчитал 31 кольцо, а на самом деле их 4082.

пс2.
в mFilter есть подсчёт результатов по каждому фильтру, но для фильтров из коробки я этого делать не планировал
На самом деле, если сделали фильтры как в mFilter2, то suggestions уже просто посчитать. В mFilter2 это 100 строк кода всего.
Роман
21 сентября 2022, 16:50
0
А TV текущего ресурса как называется?
newbmod
21 сентября 2022, 16:46
0
Нужно чтобы хотя бы одно из множества значений TV выбираемых ресурсов совпало со значением TV текущего ресурса
Роман
21 сентября 2022, 16:43
0
Вот тут вообще не понятно, что вы делаете:
{"[[*option]]:IN":rubrika}
Через IN тут не решить вопрос. Нужно через LIKE ()
Добавьте &showLog=`1` и посмотрите, свой запрос.
deleted
21 сентября 2022, 12:34
0
А смысл тратить время на то чтоб разбираться с чужим дополнением, если там кода на несколько строчек?

<style>
    .cookie-message {
        position: sticky;
        z-index: 100;
        bottom: 0;
        background-color: #fff;
        border-top: 1px solid #d3d3d3;
    }

    .cookie-message-inner {
        display: flex;
        justify-content: space-between;
        align-items: center;
        padding: 1.5rem 0;
        line-height: 1.2;
    }

    .cookie-message-text {
        flex-grow: 2;
    }
</style>

<div class="cookie-message js-cookie-message" hidden>
    <div class="container">
        <div class="cookie-message-inner">
            <div class="cookie-message-text">
                текст
            </div>
            <button class="button js-cookie-message-confirm">ОК</button>
        </div>
    </div>
</div>

<script>
    if (!localStorage.getItem('cookieAccept')) {
        const el = document.querySelector('.js-cookie-message');
        el.style.display = 'block';
        el.querySelector('.js-cookie-message-confirm').addEventListener('click', (e) => {
            localStorage.setItem('cookieAccept', 1);
            el.style.display = 'none';
        }, true);
    }
</script>