Всего 123 784 комментария

al1ve
06 ноября 2024, 16:28
0
Здравствуйте. Такой вопрос. Из-за спама пришлось перейти на плагин SendIt, но спам всё равно приходит. Ваш способ сработает для SendIt? Или его нужно переписать? Или может я просто неправильно настроил SendIt?
Кровельный
06 ноября 2024, 11:13
0
MODX Revolution 2.8.3-pl
87.include.cache.php — Плагин: webpgenerator (87)

[2024-11-06 11:08:33] (ERROR @ /var/www/www-root/data/www/site.ru/core/components/webpgenerator/classes/ImageConverter.php : 145) PHP warning: exif_imagetype(/var/www/www-root/data/www/site.ru/assets/components/phpthumbof/cache/7040%2821%29.0211e0a20652fcdffc397d1f517afe76.jpg): failed to open stream: No such file or directory
[2024-11-06 11:08:33] (ERROR @ /var/www/www-root/data/www/site.ru/core/components/webpgenerator/classes/ImageConverter.php : 147) PHP warning: array_key_exists(): The first argument should be either a string or an integer
[2024-11-06 11:08:33] (ERROR @ /var/www/www-root/data/www/site.ru/core/components/webpgenerator/elements/plugins/plugin.webpgenerator.php : 143) User warning: InvalidArgumentException: Cannot detect /var/www/www-root/data/www/site.ru/assets/components/phpthumbof/cache/7040%2821%29.0211e0a20652fcdffc397d1f517afe76.jpg extension in /var/www/www-root/data/www/site.ru/core/components/webpgenerator/classes/ImageConverter.php:148
Stack trace:
#0 /var/www/www-root/data/www/site.ru/core/components/webpgenerator/classes/ImageConverter.php(43): ImageConverter->getRealExtension('/var/www/www-ro...')
#1 /var/www/www-root/data/www/site.ru/core/components/webpgenerator/classes/ImageConverter.php(33): ImageConverter->loadImage('/var/www/www-ro...')
#2 /var/www/www-root/data/www/site.ru/core/components/webpgenerator/elements/plugins/plugin.webpgenerator.php(141): ImageConverter->convert('/var/www/www-ro...', '/var/www/www-ro...', 95)
#3 /var/www/www-root/data/www/site.ru/core/cache/includes/elements/modplugin/87.include.cache.php(2): include_once('/var/www/www-ro...')
#4 /var/www/www-root/data/www/site.ru/core/model/modx/modscript.class.php(76): include('/var/www/www-ro...')
#5 /var/www/www-root/data/www/site.ru/core/model/modx/modx.class.php(1674): modScript->process(NULL)
#6 /var/www/www-root/data/www/site.ru/core/model/modx/modresponse.class.php(83): modX->invokeEvent('OnWebPagePreren...')
#7 /var/www/www-root/data/www/site.ru/core/model/modx/modrequest.class.php(138): modResponse->outputContent(Array)
#8 /var/www/www-root/data/www/site.ru/core/model/modx/modrequest.class.php(122): modRequest->prepareResponse()
#9 /var/www/www-root/data/www/site.ru/core/model/modx/modx.class.php(1461): modRequest->handleRequest()
#10 /var/www/www-root/data/www/site.ru/index.php(54): modX->handleRequest()
#11 {main}
Артур Шевченко
06 ноября 2024, 10:28
0
Плагин на сохранение возможно. Или не заполнено обязательное поле.
Сергей
06 ноября 2024, 09:38
0
Добрый день! Подскажите пожалуйста при фильтрации если использовать msoptionprice2 будут выбираться нужные опции, например, если выбрал цвет белы, то будут выводиться товары с выбранной опцией белого цвета (у товара может несколько цветов).
Павел Романов
05 ноября 2024, 17:51
1
0
Можно такой сниппет сделать и запускать через CronManager:
<?php
$sql = "SELECT id FROM {$modx->getTableName('modResource')} WHERE deleted = 0 AND published = 1";
$q = $modx->prepare($sql);
$q->execute();
$resources = $q->fetchAll(PDO::FETCH_ASSOC);
foreach ($resources as $resource) {
    $response = $modx->runProcessor('mgr/index/update', array('id' =>$resource['id']), array('processors_path' => MODX_CORE_PATH . 'components/msearch2/processors/'));
    if ($response->isError()) {
        $modx->log(modX::LOG_LEVEL_ERROR, print_r($response->getAllErrors(), true));
    }
}
Konstantin
05 ноября 2024, 17:25
0
Столкнулся с подобным глюком — в tplInner на феном не выводит id. Странно прошло почти 5 лет а вопрос до сих пор не решен. Ссылки от последнего коммента уже битые
Роман
05 ноября 2024, 15:27
0
Понял в чем проблема, но странно.
Новый город имеет у страниц привязки к страницам других контекстов (чтобы работал код выше).
Но почему-то нет обратных привязок, приходится их расставлять вручную, как-то странно.

