ТВ "Прикрепить файл" в 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
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
А у тебя, скорее всего, просто какой-то трабл при передаче данных в ТВ. Попробуй просто что-то указать туда, без загрузки файла. Если сохранится — копай дальше в эту сторону.
Но сейчас проблема в том, что Тикет жалуется на поле input type=«file» и пишет ошибку: " В форме содержатся ошибки. Пожалуйста, исправьте их.".
То есть, type=«text» — пропускает, а type=«file» — нет.
Провел различные эксперименты и понимаю, что в Тикете стоит где-то запрет на загрузку файлов, Василий такое возможно?
1. Укажи в форме
2. Проверяй, всё-таки, что приходит в $_POST['image'], по идее там должно быть имя файла, но вдруг оно и правда пустое? Потому что загружаемый файл попадает в массив $_FILES.
Меня уже запарили высказывания «В xx где-то стоит запрет на загрузку yy». Блин, исходники открыты — ищите эти запреты.
1. Тикет не допускает отправку пустых полей, даже если поле текстовое и не обязательное для заполнения пользователем.
2. Тикет воспринимает поля checkbox, file как пустые поля и даже если они заполнены он не отправляет форму.
Возможно, не проходит проверку, но форма то отправляется.
В общем, или собирай и показывай на тестовом сайте, или разбирайся дальше сам.