ТВ "Прикрепить файл" в Tickets
Пытаюсь реализовать загрузку картинок при создании тикета. Данная тема уже поднималась, но с тех пор и Tickets изменился и ТВ у него появились, да и запустить предложенное там решение я не смог.
Есть конечно платное решение Uploadify, но оно не позволяет загружать картинки со страницы создания тикета, что мне не подходит.
Промониторив интернет я кое-что сделал, но то, что получилось не корректно работает.
1. Картинка при публикации тикета грузится на сервер, но в ТВ поле отсутствует путь.
а должно быть так:
2. При отправке тикета не срабатывает редирект, а кнопка Отправить просто перестает быть активной
Что я делал:
1. Создал ТВ image с параметром ввода Файл.
2. В чанке: tpl.Tickets.form.create в тег form добавил атрибут enctype=«multipart/form-data», а так же вставил поле
3. Создал плагин на событие OnDocFormSave.
Код плагина взял из сниппета formit2file который гуляет по MODX форумам.
Есть конечно платное решение 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;
Уважаемые друзья, дайте совет, наводку, рецепт, что бы довести до ума задуманное? Комментарии: 14
У меня в планах есть интеграция Tickets и Uploadify, но пока некогда.
А у тебя, скорее всего, просто какой-то трабл при передаче данных в ТВ. Попробуй просто что-то указать туда, без загрузки файла. Если сохранится — копай дальше в эту сторону.
А у тебя, скорее всего, просто какой-то трабл при передаче данных в ТВ. Попробуй просто что-то указать туда, без загрузки файла. Если сохранится — копай дальше в эту сторону.
А с msGallery как-то можно реализовать такое? Чтобы с фронтенда добавлять можно было
Нет.
Василий, спасибо за совет!
Василий, я нашел свою ошибку. При вызове не прописал ТВ image.
То есть, type=«text» — пропускает, а type=«file» — нет.
Провел различные эксперименты и понимаю, что в Тикете стоит где-то запрет на загрузку файлов, Василий такое возможно?
[[!TicketForm?
&allowedFields=`image,published`
&requiredFields=`image`
]]
Но сейчас проблема в том, что Тикет жалуется на поле input type=«file» и пишет ошибку: " В форме содержатся ошибки. Пожалуйста, исправьте их.". То есть, type=«text» — пропускает, а type=«file» — нет.
Провел различные эксперименты и понимаю, что в Тикете стоит где-то запрет на загрузку файлов, Василий такое возможно?
Нет, невозможно.
1. Укажи в форме
2. Проверяй, всё-таки, что приходит в $_POST['image'], по идее там должно быть имя файла, но вдруг оно и правда пустое? Потому что загружаемый файл попадает в массив $_FILES.
Меня уже запарили высказывания «В xx где-то стоит запрет на загрузку yy». Блин, исходники открыты — ищите эти запреты.
1. Укажи в форме
<form enctype="multipart/form-data">
2. Проверяй, всё-таки, что приходит в $_POST['image'], по идее там должно быть имя файла, но вдруг оно и правда пустое? Потому что загружаемый файл попадает в массив $_FILES.
Меня уже запарили высказывания «В xx где-то стоит запрет на загрузку yy». Блин, исходники открыты — ищите эти запреты.
Провел эксперименты с подключением к Tickets ТВ полей и пришел к выводам.
1. Тикет не допускает отправку пустых полей, даже если поле текстовое и не обязательное для заполнения пользователем.
2. Тикет воспринимает поля checkbox, file как пустые поля и даже если они заполнены он не отправляет форму.
1. Тикет не допускает отправку пустых полей, даже если поле текстовое и не обязательное для заполнения пользователем.
2. Тикет воспринимает поля checkbox, file как пустые поля и даже если они заполнены он не отправляет форму.
При отправке проверяется только поле content, все остальное отправлется как есть.
Возможно, не проходит проверку, но форма то отправляется.
В общем, или собирай и показывай на тестовом сайте, или разбирайся дальше сам.
Возможно, не проходит проверку, но форма то отправляется.
В общем, или собирай и показывай на тестовом сайте, или разбирайся дальше сам.
Ок, спасибо, соберу из всего свежего и покажу!
У вас что-то получилось в итоге?
Сейчас это не актуально. Василий, доработал Тикеты и они из коробки умеют работать с файлами.
Подскажи как из коробки прицепить Изображение к TV?
ломаю голову над подобной же ситуацией. Файл летит на сервер, но не отображается в TV в самом документе. Тив ввода выбран файл. Вам удалось победить эту тему?
К сожалению нет, не удалось
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.