Артур Шевченко

Артур Шевченко

Был в сети 4 часа назад
Заказы принимаю
Отправить деньги
Вынужден вас огорчить, провалидиловать поля с таким именем не получится, нужно запараллелить с помощью js cо скрытыми input, у которых будут имена без квадратных скобок, и проверять именно их.
Я пользуюсь, и скинул скрипт, которым в последнем проекте проверял файлы, но правда не для тикетов, для них мне обязательно нужен только один файл и я его загружаю в отдельное ТВ и для него я сделал отдельное поле на фронте, куда вставляю один из загруженных пользователем файлов и которое проверяю через validate. Вы можете сделать так же, т.е. если нужно чтобы был загружен как минимум один файл сделайте отдельный input и в файле files.js при успешной загрузке вставляйте значение в дополнительный input, и этот input проверяйте в параметре validate.
Я посмотрел, похоже надо исходники править, в шаблоне нет inout'а он вставляется динамически, значит надо изобретать велосипед, но более простой вариант проверять на фронте. В этом файле assets/components/tickets/js/web/files.js в районе 107 строки написать примерно так
$('.jsFileInput').change(function () {
            $('.error_photos').text('');
            var input = $(this)[0];
            if (input.files && input.files[0]) {
                if (input.files[0].type.match('image.*')) {
                    var reader = new FileReader();
                    reader.onload = function (e) {
                        $('.jsAvatar').removeClass('no-avatar').css('background-image', 'url("' + e.target.result + '"');
                    }
                    reader.readAsDataURL(input.files[0]);
                } else {
                    $('.error_photos').text('Изображение должно быть одного из следующих форматов: jpg,png,jpeg');
                }
            } else {
                console.log('хьюстон у нас проблема');
            }
        });
Посмотрите есть в плагине переменная id, если есть то смотрите что в ней. Ещё можно посмотреть что в массиве $_POST, какой-то идентификатор ресурса, за который отдают голос, должен быть. И тогда через $modx->getObject получайте этот ресурс и меняйте значение ТВ.<cut/>
Понятно, в логах что-то есть? Вы проверяли плагин вообще отрабатывает? Что в него приходить? Что он отдает? Если нет, то очищаете журнал ошибок, потом меняете код плагина так
switch ($modx->event->name) {
    case "xLikeOnVote":
        $modx->log(1, 'Смотрим что в class пришло ' . $class);
         $modx->log(1, 'Смотрим что в list пришло ' . $list);
        if ($class == 'modResource' && $list == 'default') {
            if ($resource = $modx->getObject($class, array('id' => $parent))) {
                $modx->log(1, 'Проверяем дошли ли мы до этой строки и что в rating ' . $rating);
                $resource->setTVValue('rating', $rating);
                $resource->save();
            }
        }
        break;
}
И смотрите что будет в журнале ошибок после того как отработает плагин.
Заявлялось, о это не точно, что до 10 000 товаров работает нормально, и для нормального отображения важно не только ограничить количество товаров к категории, но и не выводить их все разом на странице, т.е. использовать либо ajax либо пагинацию. Это было про фильтры. Что до mSync, то проблемы могут быть только при первой синхронизации, т.к. хостинг ограничивает время работы скриптов и как правило это 60 сек, а за это время 40 000 товаров не загрузить, поэтому возможно придется делать несколько выгрузок.
Если охота прям заморочиться, тогда
$tv = json_decode($resource->getTVValue('migxtvname'),1);
$tv['date'] = '';
$resource->setTVValue('migxtvname', json_encode($tv, JSON_UNESCAPED_UNICODE));
$resource->save();
Я написал на один элемент, вообще надо конечно в цикле, т.е. $tv это массив и по нему надо пройти в цикле и сравнивать даты и дальше по вашей логике, НО я бы просто сделал отдельный раздел с ресурсами и и использовал возможность автоматического снятия с публикации, на вкладке Настройки любого ресурса есть поле Дата отмены публикации.