Александр Туниеков

Александр Туниеков

С нами с 19 декабря 2015; Место в рейтинге пользователей: #15
Александр Туниеков
06 октября 2021, 00:42
+1
Мнда… Чудесный код :-). echo и getChunk. getChunk вообще ничего не делает. все через echo идет.
Попробуй лучше так:
Чанк
<div class="row">
    <div class="col-md-3">[[+Date]]</div>
    <div class="col-md-3">[[+Name]]</div>
    <div class="col-md-3">[[+LastName]]</div>
    <div class="col-md-3">[[+DepName]]</div>
</div>
сниппет
$result = $modx->query("SELECT * FROM $tableName ORDER BY id DESC LIMIT 27");
$data = $result->fetchAll(PDO::FETCH_ASSOC);
$out = '';
foreach ($data as $list){
        $out .= $modx->getChunk('OverlapCounter', $list);
}
return $out;
Александр Туниеков
24 сентября 2021, 21:20
0
Хм. ошибки не смотрел тогда. А сейчас минишоп уже откатили до прежней версии :)
Александр Туниеков
24 сентября 2021, 20:02
0
Владелец обновил минишоп. Сломался заказ. При создании заказа ни данных получателя ни адреса. Только товары. Фиг знает куда рыть.
Александр Туниеков
24 августа 2021, 21:55
0
Может плагин левый на изменение статуса заказа. Ну так не угодаешь. Надо цепочку создания заказа смотреть.
Могу посмотреть. Стоимость часа 600р. Если устраивает пиши на t.me/touols
Александр Туниеков
24 августа 2021, 12:55
0
У вас фильтры vlag_massiv и glubina_do_40 еще подключены и на них чанков почему-то нет
Александр Туниеков
22 августа 2021, 22:19
0
А какую ошибку выдает? И где? в коносоли? Можно скриншот?
Александр Туниеков
21 августа 2021, 10:30
0
2. А я добавил исключение
preg_match('/DISTINCT/i',
                        $fields)
В блоке
if ($fields == 'all' || $fields == '*' || empty($fields)) {
                        $fields = $this->modx->getSelectColumns($class, $alias);
                    } elseif(preg_match('/DISTINCT/i',
                        $fields)){
                    }else {
                        $fields = $this->modx->getSelectColumns($class, $alias, '',
                            array_map('trim', explode(',', $fields)));
                    }
3.
Это чудит xPDO.
В курсе. Если select строка, xPDO разбивает select по запятым и затем решает, что 1 это колонка и ставит апострофы.
Блок
if (is_string($fields) && strpos($fields, '(') !== false) {
                    // Commas in functions
                    $fields = preg_replace_callback('/\(.*?\)/', function($matches) {
                        return str_replace(",", "|", $matches[0]);
                    }, $fields);
                    $fields = explode(',', $fields);
                    foreach ($fields as &$field) {
                        $field = str_replace('|', ',', $field);
                    }
                    $this->query->select($fields);
                    $this->addTime('Added selection of <b>' . $class . '</b>: <small>' . str_replace('`' . $alias . '`.',
                            '', implode(',', $fields)) . '</small>', microtime(true) - $time);
                }
вообще не был бы нужен, если бы XPDO не чудила.

