Кирилл

Кирилл

С нами с 02 мая 2019; Место в рейтинге пользователей: #88
Кирилл
12 февраля 2024, 22:35
0
на MODX 3 нету проекта с высокой нагрузкой для теста(
Кирилл
12 февраля 2024, 22:34
0
Под юзерами я имел в виду трафик на сайте согласно Яндекс Метрики
А зарегистрированных около ~35 тысяч было. Это было больше года назад сейчас всех данных не вспомню, особенно по строкам

Помню только что как только я переключил с smartSessionHandler на стандартный modSessionHandler — сразу начало работать как нужно :)

Я обсужу с Заказчиком такой тест — и смогу в будущем поделиться данными.

По настройкам было выставлено так:
smartsessions_authorized_users_gc_maxlifetime = 2592000
smartsessions_bot_signatures = DataForSeoBot|Googlebot|YandexBot|DotBot|bingbot|Mail.RU_Bot|PetalBot|MegaIndex.ru|YandexDirectDyn|Adsbot|SemrushBot|facebookexternalhit|SEO|Spider|YaDirectFetcher|BLEXBot|AhrefsBot|YandexMobileBot|MJ12bot|Barkrowler|crawler|YandexMetrika|Applebot|YandexMarket|python-urllib3|vkShare|UptimeRobot|Pinterestbot
smartsessions_bots_gc_maxlifetime = 259200
Кирилл
12 февраля 2024, 19:42
0
Приветствую
Вопрос, а проводилось ли тестирование работы под нагрузкой?
Потому что на smartSessions при сроке жизнь 1 месяц, и большом количестве посещений (около полумиллиона юзеров в месяц) — сильно тормозило проект. Сильно это измерялось в секундах вроде. Боты исключались понятное дело.
Кирилл
13 ноября 2023, 14:26
0
Вот мое решение, может сразу упросит поиск по поводу datetime
Данные в БД храню в integer формате в unixtimestamp
Мне важно получить дату до какого времени оплачен доступ у юзера, потому условно дата 01/01/2023, то сохраняю 01/01/2023 23:59:59 (GMT+0000)
Ну и соответственно потом показываю по разному данную дату (в подписи к полю — в привычном порядке для СНГ — день/месяц/год), а в самом поле, как по умолчанию месяц/день/год.
И да, для сохранения заюзал еще одно системное событие OnBeforeUserFormSave

