Всего 125 683 комментария

Александр Лунегов
19 декабря 2020, 07:35
0
Попробую объяснить.

Раньше MODX, выводя дополнительные поля данных пользователя (Extended User Profiles), «украшал» значения курсивом (добавлял тег <i></i>).


А сейчас он перед выводом зачем-то этот тег экранирует.
Артур Шевченко
18 декабря 2020, 23:46
0
Не редиректит на оплату, потому что в коде этого нет. Вы же не стали расширять класс msOrderHandler, а написали свой сниппет или плагин, который создает объект msOrder, но не использует стандартный класс. Вообще это можно сделать проще. Если быстрый заказ работает для одного товара на просто отправить POST-запрос
$.post(document.location.href, {'ms2_action':'cart/add', 'id': product_id, 'ctx':'web', 'count':1},function(response){
response = JSON.parse(response);
if(response.success){
$.post(document.location.href, {'ms2_action':'order/create', 'id': product_id, 'ctx':'web', 'count':1},function(response){});
}
});
Если нужно предварительно очищать корзину, то обернуть всё в ещё один запрос 'cart/clean', ну и в :'order/create' там больше данных передавать надо, можно всю форму целиком, главное чтобы поля были правильно названы.

И вот ещё вариант modstore.pro/packages/integration/msoneclick )))
Артур Шевченко
18 декабря 2020, 23:30
0
Вызывать pdoArchive два раза: первый раз для вывода управления табами, второй для вывода содержимого.
Артур Шевченко
18 декабря 2020, 23:23
+1
Вынужден вас огорчить, провалидиловать поля с таким именем не получится, нужно запараллелить с помощью js cо скрытыми input, у которых будут имена без квадратных скобок, и проверять именно их.
Антон Тарасов
18 декабря 2020, 18:11
0
Есть такое, подтверждаю!
Miša Bulic
18 декабря 2020, 16:03
0


т.е даже если не было никаких изменений, он всегда выскакивает
Miša Bulic
18 декабря 2020, 15:42
+1
Поправьте пожалуйста кнопку вверх в админке, когда товар редактируешь. Даже сразу после сохранения товара он предупреждает что данные будут потеряны. Очень неудобно
Alexandr
18 декабря 2020, 12:01
0
Извиняюсь за беспокойство, нашёл в чем причина была. Не внимательно прочитал мануал. Необходимо было изменить настройки lastmodified.prevent_session и lastmodified.response. Всё заработало, всем спасибо!
Alexandr
18 декабря 2020, 10:38
0
Доброго времени суток. У меня данный плагин так и не заработал. На хостинге SSI отключен. В чем может быть проблема?
Артур Шевченко
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 -шка