Сергей

Сергей

С нами с 06 января 2020; Место в рейтинге пользователей: #463
Сергей
25 ноября 2022, 14:07
0
Даже блокировка кнопки через js после отправки формы не спасает)

А удаление дублей это заложено в модыкс? Где-то это контролируется?
Сергей
24 ноября 2022, 23:48
0
$user = $hook->getValue('register.user');
$user_id = $user->get('id');

$query_repact = $modx->prepare("INSERT INTO yn_schedule (user_id, type_task, chunk_name, date_execut, date_create) VALUES ($user_id, 1, 'lgnRepeatActivateEmailTpl', NOW() + INTERVAL 24 HOUR, NOW());");
$query_repact->execute();

$query_aftcon = $modx->prepare("INSERT INTO yn_schedule (user_id, type_task, chunk_name, date_execut, date_create) VALUES ($user_id, 1, 'afterConfirmEmailTpl', NOW() + INTERVAL 25 HOUR, NOW());");
$query_aftcon->execute();

//Добавляем запись в crm
$url = 'https://**********.ru/crm/index.php?uid='.$user_id.'&type=regsuc';
$client = $modx->getService('rest', 'rest.modRest');
$response = $client->get($url);
Сергей
29 октября 2022, 15:36
0
Вроде сделал)
Обновил информацию в посте
Сергей
29 октября 2022, 15:36
0
Спасибо! Обновил пост — добавил решение.
Сделал франкенштейна из разных кусков :)
Сергей
28 октября 2022, 15:38
0
Да, имеется ввиду что в течении какого-то периода пользователь не подтвердил регистрацию и в этом случае нужно отправить повторно.
Сергей
28 октября 2022, 12:27
0
Основная проблема в формировании ссылки. Остальное не вызывает вопросов :)
Нет понимания можно ли как-то повторно сгенерировать ссылку.
Сергей
07 июня 2022, 09:51
0
pdoPage пишет все свои параметры. Ладно бы если бы перезаписывал, так он пишет каждый раз новые просто через запятую.
"pdoPage": {
      "74d3f15ea51296ccd42089fe1733fe399a4f8cc9": {
        "fastMode": false,
        "nestedChunkPrefix": "pdotools_",
        "offset": "",
        "checkPermissions": "",
        "loadModels": "",
        "prepareSnippet": "",
        "prepareTVs": "",
        "processTVs": "",
        "outputSeparator": "\n",
        "decodeJSON": true,
        "scheme": -1,
        "fenomSyntax": "#\\{(\\$|\\/|\\w+(\\s|\\(|\\|)|\\(|')#",
        "elementsPath": "/usr/share/nginx/html/core/elements/",
        "cachePath": "/usr/share/nginx/html/core/cache/default/pdotools",
        "plPrefix": "",
        "limit": "9",
        "maxLimit": "90",
        "page": "",
        "pageVarKey": "page",
        "totalVar": "page.total",
        "pageLimit": 5,
        "element": "pdoUsers",
        "pageNavVar": "page.nav",
        "pageCountVar": "pageCount",
        "pageLinkScheme": "",
        "tplPage": "@INLINE <li class=\"page-item\"><a class=\"page-link\" href=\"[[+href]]\">[[+pageNo]]</a></li>",
        "tplPageWrapper": "@INLINE <ul class=\"pagination\">[[+first]][[+prev]][[+pages]][[+next]][[+last]]</ul>",
        "tplPageActive": "@INLINE <li class=\"page-item active\"><a class=\"page-link\" href=\"[[+href]]\">[[+pageNo]]</a></li>",
        "tplPageFirst": "@INLINE <li class=\"page-item\"><a class=\"page-link\" href=\"[[+href]]\">[[%pdopage_first]]</a></li>",
        "tplPageLast": "@INLINE <li class=\"page-item\"><a class=\"page-link\" href=\"[[+href]]\">[[%pdopage_last]]</a></li>",
        "tplPagePrev": "@INLINE <li class=\"page-item\"><a class=\"page-link\" href=\"[[+href]]\">«</a></li>",
        "tplPageNext": "@INLINE <li class=\"page-item\"><a class=\"page-link\" href=\"[[+href]]\">»</a></li>",
        "tplPageSkip": "@INLINE <li class=\"page-item disabled\"><a class=\"page-link\" href=\"#\">...</a></li>",
        "tplPageFirstEmpty": "@INLINE <li class=\"page-item disabled\"><a class=\"page-link\" href=\"#\">[[%pdopage_first]]</a></li>",
        "tplPageLastEmpty": "@INLINE <li class=\"page-item disabled\"><a class=\"page-link\" href=\"#\">[[%pdopage_last]]</a></li>",
        "tplPagePrevEmpty": "@INLINE <li class=\"page-item disabled\"><a class=\"page-link\" href=\"#\">«</a></li>",
        "tplPageNextEmpty": "@INLINE <li class=\"page-item disabled\"><a class=\"page-link\" href=\"#\">»</a></li>",
        "cache": false,
        "cacheTime": 3600,
        "cacheAnonymous": false,
        "toPlaceholder": "",
        "ajax": 1,
        "ajaxMode": "scroll",
        "ajaxElemWrapper": "#pdopage",
        "ajaxElemRows": "#pdopage .rows",
        "ajaxElemPagination": "#pdopage .pagination",
        "ajaxElemLink": "#pdopage .pagination a",
        "ajaxElemMore": "#pdopage .btn-more",
        "ajaxTplMore": "@INLINE <button class=\"btn btn-primary btn-more\">[[%pdopage_more]]</button>",
        "ajaxHistory": "",
        "frontend_js": "[[+assetsUrl]]js/pdopage.min.js",
        "frontend_css": "[[+assetsUrl]]css/pdopage.min.css",
        "setMeta": true,
        "strictMode": true,
        "groups": "Users",
        "users": ",-8,-11,-12,-13,-15,-16,-17,-18,-20,-21,-46,-47",
        "tpl": "UsersFeedOtherTpl",
        "sortdir": "DESC",
        "useFenom": "1",
        "useFenomParser": "",
        "useFenomCache": "",
        "useFenomMODX": "",
        "useFenomPHP": "",
        "chunkExtensions": [
          "html",
          "tpl"
        ]
      }
Куки я собираюсь передавать в зашифрованном виде, поэтому, думаю, шанс взлома сокращается)
Сергей
16 мая 2022, 18:22
0
Восклицательный знак в плейсхолдере [[!+photo:default=`/assets/photouser/default.jpg`]] оказался лишним. Без него работает.
Но странно что так [[!+photo]] работает.
Сергей
04 апреля 2022, 10:41
0
Оказалось что на хосте версия php 5.6.
Обновление до 7.4. помогло устранить ошибку.
Сергей
02 апреля 2022, 18:17
0
Большое спасибо! Фото товара удаляется и создается.

