Всего 125 671 комментарий

Артур Шевченко
18 декабря 2020, 00:12
0
Я пользуюсь, и скинул скрипт, которым в последнем проекте проверял файлы, но правда не для тикетов, для них мне обязательно нужен только один файл и я его загружаю в отдельное ТВ и для него я сделал отдельное поле на фронте, куда вставляю один из загруженных пользователем файлов и которое проверяю через validate. Вы можете сделать так же, т.е. если нужно чтобы был загружен как минимум один файл сделайте отдельный input и в файле files.js при успешной загрузке вставляйте значение в дополнительный input, и этот input проверяйте в параметре validate.
Антон
18 декабря 2020, 00:10
0
не знаете случаем как поставить минимальное количество загружаемых фото, но не более максимального, установленного в системе?
Антон
17 декабря 2020, 23:24
0
и неужели никто, пользуясь тикетами, никогда не озадачивался вопросом подгружены ли фото в поле или нет? и нет стандартных способов проверки этого всего?
Антон
17 декабря 2020, 23:23
0
если упроститься только до проверки подгруженности определенного количества файлов в поле (поле все-таки мультизагрузочное), что нужно для этого в files.js поправить?
Есть интересный пример сниппета, который проверяет количество файлов (до 3х):
<?php
$output = true;
$count_files = 0; // счётчик файлов
$errorMsg = ''; // сообщение об ошибке
$allowedExt = array('jpg','png'); // разрешённые расширения файлов
$maxFileSize = 512 * 1024; // максимальный размер файла (512 Кбайт)
if (isset($_FILES[$key])) {
  foreach ($_FILES[$key]["error"] as $fkey => $error) {
    if ($error == UPLOAD_ERR_OK) {
      $fileName = basename($_FILES[$key]['name'][$fkey]);
      $fileExt = mb_strtolower(pathinfo($fileName, PATHINFO_EXTENSION));
      $fileSize = filesize($_FILES[$key]['tmp_name'][$fkey]);
      if (!in_array($fileExt, $allowedExt)) {
        if (!empty($errorMsg)) {
          $errorMsg .= '; ';
        }
        $errorMsg .= 'Файл ' . $fileName . ' имеет не разрешённый тип.';
        continue;
      }
      if ($fileSize > $maxFileSize) {
        if (!empty($errorMsg)) {
          $errorMsg .= '; ';
        }
        $errorMsg .= 'Файл '. $fileName .' имеет не разрешённый размер.';
        continue;
      }
      $count_files++; // увеличиваем на 1
    } else {
      if (!empty($errorMsg)) {
        $errorMsg .= '; ';
      }
      $errorMsg .= 'Произошла ошибка при загрузке файла ' . $fileName .' на сервер.';
    }
  }
}
if ($count_files < 3) {
  if (!empty($errorMsg)) {
    $errorMsg .= '; ';
   }
   $errorMsg .= 'К сообщению необходимо прикрепить 3 файла!';
}
if (!empty($errorMsg)) {
  $validator->addError($key,$errorMsg);
  $output = false; // возвращаем false
}
return $output;
но в сочетании files:required:snippet он ни фига не работает
Артур Шевченко
17 декабря 2020, 23:13
0
Я посмотрел, похоже надо исходники править, в шаблоне нет 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('хьюстон у нас проблема');
            }
        });
Антон
17 декабря 2020, 22:18
0
я вставляю в вызов:
[[!TicketForm?
&allowedFields=`parent,profile-status,name,gender,phone,email,location`
&tplFormCreate=`tickets.form.create.tpl`
&tplFormUpdate=`tickets.form.update.tpl`
&redirectUnpublished=`11`
&redirectDeleted=`11`
&tplTicketEmailBcc=`tpl.Tickets.ticket.email.bcc`
&validate=`
pagetitle:required,
 .......
files:required:customValidator`
]]
В саму форму:
<form class="well create" enctype="multipart/form-data" method="post" action="" id="ticketForm">
....
        <div class="file-upload">
		    <div class="ticket-form-files">
		        [[+files]]
		    </div>
		    <span class="error"></span>
	</div>
