Как сделать мультиаплоад файлов?

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
dmitrijbelikov
Сообщения: 92
Зарегистрирован: 2011.08.10, 13:42

Как сделать мультиаплоад файлов?

Сообщение dmitrijbelikov »

Нужно чтобы можно было добавить 1 файл, но по желанию если кликнуть на соотвествующую кнопку то выдаст ещё одно поле для загрузки файла

Вот такую вот функцию использую в модели Post:

Код: Выделить всё

public function uploadDocumentFile () {
            $this->docfile = CUploadedFile::getInstance($this, 'docfile');
            if(!empty ($this->docfile)) {
                $this->_file_doc_name = 'f_'.time().'.'.$this->docfile->getExtensionName();
                $pathtodoc = '\files\upload\\'.$this->_file_doc_name;
                $this->docfile->saveAs(Yii::app()->getBasePath().$pathtodoc);
            }
            return $this->_file_doc_name;
        }
 
А вот так она работает в одноимённом контроллере в actionCreate:

Код: Выделить всё

$model=new Post;
        if(isset($_POST['Post']))
        {
            $model->attributes=$_POST['Post'];
                        if($model->save()) {
                                $model->uploadDocumentFile();
                $this->redirect(array('view','id'=>$model->id));
                        }
        }
 
Johnatan
Сообщения: 167
Зарегистрирован: 2010.10.27, 13:06
Откуда: Reino de España

Re: Как сделать мультиаплоад файлов?

Сообщение Johnatan »

Я понимаю, что возможно не по теме, но всё-таки.. Чем не устраивают существующие решения?
http://www.yiiframework.com/extension/eajaxupload
http://www.yiiframework.com/extension/xupload/
http://www.yiiframework.com/extension/lcswfupload/
Конференция: yii@conference.jabber.ru
dmitrijbelikov
Сообщения: 92
Зарегистрирован: 2011.08.10, 13:42

Re: Как сделать мультиаплоад файлов?

Сообщение dmitrijbelikov »

Решения норм, тока надо чтобы файлы в базу ещё прописывались, чтобы их потом выдёргивать
chang
Сообщения: 125
Зарегистрирован: 2010.12.03, 20:01

Re: Как сделать мультиаплоад файлов?

Сообщение chang »

viewtopic.php?f=9&t=2689
но для работы с флеш-загрузчиками нужно допиливать
Аватара пользователя
coder
Сообщения: 139
Зарегистрирован: 2010.04.09, 23:42
Откуда: Москва

Re: Как сделать мультиаплоад файлов?

Сообщение coder »

dmitrijbelikov писал(а):Решения норм, тока надо чтобы файлы в базу ещё прописывались, чтобы их потом выдёргивать
Проблемы нет, я, например, загружаю файлы во временную папку. Расширения, позволяют делать обработчики загрузки через javascript, таким образом, если файл загружен успешно, то через javascript я создаю hidden-поля, куда вписываю имена файлов. И далее в модели, в afterSave(), если переданы имена файлов и файлы физически присутствуют на диске, то перемещаю в нужную папку и делаю соответствующие запросы к базе данных.
chang
Сообщения: 125
Зарегистрирован: 2010.12.03, 20:01

Re: Как сделать мультиаплоад файлов?

Сообщение chang »

гы, ток дошло что фигню в предыдущем посте написал
а так то да, временная папка + hidden-поля + afterSave/beforeSave
dmitrijbelikov
Сообщения: 92
Зарегистрирован: 2011.08.10, 13:42

Re: Как сделать мультиаплоад файлов?

Сообщение dmitrijbelikov »

А если не турдно напишите пример кода, а то я не соображу - я зелёный ещё в Yii.
Johnatan
Сообщения: 167
Зарегистрирован: 2010.10.27, 13:06
Откуда: Reino de España

Re: Как сделать мультиаплоад файлов?

Сообщение Johnatan »

Вам просто искать лень?
http://yiiframework.ru/doc/cookbook/ru/form.file.upload
Конференция: yii@conference.jabber.ru
Аватара пользователя
coder
Сообщения: 139
Зарегистрирован: 2010.04.09, 23:42
Откуда: Москва

Re: Как сделать мультиаплоад файлов?

Сообщение coder »

dmitrijbelikov писал(а):А если не турдно напишите пример кода.
Можно лишь указать дверь, но войти в неё вы должны сами )
dmitrijbelikov
Сообщения: 92
Зарегистрирован: 2011.08.10, 13:42

Re: Как сделать мультиаплоад файлов?

Сообщение dmitrijbelikov »

Окей :-) Спасибо
dmitrijbelikov
Сообщения: 92
Зарегистрирован: 2011.08.10, 13:42

Re: Как сделать мультиаплоад файлов?

Сообщение dmitrijbelikov »

Подскажите пожалуйста в чём ошибка? Файл сохраняется как надо в папку, но в БД ничего не сохраняет, в модели реализован beforeSave как вы и сказали, понять не могу в чём дело - вроде всё должно рабоатать, но....

Код: Выделить всё

if(isset($_POST['Post']))
        {
            $model->attributes=$_POST['Post'];
                        
                        $documents = CUploadedFile::getInstancesByName('documents');
                        if(isset($documents) && count($documents) > 0) {
                            /*if(!is_dir(Yii::getPathOfAlias('webroot').'/images/'. $model->id)) {
                                   mkdir(Yii::getPathOfAlias('webroot').'/images/'.$model->id);
                                   chmod(Yii::getPathOfAlias('webroot').'/images/'. $model->id, 0755); 
                                   
                            }*/
                            foreach ($documents as $document => $file) {
                                
                                if($file->saveAs(Yii::getPathOfAlias('webroot').'/images/'.md5($file->name).'.'.$file->extensionName)) {
                                    $filemodel = File::model();
                                    $filemodel->post_id = $model->id;
                                    $filemodel->save();
                                }
                            }
                            if($model->save()) {
                                  $this->redirect(array('view','id'=>$model->id));
                            }
                        }
                        /*if($model->save()) {
                                $model->uploadDocumentFile();
                $this->redirect(array('view','id'=>$model->id));
                        }*/
        } 
dmitrijbelikov
Сообщения: 92
Зарегистрирован: 2011.08.10, 13:42

Re: Как сделать мультиаплоад файлов?

Сообщение dmitrijbelikov »

Ошибка заключается видимо в том, что он не видит модель, а должен..
Johnatan
Сообщения: 167
Зарегистрирован: 2010.10.27, 13:06
Откуда: Reino de España

Re: Как сделать мультиаплоад файлов?

Сообщение Johnatan »

Где присваиваете $model?
Конференция: yii@conference.jabber.ru
Ответить