ТВ "Прикрепить файл" в Tickets

Пытаюсь реализовать загрузку картинок при создании тикета. Данная тема уже поднималась, но с тех пор и Tickets изменился и ТВ у него появились, да и запустить предложенное там решение я не смог.

Есть конечно платное решение Uploadify, но оно не позволяет загружать картинки со страницы создания тикета, что мне не подходит.

Промониторив интернет я кое-что сделал, но то, что получилось не корректно работает.

1. Картинка при публикации тикета грузится на сервер, но в ТВ поле отсутствует путь.

а должно быть так:


2. При отправке тикета не срабатывает редирект, а кнопка Отправить просто перестает быть активной


Что я делал:

1. Создал ТВ image с параметром ввода Файл.
2. В чанке: tpl.Tickets.form.create в тег form добавил атрибут enctype=«multipart/form-data», а так же вставил поле
<input type="file" name="image">
.
3. Создал плагин на событие OnDocFormSave.
Код плагина взял из сниппета formit2file который гуляет по MODX форумам.
<?php
    // initialize output;
    $output = true;
    $counter = 1;
    // valid extensions
    $ext_array = array('jpg', 'png', 'gif', 'JPG', 'mp3');
    $mydir = $modx->user->get('id'); // Path from root that user specifies
    // create unique path for this form submission
    $uploadpath = 'assets/uploads/'.$mydir.'/';
    // get full path to unique folder
    $target_path = $modx->config['base_path'] . $uploadpath;
    // get uploaded file names:
    $submittedfiles = array_keys($_FILES);
    // loop through files
    foreach ($submittedfiles as $sf) {
    // Get Filename and make sure its good.
    $filename = basename( $_FILES[$sf]['name'] );
    // Get file's extension
    $ext = pathinfo($filename, PATHINFO_EXTENSION);
    $ext = mb_strtolower($ext); // case insensitive
    // is the file name empty (no file uploaded)
    if($filename != '') {
    // is this the right type of file?
    if(in_array($ext, $ext_array)) {
    // clean up file name and make unique
    $filename = $counter . '.' . $ext;
    $filename = str_replace(' ', '_', $filename); // spaces to underscores
    $filename = date("Y-m-d_G-i-s_") . $filename; // add date & time
    // full path to new file
    $myTarget = $target_path . $filename;
    // create directory to move file into if it doesn't exist
    mkdir($target_path, 0755, true);
    // is the file moved to the proper folder successfully?
    if(move_uploaded_file($_FILES[$sf]['tmp_name'], $myTarget)) {
    // set a new placeholder with the new full path (if you need it in subsequent hooks)
    $myFile = $uploadpath . $filename;
    $hook->setValue($sf,$myFile);
    // set the permissions on the file
    if (!chmod($myTarget, 0644)) { /*some debug function*/ }
    } else {
    // File not uploaded
    $errorMsg = 'There was a problem uploading the file.';
    $hook->addError($sf, $errorMsg);
    $output = false; // generate submission error
    }
    } else {
    // File type not allowed
    $errorMsg = 'Type of file not allowed.';
    $hook->addError($sf, $errorMsg);
    $output = false; // generate submission error
    }
    // if no file, don't error, but return blank
    } else {
    $hook->setValue($sf, '');
    }
    $counter = $counter + 1;
    }
    return $output;
Уважаемые друзья, дайте совет, наводку, рецепт, что бы довести до ума задуманное?
Александр Наумов
18 декабря 2013, 09:01
modx.pro
2
2 855
0

Комментарии: 14

Василий Наумкин
18 декабря 2013, 14:24
0
У меня в планах есть интеграция Tickets и Uploadify, но пока некогда.

А у тебя, скорее всего, просто какой-то трабл при передаче данных в ТВ. Попробуй просто что-то указать туда, без загрузки файла. Если сохранится — копай дальше в эту сторону.
    Дмитрий Кондаков
    18 декабря 2013, 14:36
    0
    А с msGallery как-то можно реализовать такое? Чтобы с фронтенда добавлять можно было
    Александр Наумов
    18 декабря 2013, 23:34
    0
    Василий, спасибо за совет!
      Александр Наумов
      19 декабря 2013, 02:40
      0
      Василий, я нашел свою ошибку. При вызове не прописал ТВ image.
      [[!TicketForm?
          &allowedFields=`image,published`
          &requiredFields=`image`
      ]]
      Но сейчас проблема в том, что Тикет жалуется на поле input type=«file» и пишет ошибку: " В форме содержатся ошибки. Пожалуйста, исправьте их.".
      То есть, type=«text» — пропускает, а type=«file» — нет.

      Провел различные эксперименты и понимаю, что в Тикете стоит где-то запрет на загрузку файлов, Василий такое возможно?
        Василий Наумкин
        19 декабря 2013, 08:53
        0
        Нет, невозможно.

        1. Укажи в форме
        <form enctype="multipart/form-data">

        2. Проверяй, всё-таки, что приходит в $_POST['image'], по идее там должно быть имя файла, но вдруг оно и правда пустое? Потому что загружаемый файл попадает в массив $_FILES.

        Меня уже запарили высказывания «В xx где-то стоит запрет на загрузку yy». Блин, исходники открыты — ищите эти запреты.
          Александр Наумов
          19 декабря 2013, 21:09
          0
          Провел эксперименты с подключением к Tickets ТВ полей и пришел к выводам.

          1. Тикет не допускает отправку пустых полей, даже если поле текстовое и не обязательное для заполнения пользователем.

          2. Тикет воспринимает поля checkbox, file как пустые поля и даже если они заполнены он не отправляет форму.
            Василий Наумкин
            19 декабря 2013, 21:38
            0
            При отправке проверяется только поле content, все остальное отправлется как есть.
            Возможно, не проходит проверку, но форма то отправляется.

            В общем, или собирай и показывай на тестовом сайте, или разбирайся дальше сам.
              Александр Наумов
              19 декабря 2013, 21:59
              0
              Ок, спасибо, соберу из всего свежего и покажу!
                Ruslan Butakov
                22 марта 2015, 23:50
                0
                У вас что-то получилось в итоге?
                  Александр Наумов
                  23 марта 2015, 23:28
                  0
                  Сейчас это не актуально. Василий, доработал Тикеты и они из коробки умеют работать с файлами.
                    brioni
                    21 февраля 2016, 16:01
                    -1
                    Подскажи как из коробки прицепить Изображение к TV?
                      Антон
                      26 июля 2022, 22:18
                      0
                      ломаю голову над подобной же ситуацией. Файл летит на сервер, но не отображается в TV в самом документе. Тив ввода выбран файл. Вам удалось победить эту тему?
                        brioni
                        27 июля 2022, 13:03
                        0
                        К сожалению нет, не удалось
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        14