Загрузка файла с записью в БД
Здравствуйте.
Сделал форму, которая отправляет данные в отдельную таблицу БД. Форма работает с помощью AjaxForm и своего сниппета. Запись в БД идет с помощью своего класса, самого простейшего:
1. У меня в моей таблице присутствует поле createdon — туда нужно писать дате записи данных. Какую функцию использовать для этого в классе?
2. Самый важный и для меня пока сложный момент — у меня есть поле для загрузки фото. Как мне сделать, чтобы фото загружалось из процессора, на данный момент у меня все работает просто PHP скриптом. Начитался, что можно подвязать FileAttach для загрузки с фронта, но вот как не совсем пойму…
3. И дополнительно к предыдущему пункту — как сделать, чтобы одновременно с закачкой файла, происходила запись пути к нему в поле моей таблицы?
Сделал форму, которая отправляет данные в отдельную таблицу БД. Форма работает с помощью AjaxForm и своего сниппета. Запись в БД идет с помощью своего класса, самого простейшего:
<?php
class ZPSCreateProcessor extends modObjectCreateProcessor {
public $classKey = 'ZPS';
public $objectType = 'object';
public function beforeSet() {
if (!$this->modx->user->id) return 'Вам нужно авторизоваться';
$this->setProperty('uid', $this->modx->user->id);
return true;
}
}
return 'ZPSCreateProcessor';
Но у меня ряд примитивных вопросов, прошу помощи разобраться или ткните носом, где почитать:1. У меня в моей таблице присутствует поле createdon — туда нужно писать дате записи данных. Какую функцию использовать для этого в классе?
2. Самый важный и для меня пока сложный момент — у меня есть поле для загрузки фото. Как мне сделать, чтобы фото загружалось из процессора, на данный момент у меня все работает просто PHP скриптом. Начитался, что можно подвязать FileAttach для загрузки с фронта, но вот как не совсем пойму…
3. И дополнительно к предыдущему пункту — как сделать, чтобы одновременно с закачкой файла, происходила запись пути к нему в поле моей таблицы?
Комментарии: 20
Сорри, не готов дать подробный ответ на все эти вопросы, но может быть вам эта статья поможет: modxclub.ru/topics/vse-chto-vyi-xoteli-znat-o-proczessorax-no-boyalis-sprosit-1563.html
Николай, спасибо. Отличная статья. Буду разбираться. Но не откажусь и от помощи дополнительной))
Не за что.
Ну, сегодня запустим новый публичный канал для общения, спросите, может кто и подскажет что.
Ну, сегодня запустим новый публичный канал для общения, спросите, может кто и подскажет что.
Хорошо, скинете ссылочку)
ОК
Николай, прочитав статью, вроде стал понимать немного принцип работы с процессорами. но вот есть несколько вопросов. если не затруднит, ответьте коротенько хотя бы):
1. В моем процессоре есть
2. Также есть метод process(). Если я правильно понял, в него нужно расписать логику работы. То есть здесь я должен написать код, который загрузит фото мне на сервер и добавит путь к изображению в поле таблицы?
3. Или мне проще вызвать в своем сниппете другой процессор (к примеру класс upload от компонента FileAttach)? передав ему нужные параметры (ctx, docid, file)? как требуется в этом посте для загрузки фото с фронта.
1. В моем процессоре есть
public function beforeSet() {
if (!$this->modx->user->id) return 'Вам нужно авторизоваться';
$this->setProperty('uid', $this->modx->user->id);
return true;
}
Не совсем понимаю принцип его работы. Что делает этот метод?2. Также есть метод process(). Если я правильно понял, в него нужно расписать логику работы. То есть здесь я должен написать код, который загрузит фото мне на сервер и добавит путь к изображению в поле таблицы?
3. Или мне проще вызвать в своем сниппете другой процессор (к примеру класс upload от компонента FileAttach)? передав ему нужные параметры (ctx, docid, file)? как требуется в этом посте для загрузки фото с фронта.
Не совсем понимаю принцип его работы. Что делает этот метод?Вообще он используется в create/update — процессорах, но здесь он не правильно используется для проверки авторизован пользователь или нет. Как минимум это надо вынести в initialize(), а лучше public
function checkPermissions() {
return $this->modx->user->id && parent::checkPermissions();
}
Но checkPermissions не возвращает просто так кастомные сообщения, так что лучше в initialize().2. Да.
3. Я не работал с fileAttach. Но вы можете его внимательней изучить и расширить его же процессор, дополнив собственной логикой. А можете как есть в своем сниппете вызвать.
Спасибо за пояснения. А есть какой-то родной процессор для загрузки файлов в MODX?
Смотрите папку процессоров MODX-а. В админке же можно файлы загружать, значит конечно же есть joxi.ru/eAOqaVNfx9GZEm
Там все через процессоры делается.
Там все через процессоры делается.
А второй процессор вызывается просто дублированием?
Вот код моего класса
$response = $modx->runProcessor($processor, $_POST, $processorProps);
Или можно сразу передать массив параметров, вместо предыдущей записи написать так:$response = $modx->runProcessor($processor, array(
$_POST,
$_FILES,
), $processorProps);
А уже в моем процессоре манипулировать с ними? У меня почему-то 500 ошибка получается при таких раскладах, если я пытаюсь передать два маасива, то все уходит. print_r($this->getProperties());
показываетArray
(
[0] => Array
(
[uid] => 3
[type] => Физическое лицо
[name] => asda
[description] => asdad
[pageId] => 1
)
[1] => Array
(
[photo] => Array
(
[name] => 001.jpg
[type] => image/jpeg
[tmp_name] => /tmp/phpIkrhV6
[error] => 0
[size] => 567169
)
)
)
но с таким кодом получаю 500 ошибку в итоге:Вот код моего класса
<?php
class ZPSCreateProcessor extends modObjectCreateProcessor {
public $classKey = 'ZPS';
public $objectType = 'object';
public function beforeSet() {
if (!$this->modx->user->id) return 'Вам нужно авторизоваться';
$this->setProperty('uid', $this->modx->user->id);
return true;
}
public function process() {
$path = ('путь к папке для загрузки');
$success = $this->source->uploadObjectsToContainer($path,$_FILES);
}
}
return 'ZPSCreateProcessor';
Для объединения массивов есть функция array_merge(). $response = $modx->runProcessor($processor, array_merge(
$_POST,
$_FILES,
), $processorProps)
Но $_FILES обычно не передают, с ним как есть работают.
$_POST,
$_FILES,
), $processorProps)
Но $_FILES обычно не передают, с ним как есть работают.
Но $_FILES обычно не передают, с ним как есть работают.В смысле не передают? Или вы имели ввиду не объединяют?
Не передают в процессор параметрами. Внутри процессора напрямую с $_FILES работают.
ааа, спасибо.
А по этому моему вопросу подскажите пожалуйста)
А по этому моему вопросу подскажите пожалуйста)
А второй процессор вызывается просто дублированием?
Андрей, я и так уже много подсказал. В сети полно информации, изучайте.
Пытаюсь, но такие мелочи вгоняют меня в ступор)
Мелочей всегда будет полно. И чем больше вы будете искать самостоятельно, тем лучше потом будете понимать. Нельзя на каждую мелочь вопросы задавать.
Хорошо, скинете ссылочку)modxclub.ru/
Спасибо!
Не за что!
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.