Сталкивались с таким, как решается быстро, может кто подскажет?
Сергей С
05 ноября 2024, 10:23
0
Нужно стандартный чанк изменить или предварительно копию сделать, И на строке 155 изменить стиль window.clusters = geoObjects.search(«geometry.type == 'Point'»).clusterize({ preset: 'islands#blackClusterIcons'});
Александр
04 ноября 2024, 11:44
0
А для чего удалили ссылку на $customer в методе getCustomerId? Теперь в событие msOnBeforeGetOrderCustomer передается всегда null и после события тоже всегда null и осталась бесполезная проверка, которая всегда выполняется, при этом на $customer в событии msOnBeforeGetOrderCustomer никак не повлиять, об этом даже pull request есть. Верните, пожалуйста, ссылку обратно)
Александр Туниеков
04 ноября 2024, 04:49
+1
Еще сейчас заметил у Артура редактируется выбранная группа пользователей. Чтоб редактировать группу 2 в gettables надо добавить в секцию pdoTools where:
'where'=>[
    'modUser.primary_group' => 2,
    'modUser.active' => 1,
]
Александр Туниеков
04 ноября 2024, 04:36
0
Забыл. getTables работает в MODX2. В MODX3 тоже вроде пока работает, но там не гарантируется и приспосабливать getTables для MODX3 не планируется. Работу с произвольной таблицей в MODX3 вроде сильно усложнили и не понятно как сделать правильно.
Александр Туниеков
04 ноября 2024, 03:47
+1
Кстати GRUD в getTables реализован и можно его использовать для подобной задачи :-). У пользователей MODX 2 таблицы и не так просто. Но можно попробовать.

На странице на которую ограничен доступ пишем сниппет:
{'!getTable' | snippet : [
    'table'=>[
        'event'=>1,
        'class'=>'modUser',
        'actions'=>[
            'create'=>[],
            'update'=>[],
            'remove'=>[],
            'export_excel'=>[],
        ],
        'pdoTools'=>[
            'class'=>'modUser',
            'leftJoin'=>[
                'modUserProfile'=>[
                    'class'=>'modUserProfile',
                    'on'=>'modUserProfile.internalKey = modUser.id'
                ]
            ],
            'select'=>[
                'modUser'=>'modUser.id',
                'modUserProfile'=>'modUserProfile.fullname,modUserProfile.email,modUserProfile.phone',
            ],
            'sortby'=>[
                'modUser.id'=>'DESC'
            ]
        ],
        'row'=>[
            'id'=>['filter'=>1],
            'password'=>[
                'edit'=>['type'=>'hidden'],
                'default'=>'Не секретный пароль'
            ],
            'fullname'=>[
                'class'=>'modUserProfile',
                'label'=>'ФИО',
                'edit'=>['type'=>'text','search_fields'=>['internalKey'=>'id'],],
                'filter'=>1,
            ],
            'email'=>[
                'class'=>'modUserProfile',
                'label'=>'email',
                'edit'=>['type'=>'text','search_fields'=>['internalKey'=>'id'],],
                'filter'=>1,
            ],
            'phone'=>[
                'class'=>'modUserProfile',
                'label'=>'Телефон',
                'edit'=>['type'=>'text','search_fields'=>['internalKey'=>'id'],],
                'filter'=>1,
            ],
        ]
    ]
]}
Пишем плагин на событие getTablesAfterUpdateCreate. Для работы плагина в сниппете должно быть указано 'event'=>1, как выше.
<?php
switch ($modx->event->name) {
    case 'getTablesAfterUpdateCreate':
        // $modx->log(1,'getTablesAfterUpdateCreate '.print_r($data,1));
        if($data['table_name'] == 'modUser' and $data['gts_action'] == 'getTable/create'){
            if($modUser = $modx->getObject('modUser',(int)$data['id'])){
                $modUser->set('username',$data['email']);
                $modUser->set('password',md5(date('d.m.Y H:i:s')));
                $modUser->joinGroup(2);
                $modUser->save();
            }
        }
    break;
}
И все работает :-).