<?php
/* userFields */
switch ($modx->event->name) {
    case "OnMODXInit":
        $map = array(
            'modUserProfile' => array(
                'fields' => array(
                    'surname' => '',
                    'patronymic' => '',
                    'paid' => '',
                ),
                'fieldMeta' => array(
                    'surname' => array(
                        'dbtype' => 'varchar',
                        'precision' => '100',
                        'phptype' => 'string',
                        'null' => false,
                        'default' => '',
                    ),
                    'patronymic' => array(
                        'dbtype' => 'varchar',
                        'precision' => '100',
                        'phptype' => 'string',
                        'null' => false,
                        'default' => '',
                    ),
                    'paid' => array(
                        'dbtype' => 'int',
                        'precision' => '10',
                        'phptype' => 'integer',
                        'null' => true,
                        'default' => null,
                    ),
                ),
            ),
        );

        foreach ($map as $class => $data) {
            $modx->loadClass($class);
            foreach ($data as $tmp => $fields) {
                if ($tmp == 'fields') {
                    foreach ($fields as $field => $value) {
                        foreach (array('fields', 'fieldMeta', 'indexes') as $key) {
                            if (isset($data[$key][$field])) {
                                $modx->map[$class][$key][$field] = $data[$key][$field];
                            }
                        }
                    }
                } elseif ($tmp == 'composites' || $tmp == 'aggregates') {
                    foreach ($fields as $alias => $relation) {
                        if (!isset($modx->map[$class][$tmp][$alias])) {
                            $modx->map[$class][$tmp][$alias] = $relation;
                        }
                    }
                }
            }
        }

        break;

    case "OnUserFormPrerender":
        if (!isset($user) || $user->get('id') < 1) {
            return;
        }

        if (!$modx->getCount('modPlugin', array('name' => 'AjaxManager', 'disabled' => false))) {
            $data['surname'] = htmlspecialchars($user->Profile->surname);
            $data['patronymic'] = htmlspecialchars($user->Profile->patronymic);
            $data['paid'] = date('m/d/Y', htmlspecialchars($user->Profile->paid));
            $dateRus = date('d.m.Y', htmlspecialchars($user->Profile->paid));

            $modx->controller->addHtml("
                <script type='text/javascript'>
                    Ext.ComponentMgr.onAvailable('modx-user-tabs', function() {
                        this.on('beforerender', function() {
                            var leftCol = this.items.items[0].items.items[0].items.items[0];
                            var rightCol = this.items.items[0].items.items[0].items.items[1];

                            leftCol.items.insert(4, 'modx-user-surname', new Ext.form.TextField({
                                id: 'modx-user-surname',
                                name: 'surname',
                                fieldLabel: 'Фамилия',
                                xtype: 'textfield',
                                anchor: '100%',
                                maxLength: 255,
                                value: '{$data['surname']}',
                            }));

                            leftCol.items.insert(5, 'modx-user-patronymic', new Ext.form.TextField({
                                id: 'modx-user-patronymic',
                                name: 'patronymic',
                                fieldLabel: 'Отчество',
                                xtype: 'textfield',
                                anchor: '100%',
                                maxLength: 255,
                                value: '{$data['patronymic']}',
                            }));

                            rightCol.items.insert(0, 'modx-user-paid', new Ext.form.DateField({
                                id: 'modx-user-paid',
                                name: 'paid',
                                fieldLabel: 'Оплачено ДО конца этой даты rus: {$dateRus}',
                                xtype: 'datetime',
                                format: 'm/d/Y',
                                value: '{$data['paid']}',
                            }));

                        });
                    });
                </script>
            ");
        }

        break;

    case "OnBeforeUserFormSave":
        $user->Profile->set('surname', $_POST['surname']);
        $user->Profile->set('patronymic', $_POST['patronymic']);
        $user->Profile->set('paid', strtotime($_POST['paid'].' 23:59:59'));

        break;
}
Кирилл
06 февраля 2022, 20:39
0
А всё, сам добил:
'leftJoin' => '{
    "big" : {
        "class" : "msProductFile",
        "alias" : "big",
        "on" : "big.product_id = msProduct.id AND path LIKE \'%/big/\' AND big.rank = 0"
    }
}',
'select' => '{
    "msProduct" : "*",
    "big" : "big.url as big"
}'
Кирилл
06 февраля 2022, 20:11
0
Добрый вечер.
Поделитесь, пожалуйста.
Кирилл
01 ноября 2021, 17:09
0
Спасибо. Упустил момент :(
Немного пожив с включенным simpleQueue — почему-то дублируются заявки в AMO.
И ежедневно проскакивает ошибка 401 =/
1) Может быть связано с 401?
2) может ли помочь изменить CRON задачу с ежеминутного выполнения ~/www/core/components/amocrm/cron/secondlyrunner.php к примеру, на раз в 3 минуты?
Кирилл
20 октября 2021, 18:03
0
Добрый день
Может быть есть готовый код для ajaxform и минишопа?
А то когда из всех форм и заказы падают в АМОцрм, и врем отправки до секунд 10-12 доходит.
Кирилл
15 июня 2021, 17:39
0
Да, я это понимаю, я потому и указал про это.
Но так как способ довольно быстро реализуем, то в этом случае так быстрее для меня было.
Кирилл
14 мая 2021, 16:08
0
Ломает ссылки, который указаны как [[~1]]
Кирилл
03 февраля 2021, 14:42
0
За 2 пункт больше спасибо!
Быстро, просто и удобно
Кирилл
23 сентября 2020, 17:41
0
тоже интересует этот вопрос.
На странице раньше была выведена стоимость доставки.
Теперь же это выглядит вот так
з.ы. доставка бесплатна от 50
Кирилл
07 мая 2020, 18:58
0
Для того чтобы это сработало, в самом вызове надо указать что минимальный поиск от 2-х символов
Например:
[[!pdoPage?
    &element=`msProducts`
    &parents=`0`
    &resources=`[[!mSearch2:default=`999999`?returnIds=`1`&limit=`0`&minQuery=`2`]]`
    &sortby=`ids`
    &includeContent=`1`
    &includeThumbs=`big`
    &tplPagePrevEmpty=`@INLINE <li class="disabled"><span>«</span></li>`	
    &tplPageNextEmpty=`@INLINE <li class="disabled"><span>»</span></li>`	
    &tplPageWrapper=`	@INLINE <div class="pagination"><ul class="pagination">[[+prev]][[+pages]][[+next]]</ul></div>`
]]
Где добавляем
&minQuery=`2`
Либо же в быстром поиске.
[[!mSearchForm?
    &element=`msProducts`
    &includeThumbs=`small`
    &tplForm=`tpl.mSearch2.form_prom`
    &tpl=`tpl.mSearch2.ac_prom`
    &pageId=`21`
    &minQuery=`2`
]]
Кирилл
09 марта 2020, 20:29
+1
Да, достаточно сделать такую проверку, чтобы срабатывало только для типа содержимого text/html
$type = $modx->resource->get('contentType');
            if ($type == 'text/html') {
                $output = $html->save();
                $html->clear();
                unset($html);
                $output = preg_replace('|\s+|', ' ', $output);
            }
Кирилл
09 марта 2020, 12:10
0
Эта конструкция вырезает удаляет переносы строк
$output = $html->save();
            $html->clear();
            unset($html);
            $output = preg_replace('|\s+|', ' ', $output);
Но как оказалось она работает в том числе и для документов со всеми типами содержимого, в том числе text

Можно ли как-то ограничить действие только для типа содержимого HTML или исключить для text?
Кирилл
07 февраля 2020, 11:08
0
Вы сейчас говорите про мягкое и теплое.

Как бы вы сейчас не хейтили, но благодаря посту было подкинуто крутое и простое решение modx.pro/solutions/19671#comment-117616, а это уже развития сообщества
Кирилл
07 февраля 2020, 10:53
0
Компания — да :))
А я лично нет, не разрабатываю на MODX.
Отсюда и говорю что простое решение.
Кирилл
23 января 2020, 23:33
0
Спасибо за информацию, о многих багах и проблемах знаем, но не правим.
В ближайшее время мы выкатим новую версию сайта, но уже на Laravel, а не MODX