и беру снипет для проверки нескольких файлов (массива) с

не реагирует вообще никак
Артур Шевченко
17 декабря 2020, 22:11
0
И что? Это input, у него может быть name, а значит его можно записать в validate
'validate' => 'upload:required:customValidator'
Антон
17 декабря 2020, 22:03
0
проблема в том, что [[+files]] — это не TV -шка
Артур Шевченко
17 декабря 2020, 21:14
0
docs.modx.pro/komponentyi/tickets/snippetyi/ticketform последний параметр validate. Там же есть примеры оформления чанка. А сам валидатор можно взять тут.
Тодор
17 декабря 2020, 19:46
+1
Разобрался сам, в правах доступа установил такую галочку
Николай
17 декабря 2020, 19:44
0
Это скорее всего из-за рекламного баннера в самом низу, который подгружается не сразу. Ему бы фиксированную высоту задать
R2m0x94 (Vasily)
17 декабря 2020, 19:26
+4
Когда пролистываешь вниз баг, оказываешься наверху. И такой баг уже довольно давно наблюдается. Спасибо
Николай Савин
17 декабря 2020, 19:12
+2
Данный пост создан в рамках улучшения нашей русскоязычной экосистемы.
В основном сейчас идет плотная работа над минишопом. В рамках этой работы заговорили о документации. Решили ее оптимизировать.
Если будут активные предложения по документации MODX в целом и ее улучшим. Но пока что речь идет о развитии docs.modx.pro и ждем предложений по оптимизации этого ресурса.
Почему ждем и спрашиваем, вместо того чтобы просто взять да сделать? Да на самом деле есть большая проблема. С высоты опыта не очень понятно где именно и о чем не хватает информации. Вроде все понятно и так. Но это заблуждение конечно. Начинающим ребятам нужна более очевидная документация.
Екатерина
17 декабря 2020, 17:29
0
Пользователь MODx не может редактировать даже соседние поля TV не сбросив TV типа image (картинка)

Даже если пользователю через политику разрешено редактирование TV-параметров, но TV типа «картинка» в упор отказываются редактироваться, либо слетает при редактировании других полей, то нужно разрешить ему доступ к Источнику файлов Filesystem:

Контроль доступа -> Группы пользователей -> правой кнопкой мыши на нужной группе -> Редактировать группу пользователей -> Доступ к источнику файлов -> Добавить Filesystem с правами типа хотя бы Media Source User.
Роман
17 декабря 2020, 17:03
0
Да, я тоже так думаю, что не должно, тем более там стоит лимит 20 товаров.
Павел Голубев
17 декабря 2020, 16:49
0
Нужно смотреть explain запроса. Большой IN — не должен тормозить, даже если там тысячи товаров т.к. выбираются значения по первичному ключу.
Сергей
17 декабря 2020, 16:34
0
Почему убираете его? Он вроде как рабочий? Может оставите тогда на бесплатной основе, может кому понадобиться.
Антон Тарасов
17 декабря 2020, 16:13
0
Привет @Иван Бочкарев!

docs.modx.pro/ — про эту.
docs.modx.com/ — тут я, что было в моих силах сделал. Начиная от помощи в процессе переноса на новый сайт, внешним видом сайта, а также перевода на русский.
А можно последние сведения с полей, что там думают наши «западные партнеры» и какая генеральная линия нашей партии, какая для РУ сообщества ветка более перспективная/актуальная? Или двигается по обеим?

В первой преимущественно компоненты минишопа и прочие, созданные нашим сообществом, во второй — труды соратников по экосистеме *modx.com.

Почему спрашиваю — в очередной раз возник «зуд» попереводить, поднакопилось, и для себя и для клиентов… хочется понять, как лучше двигаться, или куда ни напиши — все хорошо?! :)

Что-то мелькало здесь, что-то в чатах, что-то в слаках… Полагаю, для выработки как теперь модно говорить «дорожной карты» и создан этот пост.
Артем
17 декабря 2020, 16:12
0
забыл убрать)
Николай Савин
17 декабря 2020, 16:03
0
Составишь каталог кандидатов в документацию?