Всего 125 679 комментариев

Александр
17 августа 2021, 16:16
0
Спасибо, но в этом случае как я понимаю он все опции в виде ссылок выкинет. А если нужны определённые характеристики в виде ссылок на ресурсы? Может быть в шаблоне с применением If? Допустим если «value == встроенная» то один вывод где значение в виде ссылки если значение другое то другой вывод. Извиняюсь в php не силён. )))) Я конечно понимаю, что это костыль, но ситуация, что нужно именно так сделать.
Тодор
17 августа 2021, 15:29
0
Создаеш TV, с типом ввода — Список (множественный выбор)
В поле вожможные значения пишеш чтото такое
@EVAL return $modx->runSnippet('msProducts', array(
    'parents'=>$parentID,
    'where'=>'{"Data.price:>=":"150"}',
    'limit'=>0,
    'sortby'=>'{"pagetitle":"ASC"}',
    'tplOuter'=>'@INLINE [[+output]]',
    'tpl'=>'@INLINE [[+pagetitle]]==[[+id]]',
    'outputSeparator'=>'||'
));
А при выводе на сайте береш значение твоей TV и передаеш в pdoResources
{'!pdoResources' | snippet:[
    'parents' => 0,
    'limit' => 0,
    'resources' => $_modx->resource.your_tv_field,
    'tpl' => '@INLINE <a href="{$uri}">{$pagetitle}</a>'
]}
я только не помню точно ставит ли «Список (множественный выбор)» — какой-то свой разделитель между значениями, если ето не "," то надо будет заменить розделитель
Aleksandr Huz
17 августа 2021, 14:45
+2
Думаю, что для развития pdoTools нужно создать сбор, так как без поддержки энтузиазм долго не живет.
А еще, не мешало бы переписать скрипты на ванильный js.
Баха Волков
17 августа 2021, 14:26
1
0
А где можно узнать какие параметры должны передаваться в $where а какие в $options?
В where выборка, а в options вот
Алексей Соин
17 августа 2021, 14:19
0
Хотя я всё-таки из этих двух шаблонизаторов отдаю предпочтение Smarty.
А в связи с тем что fenom не обновляется уже больше года и по возможностям уступает другим шаблонизаторам, планируется ли в pdoTools добавить поддержку тогоже Smarty(Twig)? Ну или использовать по умолчанию не феном в pdotools для modx 3(если он когдато выйдет?).
Александр Туниеков
17 августа 2021, 13:06
2
+1
Вообщем победил кеширование :-).
{'!mFilter2' | snippet : ['cacheTime'=>3600]}
Параметр cacheTime на 3600 включает кеширование запросов в базу. В mFilter2 кеширование не доработано. Сейчас 8 часов возился и сделал. Нужно заменить код файла core/components/msearch2/model/msearch2/msearch2.class.php кодом из https://gist.github.com/touol/a1c46d7fd199c0889c361c4075c28d39
К сожалению, не правя компонент, не исправишь кеширование.
На виндоус локалке при кешировании время ответа на категории с 4000 товаров сокращается с 30-60сек до 3-8сек со включенными подсказками. На боевом сайте не тестировал.
Можите попробовать у себя.
Можно еще ускорить вывод страницы кешируя сам выводmfilter2. Но это если договоримся по работе. Если что мой час стоит 600р.
Сергей Шлоков
17 августа 2021, 12:14
0
Может я чего-то не понимаю, но получается совсем не короче. Этот путь из названия перемещается в параметр. Т.е. ещё нужно писать отдельный параметр. Что явно выглядит длиннее.
Yurij Finiv
17 августа 2021, 11:46
0
Отличная новость.
У сниппетов есть небезопасный параметр «elementsPath», который позволяет контент-менеджеру обходить соответствующую системную настройку.
Сознаюсь честно, использовал данную опцию в некоторых проектах, так как было удобно не строчить долгий путь к папке
mkas
17 августа 2021, 11:36
0
Столкнулся с необходимостью сделать покупку в один клик. Кнопка находится в той же форме, что и обычная кнопка добавления товара. Логика такая: по нажатию на кнопку обратимся к php для очистки корзины, а новый товар добавится после силами могучего Minishop2.

