Страница 1 из 1

Загрузка файлы пользователем.

СообщениеДобавлено: 05 июл 2013, 12:12
sergio11ofpp
Добрый день нашёл ваш Форум!
Я делаю форму при которой юзер если зарегестрированный создаёт страницу с определёными аттрибутами которые уже созданные(всё делаетс с Ajax + php)
Код: Выделить всё
$dt = Loader::helper('form/date_time'); //Время
$ct = CollectionType::getByHandle('Products'); //выбор Page type
// и массив того что вставлять в новую страницу.
$data = array();
$data['uID'] = 1;
$data['pkgID'] = 0;
$data['cName'] = 'Новая страница';
 $data['cHandle'] = 'novaya_stranica';
 $data['cDatePublic'] = $dt->translate('cDatePublic');


Так потом создаю саму страницу
Код: Выделить всё
$page  = Page::getByPath('/'); //путь рдителя под какую страницу вставлять
$newpage = $page->add($ct, $data); //и сама страница


Далее сразу я присваю ей аттрибуты
Код: Выделить всё
$newpage->setAttribute('city', 'New Yok');
$newpage->setAttribute('category', 'Продукт');


Всё работает всё хорошо моя проблема в том что при добавление мне надо загружать ещё картинку вот тут то и проблема
нашёл вот это
Код: Выделить всё
Loader::library("file/importer");
$fi = new FileImporter();
$newFile = $fi->import($logo_img , 'asd');


Но что то не пашет естьк акие то предложения??? Извините если повторяюсь или не там создал тему! Спасибо!

Re: Загрузка файлы пользователем.

СообщениеДобавлено: 05 июл 2013, 14:44
cmsservice
Загружать картинку куда, на сервер просто или уже имеющуюся на сервере в модуль/атрибут какой-то?

Re: Загрузка файлы пользователем.

СообщениеДобавлено: 05 июл 2013, 15:01
sergio11ofpp
Сначала загрузить в Filemanager а потом присвоить к атрибуту Страницы

Re: Загрузка файлы пользователем.

СообщениеДобавлено: 05 июл 2013, 17:12
cmsservice
С загрузкой мы поступаем вот так:

Код: Выделить всё
if(isset($_FILES['importfile']['tmp_name']) || !is_uploaded_file($_FILES['importfile']['tmp_name'])) {
   $fi = new FileImporter();
   $uploaded = $fi->import($_FILES['importfile']['tmp_name'], $_FILES['importfile']['name']);
   if (!($uploaded instanceof FileVersion)) {
      switch($uploaded) {
      case FileImporter::E_FILE_INVALID_EXTENSION:
         $msg = 'Недопустимый тип файла.';
         break;
      case FileImporter::E_FILE_INVALID:
         $msg = 'Неудачная загрузка файла.';
         break;
      }
   }
}


ну а в атрибут просто присваиваете fID загруженного файла и он там. Понятно, что атрибут должен быть типа Файл :)

Re: Загрузка файлы пользователем.

СообщениеДобавлено: 05 июл 2013, 17:59
sergio11ofpp
Спасибо огромное можешь только одну вещ объяснить:
Это немного не Concrete5 а о PHP
['importfile']['tmp_name'] <---Что сюда вставлять
importfile это velue ы <input type="file" >???(напрмер я выбрал файл value стало C:/fakepath/1.png
или как то наоборот??

Re: Загрузка файлы пользователем.

СообщениеДобавлено: 05 июл 2013, 18:05
cmsservice
'importfile' - имя поля типа файл в Вашей форме. Т.е. у Вас оно может быть другим. И да, не забываем прописывать у формы enctype правильный иначе файл не будет загружен на сервер.

Подробнее тут
Пожалуйста зарегистрируйтесь, чтобы увидеть ссылку
и еще много где, если набрать в поиске что-то типа "загрузка файлов на сервер средствами PHP"

Re: Загрузка файлы пользователем.

СообщениеДобавлено: 05 июл 2013, 18:54
sergio11ofpp
У меня просто немного подргому:
Я не использую форму action Сделал с Ajax ищу по всему инету предлогают плагины просто если честно вот не понимаю когда выбрал файл и нажимаю сабмит
Что передавать PHP пытлася передать value от Input
Код: Выделить всё
C:/fakepath/1.png
Но тоже ничего.
У меня по клику:
Код: Выделить всё
var logo_img = $("#logo_img").val();

Потом
Код: Выделить всё
var dataString = 'logo_img=' + logo_img + '&page=load_page';
$.ajax({
type: 'POST',
 url: '<?php echo $tools_url_product ; ?>',
 data: dataString,
 beforeSend: function(){
   $('#here').html('loading');
        },
   success: function(response){
      $('#here').fadeIn().html(response);                        
     }
});


А в PHP

Код: Выделить всё
if(isset($_FILES['logo_img']['name']) || !is_uploaded_file($_FILES['logo_img']['name'])) {
            $fi = new FileImporter();
            $uploaded = $fi->import($_FILES['logo_img']['name'], $_FILES['logo_img']['name']);
            if (!($uploaded instanceof FileVersion)) {
               switch($uploaded) {
               case FileImporter::E_FILE_INVALID_EXTENSION:
                  $msg = 'Недопустимый тип файла.';
                  break;
               case FileImporter::E_FILE_INVALID:
                  $msg = 'Неудачная загрузка файла.';
                  break;
               }
            }
         }


Но я так понимаю это не так делается))

Re: Загрузка файлы пользователем.

СообщениеДобавлено: 05 июл 2013, 21:43
cmsservice
Понятно. Так не будет работать, путь который Вы тягаете из контрола это просто строка, а при отправке формы происходит взаимодействие браузера с веб-сервером для физической передачи файла на сервер, Ваши скрипты не имеют доступа к этому процессу. :)

Совет: используйте JQuery Form Plugin (входит в поставку Concrete5) для отправки формы по Ajax. Метод надежный, мы пользуемся часто. Вот тут как раз
Пожалуйста зарегистрируйтесь, чтобы увидеть ссылку
написано о том, как загрузку файлов с его помощью делать.

Re: Загрузка файлы пользователем.

СообщениеДобавлено: 06 июл 2013, 14:30
sergio11ofpp
Спасибо !! ЗА ваше время)

Re: Загрузка файлы пользователем.

СообщениеДобавлено: 06 июл 2013, 21:34
cmsservice
Обращайтесь, тем, кто пытается сам что-то делать, я всегда рад помочь.