Но в логах появилась ошибка:

[2022-04-02 18:12:05] (ERROR @ /home/users/j/*************/domains/*************.ru/core/components/minishop2/model/minishop2/msproductfile.class.php : 190) [miniShop2] Could not generate thumbnail for "/assets/images/products/127/sp01rm.jpg". Array
(
    [0] => phpThumb() v1.7.16-202012161640 in file "phpthumb.class.php" on line 234
    [1] => setCacheDirectory() starting with config_cache_directory = "/home/users/j/*************/domains/*************.ru/core/cache/phpthumb/" in file "phpthumb.class.php" on line 1048
    [2] => setting config_cache_directory to $this->realPathSafe(/home/users/j/*************/domains/*************.ru/core/cache/phpthumb) = "/home/users/j/*************/domains/*************.ru/core/cache/phpthumb" in file "phpthumb.class.php" on line 1076
    [3] => setSourceFilename(/home/users/j/*************/domains/*************.ru/ms_jmsg0U) set $this->sourceFilename to "/home/users/j/*************/domains/*************.ru/ms_jmsg0U" in file "phpthumb.class.php" on line 299
    [4] => Addding ImageMagick formats to $AvailableImageOutputFormats (text;ico;bmp;wbmp;gif;png;jpeg) in file "phpthumb.class.php" on line 1006
    [5] => $AvailableImageOutputFormats = array(text;ico;bmp;wbmp;gif;png;jpeg;webp) in file "phpthumb.class.php" on line 1012
    [6] => $this->thumbnailFormat set to $this->config_output_format "jpeg" in file "phpthumb.class.php" on line 1023
    [7] => $this->thumbnailFormat set to $this->f "webp" in file "phpthumb.class.php" on line 1030
    [8] => $this->thumbnailQuality set to "90" in file "phpthumb.class.php" on line 1040
    [9] => $this->sourceFilename set to "/home/users/j/*************/domains/*************.ru/ms_jmsg0U" in file "phpthumb.class.php" on line 933
    [10] => SetCacheFilename() _src set from md5($this->sourceFilename) "/home/users/j/*************/domains/*************.ru/ms_jmsg0U" = "5ec982fbf998889e03e617f327ec8b8d" in file "phpthumb.class.php" on line 3616
    [11] => SetCacheFilename() _par set from md5(_bgffffff_farC_zc1_h400_w400_dpi150) in file "phpthumb.class.php" on line 3655
    [12] => starting ExtractEXIFgetImageSize() in file "phpthumb.class.php" on line 3409
    [13] => getimagesize(/home/users/j/*************/domains/*************.ru/ms_jmsg0U) says image is 800x800 in file "phpthumb.class.php" on line 3419
    [14] => $this->useRawIMoutput=false because "bg" is set in file "phpthumb.class.php" on line 1649
    [15] => $this->useRawIMoutput=false after checking $UnAllowedParameters in file "phpthumb.class.php" on line 1655
    [16] => phpThumb_tempnam() returning "/home/users/j/*************/domains/*************.ru/core/cache/phpthumb/pThumbzm75H2" in file "phpthumb.class.php" on line 4498
    [17] => ImageMagickSwitchAvailable(thumbnail) = 1 in file "phpthumb.class.php" on line 1581
    [18] => getimagesize(/home/users/j/*************/domains/*************.ru/ms_jmsg0U) SUCCEEDED: Array
(
    [0] => 800
    [1] => 800
    [2] => 2
    [3] => width="800" height="800"
    [bits] => 8
    [channels] => 3
    [mime] => image/jpeg
)
 in file "phpthumb.class.php" on line 1750
    [19] => ImageMagickSwitchAvailable(density) = 1 in file "phpthumb.class.php" on line 1581
    [20] => getimagesize(/home/users/j/*************/domains/*************.ru/ms_jmsg0U) returned [w=800;h=800;f=2] in file "phpthumb.class.php" on line 1765
    [21] => source dimensions set to 800x800 in file "phpthumb.class.php" on line 1768
    [22] => SetOrientationDependantWidthHeight() starting with "800"x"800" in file "phpthumb.class.php" on line 3388
    [23] => SetOrientationDependantWidthHeight() setting w="400", h="400" in file "phpthumb.class.php" on line 3404
    [24] => ImageMagickSwitchAvailable(repage) = 1 in file "phpthumb.class.php" on line 1581
    [25] => Remaining $this->fltr after ImageMagick: (array(0) { } ) in file "phpthumb.class.php" on line 2316
    [26] => ImageMagick called as (convert '/home/users/j/*************/domains/*************.ru/ms_jmsg0U[0]' -flatten -density '150' -thumbnail 'x400' -gravity center -crop '400x400+0+0' +repage png:'/home/users/j/*************/domains/*************.ru/core/cache/phpthumb/pThumbzm75H2' 2>&1) in file "phpthumb.class.php" on line 2334
    [27] => getimagesize(/home/users/j/*************/domains/*************.ru/core/cache/phpthumb/pThumbzm75H2) returned [w=400;h=400;f=3] in file "phpthumb.class.php" on line 2351
    [28] => ImageMagickThumbnailToGD::imagecreatefrompng() succeeded, $this->gdimg_source is now (400x400) in file "phpthumb.class.php" on line 2357
    [29] => ImageMagickThumbnailToGD() returning $this->IMresizedData (102449 bytes) in file "phpthumb.class.php" on line 2358
    [30] => deleting "/home/users/j/*************/domains/*************.ru/core/cache/phpthumb/pThumbzm75H2" in file "phpthumb.class.php" on line 2364
    [31] => skipping SourceImageToGD() because $this->gdimg_source is already a resource (400x400) in file "phpthumb.class.php" on line 3778
    [32] => CalculateThumbnailDimensions() starting with [W,H,sx,sy,sw,sh] initially set to [400,400,,,,] in file "phpthumb.class.php" on line 3260
    [33] => CalculateThumbnailDimensions() starting with [x,y,w,h] initially set to [0,0,400,400] in file "phpthumb.class.php" on line 3275
    [34] => CreateGDoutput() returning canvas "400x400" in file "phpthumb.class.php" on line 3383
    [35] => ImageResizeFunction($o, $s, 0, 0, 0, 0, 400, 400, 400, 400) in file "phpthumb.class.php" on line 4473
    [36] => memory_get_usage() after copy-resize = 27499336 in file "phpthumb.class.php" on line 433
    [37] => memory_get_usage() after imagedestroy = 26672832 in file "phpthumb.class.php" on line 435
    [38] => AntiOffsiteLinking() says this is allowed in file "phpthumb.class.php" on line 2578
    [39] => skipping AlphaChannelFlatten() because ($this->thumbnailFormat == "webp") in file "phpthumb.class.php" on line 2642
    [40] => GenerateThumbnail() completed successfully in file "phpthumb.class.php" on line 447
    [41] => imageinterlace($this->gdimg_output, 1) in file "phpthumb.class.php" on line 483
    [42] => RenderOutput() attempting imagewebp($this->gdimg_output) in file "phpthumb.class.php" on line 486
    [43] => GD does not have required built-in support for WebP output in file "phpthumb.class.php" on line 552
)
С чем она может быть связана?
Проверил все права на папки все в норме.
Так же выставил «phpthumb_allow_src_above_docroot» = «Да»
Сергей
27 января 2022, 14:10
0
Вот еще вариант, если нужен будет полный url по ID страницы
[[~[[*id]]? &scheme=`full`]]
[[~23? &scheme=`full`]]
Сергей
26 января 2022, 21:03
0
Николай, спасибо за ответ!

У меня получилось реализовать следующим образом:
1. В ноде получаю куку PHPSESSID
req.headers.cookie
2. С помощью пакета php-unserialize разбираю данные сессии и получаю user_id
const PHPUnserialize = require('php-unserialize');
$dataarr = PHPUnserialize.unserializeSession(data[0].data);
userid = $dataarr['modx.user.contextTokens']['web']; //или mgr
3. Если в $dataarr['modx.user.contextTokens'] пусто, то перекидываю на страницу авторизации.
Сергей
22 октября 2021, 17:12
0
Прошу прощения за не полную информацию. Дополнил свой вопрос.
Сергей
14 июня 2021, 00:48
0
Спасибо за предложение! Я в итоге увлекся и сделал сам :)
Результат прикрепляю ниже. Может кому пригодится.
На правильность метода не претендую, для меня это рабочий вариант) От прорисовки страницы до загрузки таблицы с 30000 строк = 2,1 сек.

pdoPage сниппет. С ним одна проблема — он выводит результат на страницу, который нам не нужен. Пока не понял как его убрать — просто вывожу в скрытый div.
<div style="display:none">
[[!pdoPage?
    &parents=`2`
    &ajaxMode=`default`
    &sortby=`[[!#GET.sortby:default=`Id`]]`
    &sortdir=`[[!#GET.sortdir:default=`desc`]]`
    &tvFilters=`SecondName==%[[!#GET.search:default=``]]%`
    &tpl=`patientListTpl`
    &includeTVs=`Id,SecondName,Note` 
    &limit=`10`
]]
</div>

Комментарии:
  1. [[!#GET.sortby:default=`Id`]] — через GET из dataTable с помощью ajax передаем параметры для сортировки
  2. &tvFilters=`SecondName==%[[!#GET.search:default=``]]%` — точно так же передаем данные для поиска
  3. &tpl=`patientListTpl` — данные которые необходимо передать dataTable с целью отображения их в таблице. Формат данных:
    ["[[+tv.Id]]","[[+tv.SecondName]]","[[+tv.Note]]"],
    Каждое значение в кавычках соответсвует столбцам таблицы. В конце строки нужна запятая!

Инициализация dataTable:
$(function () {
    var orderparam = [0, "desc"]; //сортировка по дефолту по первому столбцу таблицы
    var columnparam = ["Id", "SecondName", "Note"]; //столбцы таблицы
    var table = $("#example1").DataTable({
        "order": [orderparam],
        "lengthChange": false,
        "processing": true,
        "serverSide": true, //определяет в каком формате мы отправим данные для dataTable в callback
        "ajax": function (data, callback, settings) {
            var pageinfo = table.page.info(); //узнаем номер страницы для передачи в pdoPage
            var orderinfo = table.order(); //узнаем сортировку для pdoPage
            var searchinfo = table.search(); //данные поиска для pdoPage

            //перед заполнением таблицы запрашиваем данные у pdoPage с помощью get запроса
            $.ajax({
                url: "kartoteka?page=" + (pageinfo.page + 1) + '&sortby=' + columnparam[orderinfo[0][0]] + '&sortdir=' + orderinfo[0][1] + '&search=' + searchinfo,
            }).then(function (json, textStatus, jqXHR) {
                var json = JSON.parse(json); //получаем JSON от pdoPage
                var output = json.output.replace(/,\s*$/, ""); //берем только нужные нам данные. Убираем лишнюю запятую.
                var dr = JSON.parse('{"data":[' + output + ']}'); //полученные нами данные - текст. Конвертируем его в JSON.

                //все что мы получили отдаем для заполнения таблицы
                callback({
                    draw: data.draw, //специальный счетчик обращений dataTable
                    recordsTotal: json.total, //количество строк в ответе от pdoPage
                    recordsFiltered: json.total, //количество строк в ответе от pdoPage
                    data: dr.data //данные для заполнения
                });
            });

        },
        //если вдруг нужны кнопки. Они отрисовываются после заполнения таблицы. Поэтому, кнопки добавляем с помощью initComplete
        "buttons": ["colvis"],
        "initComplete": function () {
            table.buttons().container().appendTo($('#example1_wrapper .col-md-6:eq(0)')); //обратите внимание не селекторы, у вас они могут отличаться
        }
    });
});
Сергей
12 июня 2021, 11:36
0
Спасибо за ответ.
Если вас не затруднит — поделитесь, пожалуйста, ссылкой на пример или примером кода.
Сергей
22 января 2020, 13:30
0
В итоге плагин сделал вот так:
switch ($modx->event->name) {
    case 'OnBeforeDocFormSave':
        $id = $resource->get('id');
        $parent = $modx->getParentIds($id, 10, array('context' => 'web'));
        
        $datestart = date("Ymd", strtotime($resource->tv17));
        $dateend = date("Ymd", strtotime($resource->tv18));
        
        if ($parent[0] == 2) {
            if ($datestart > $dateend) {
                $modx->event->output('Сообщение о ошибке');
            }
        }
        break;
}
OnBeforeDocFormSave — плагин срабатывает до сохранения ресурса
$modx->event->output() — выводит текст о ошибке в модальном окне и не сохраняет ресурс
Сергей
22 января 2020, 11:55
0
Действительно, работает. Большое спасибо!)

Может вам так же известно как подсветить поле красным и сфокусироваться на нем?
Как это работает с стандартной валидацией полей в MODx при сохранении.
Сергей
21 января 2020, 21:19
0
Спасибо!

Разбираюсь с плагинами.
Подскажите, как получить TV до сохранения ресурса.

$resource->getTVValue('date') — таким образом берет уже существующее значение

Событие использую OnBeforeDocFormSave. Или нужно другое событие?
Сергей
08 января 2020, 00:43
0
Я так понимаю что MIGxdb — это объекты, а MIGx — это json. И передать данные простым способом не получится.

Может кто подскажет альтернативный способ как получить список ресурсов (с учетом что их много) и была возможность выбирать нужные?