HTML
<button type="submit" data-type="getOne">Купить в 1 клик</button>
JS
function startGetOneWork(){
        let getOneWork = document.querySelectorAll('[data-type="getOne"]');
        for(index = 0; index < getOneWork.length; index++){
            getOneWork[index].addEventListener('click', () => {
                console.log('Попытка очистки корзины');
                reset_button_podmena();
                clearOrderFixTresh();
                
                async function clearOrder(){
                    let url = "/minishop2-controller?type=clearOrder";
                    let headers = {
                        method: "POST"
                    }
                    let response = await fetch(url, headers);
                    if(response.ok){
                        console.log("Корзина очищена");
                    }else{
                        console.log("Ошибка очистки корзины");
                    }
                }
            });
        }
    }
    
    startGetOneWork();
PHP (создаете ресурс, в нем вызываете сниппет)
if($_SERVER["REQUEST_METHOD"] == "POST"){
        switch($_GET["type"]){
            case "clearOrder":
                $miniShop2 = $modx->getService('miniShop2');
                $miniShop2->initialize($modx->context->key);
                $miniShop2->cart->clean();
                break;
            default: return;
        }
    }
Дмитрий
17 августа 2021, 11:19
0
Здравствуйте, добавил скрипт сразу на страницу сравнения, но удаляет почему то при нажатии по одному, а не все сразу( В чем может быть проблема?
Анатолий
17 августа 2021, 11:11
0
Все получилось, так:
['published' => 0],
['parents' => 2, 'select' => 'id,pagetitle', 'sortby' => 'menuindex']
А где можно узнать какие параметры должны передаваться в $where а какие в $options?
mkas
17 августа 2021, 11:09
0
А никак, они сами не знают)) Сделали мутанта, теперь поди разбери, как оно работает))
Баха Волков
17 августа 2021, 11:07
+4
Ура, уважаемый Сергей теперь вместо того, чтобы просто бомбить, будет бомбить и делать)
Баха Волков
17 августа 2021, 11:05
+2
Добавить сниппетам возможность возвращать необработанный массив данных.
Это востребовано при использовании Fenom. Сейчас есть возможность получить такой массив через кодировку в json и обратно, но это всё-таки оверхед.
Я тут похлопаю
Анатолий
17 августа 2021, 11:02
0
Баха, спасибо! Не догадался внимательно рассмотреть getResources.
Александр Туниеков
17 августа 2021, 10:59
0
Я нашел тяжелый сайт уже :-). Не настолько тяжелый как у вас, но 4000 товаров в категории есть. В mfilter2 есть встроенное кеширование, но оно не работает. Сейчас вожусь пробую его завести. Копия на локалке без кеша отрабатывает 30с, а с кешем 3с. Но сейчас сама фильтрация не заводиться. Как победю напишу.
Баха Волков
17 августа 2021, 10:58
1
+1
1. Если обратить внимание, то метод getResources принимает 2 атрибута

А у вас:

{var $resources = $_modx->getResources(
    ['published' => 0, 'deleted' => 0], // Первый атрибут
    ['parents' => 2], // Второй атрибут
    ['sortby' => 'id', 'sortdir' => 'ASC', 'limit' => 0] // Третий атрибут, который будет игнорирован
)}

2. Незачем использовать метод getChunk, хотя может быть вы это для примера написали, но на всякий случай:

// Не надо так
{foreach $resources as $resource}
    {$_modx->getChunk('@INLINE <a href="#{$id}">{$pagetitle}</a>', $resource)}
{/foreach}

// Надо вот так
{foreach $resources as $resource}
    <a href="#{$resource.id}">{$resource.pagetitle}</a>
{/foreach}
Денис Надей
17 августа 2021, 10:50
0
собсвтенно с запросами к базе. Конкретно какие дейтсвия вы планируете совершать прежде чем я вам доступы дам
Денис Надей
17 августа 2021, 10:49
0
было бы классно хотябы компонент получить о котором вы говорите
Максим
17 августа 2021, 10:45
0
php 7.4

Права есть

Кэш удалял