Так же можно это же сделать с PVTables, но этот компонент я еще не добрался опубликовать :-(. И писать в 2 таблицы сразу там не сделанно. И события не все прописал :-(.

Безопасность обеспечивается хеш-кодом. Страница на которой опубликован сниппет должна быть доступна только нужным пользователям. Использовать getTables, для подобных задач, думаю, проше и быстрее чем писать контроллеры для sendIt.
Александр Туниеков
04 ноября 2024, 02:38
0
Какая версия MySQL? На MySQL 8 возникала проблема. Он почему-то не воспринимает двойную сортировку.
sort by pagetitle ASC, createon DESC
И MySQL 8 возвращает ошибку. В коде от Ильи двойная сортировка используется и нужна. Когда с этой ошибкой столкнулся не было времени ее решать, но на всякий случай сейчас MySQL 8 не ставлю.
Александр Туниеков
04 ноября 2024, 02:25
0
Тоже интересно что с безопасностью. В коде на гитхабе никаких проверок на доступ. Возможно безопасность обеспечивает SendIt, но автор вообще не указал как SendIt подключается и используется. Наверно в SendIt подключаются прессеты??? В общем, для человека не знакомого с SendIt, как мне, статья вообще не понятная.

Безопасность может быть реализованна таким образом. Сниппет, типа AjaxForm, при обработки страницы, записывает в сессию хеш-код. js в браузере отправляет с формой этот хеш-код. Обработчик ajax запросов на сервере смотрит есть ли в сесии этот хеш-код и если его нет, то возращяет ошибку.
Таким образом, если сниппет не был вызван при обработке страницы, то все ajax запросы завершаться ошибкой. Будут приняты только те запросы с правильным хеш-кодом.
А на ресурс MODX можно поставить ограничения и показывать его только разрешенным пользователям. Соответственно на странице на запрещенном ресурсе сниппет не отработал, хеш-код в сессию не записался и ajax запросы не срабатывают.

В общем не знаю, как безопасность реализованна в SendIt, но наверно что-то подобное. Надеюсь @Артур Шевченко просветит нас :-)
Ivan K.
02 ноября 2024, 22:21
0
Сегодня столкнулся с подобной проблемой.
MODX3 + php8.1

Выяснил, что причина в слеше в начале твшки с картинкой.
Решил топорным методом.
[[pthumb? &input=`[[+tv.foto:replace=`/assets/files/==assets/files/`]]` &options=`w=250&h=180&zc=1`]]
Вдруг кому пригодится.
Pavel
02 ноября 2024, 18:09
0
вопрос с текстом был решен в «Управление словарями», а вот со скриптами прищлось редактировать php файл сниппета и комментировать некоторые js и css файлы
Pavel
02 ноября 2024, 16:42
0
Спасибо большое за решение, я думаю попробовать его для аренды техники — тоже посуточно.
Правда появились вопросы — везде теперь написано «аренда номера» и надо это как-то мне выпиливать.
И второе — подключается bootstrap и jq которые у меня уже подключены и хотелось бы иметь возможность их отключить ((
Благодарю