Но так как запрос простой и без логики, я бы не стал вообще использовать xPDO, а сделал бы маленький и лёгкий запрос (без кучи объектов xPDO)
У меня pdoTools в компонентах используется, чтобы изменить запрос не трогая сам компонент. Например из excelconvertrule
{
    "class": "MaterialZakupList",
    "leftJoin": {
        "MaterialZakup": {
            "class": "MaterialZakup",
            "on": "MaterialZakup.id = MaterialZakupList.order_id"
        },
        "gtsBAccount": {
            "class": "gtsBAccount",
            "on": "gtsBAccount.id = MaterialZakup.account_id"
        },
        "raschetsMaterial": {
            "class": "raschetsMaterial",
            "on": "raschetsMaterial.id = MaterialZakupList.mat_id"
        },
        "Orgs": {
            "class": "Orgs",
            "on": "Orgs.id = MaterialZakup.org_id"
        }
    },
    "select": {
        "MaterialZakupList": "*",
        "Orgs": "Orgs.shortname",
        "gtsBAccount": "gtsBAccount.label as account",
        "raschetsMaterial": "IF(MaterialZakupList.prihod_date IS NULL,'в дороге','получено') as status1,IF(MaterialZakupList.type_id = 3,raschetsMaterial.name,MaterialZakupList.tovar) as tovar1,raschetsMaterial.type,raschetsMaterial.metall,raschetsMaterial.ed_izm",
        "MaterialZakup": "MaterialZakup.date,MaterialZakup.document"
    },
    "sortby": {
        "MaterialZakupList.id": "ASC"
    }
}
При экспорте в excel без правок pdoTools на строке
IF(MaterialZakupList.prihod_date IS NULL,'в дороге','получено')
'в дороге' обрамляется апострофами.
Александр Туниеков
17 августа 2021, 19:37
+1
Отправил соточку :). С наумкиным не сложилось PR отправлять. Ошибки в pdoTools такие: кавычки неправильно ставит собака. Часто подсчет строк в кавычках, на функциях и where может неправильно кавычки поставит. Как вспомню где именно так отправлю Issues. В моей версии pdoTools они поправлены. Хотя и костылями.
Александр Туниеков
17 августа 2021, 19:27
0
Всем кому интересно. Где-то неверно скопировали. Сам применил и все заиграло как надо :-).
Александр Туниеков
17 августа 2021, 17:37
0
Ну вот :-(. На боевом сайте сразу тестировать не стоит. Надо копию, чтоб все обкатать можно было. У меня на локалке, после переноса с боевого, до всякого кеширования, сразу время работы с 4 секунд до минуты подлетело. Сейчас хотелось бы вне виндоус локалки протестировать. Можите все-таки сделать копию, чтоб не на локалке протестировать можно было?
Александр Туниеков
17 августа 2021, 16:43
0
Параметр cacheTime на 3600 включает кеширование запросов в базу
Параметр cacheTime больше 0 включает кеширование запросов в базу. 3600 это час жизни кеша.
Чтот косноязычно выражаюсь :-).
Александр Туниеков
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, 10:59
0
Я нашел тяжелый сайт уже :-). Не настолько тяжелый как у вас, но 4000 товаров в категории есть. В mfilter2 есть встроенное кеширование, но оно не работает. Сейчас вожусь пробую его завести. Копия на локалке без кеша отрабатывает 30с, а с кешем 3с. Но сейчас сама фильтрация не заводиться. Как победю напишу.
Александр Туниеков
17 августа 2021, 03:50
0
Хотел разобраться, где mfilter2 тупит на больших сайта, но нет под рукой большого сайта примера. Можите сделать копию сайта и скинуть мне доступ?
Александр Туниеков
17 августа 2021, 03:26
0
А после загрузки страницы фильтр быстро работает?
Мы как-то кешировали вывод mfilter2 на страницу. Страницы тогда грузились быстро, но если нажать что-нибудь в фильтре то все равно фильтр за 3 секунды только отрабатывал. Если что компонент что делали могу поискать и скинуть.
Посмотрел сайт. Фильтрация тоже 12с у вас занимает. Так что кешеровать только вывод не решит проблему. mfilter2 на больших сайтах тупит. Надо его переделывать как-нибудь
Александр Туниеков
05 июля 2021, 11:17
0
1 Страница теста, скрытая из меню. На нее поместите
[[!UserTest? &answer_page_id=`22`]]
Александр Туниеков
04 июля 2021, 02:06
0
Да ресолвер лучше. Просто не приходилось ресурсы в пакет запихивать и сомнения обуяли :-)
Александр Туниеков
04 июля 2021, 02:03
0
Ну опыт сын ошибок… В следующий раз буду знать, что ресурсы лучше ресолвером создавать. Как-то не приходилось ресурсы в пакет включать.
Александр Туниеков
04 июля 2021, 01:28
0
Ты либо между строк читаешь, либо тебе буквально на пальцах все нужно объяснять.
Ну значит ты не четко выразился. Взять из build.php, вставить в ресолвер, и дописать к нему сохранение…
вставить в ресолвер — пропустил, и твое предложение не однозначно читается.