Загрузка файла с записью в БД
        Здравствуйте.
Сделал форму, которая отправляет данные в отдельную таблицу БД. Форма работает с помощью 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/
                Спасибо!
            
                    
                Не за что!            
                    
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.