• Как поместить массив в input type = file?

    @AlexWeb6667 Автор вопроса
    Можно странный вопрос, в JS не рулю особо, по этому даже уровня глупости вопроса не понимаю)) Вот в этом коде (со статьи который) автор собирает все что в первью пользователь накликал в массив dataArray. Че он туда насобирал? Это обьекты? или пути к файлам или их названия? Короче суть вопроса, могу ли я с тем что передал AJAX-ом(dataArray) работать в php контроллере, сохранить изображения в папку?
    // В dataTransfer помещаются изображения которые перетащили в область div
               jQuery.event.props.push('dataTransfer');
    
               // Максимальное количество загружаемых изображений за одни раз
               var maxFiles = 5;
    
               // Оповещение по умолчанию
               var errMessage = 0;
    
               // Кнопка выбора файлов
               var defaultUploadBtn = $('#uploadbtn');
    
               // Массив для всех изображений
               var dataArray = [];
    
               // Область информер о загруженных изображениях - скрыта
               $('#uploaded-files').hide();
    
               // Метод при падении файла в зону загрузки
               $('#drop-files').on('drop', function(e) {
                   // Передаем в files все полученные изображения
                   var files = e.dataTransfer.files;
                   // Проверяем на максимальное количество файлов
                   if (files.length <= maxFiles) {
                       // Передаем массив с файлами в функцию загрузки на предосмотр
                       loadInView(files);
                   } else {
                       alert('Вы не можете загружать больше '+maxFiles+' изображений!');
                       files.length = 0; return;
                   }
               });
    
    // Функция загрузки изображений на предросмотр
               function loadInView(files) {
                   // Показываем обасть предпросмотра
                   $('#uploaded-holder').show();
    
                   // Для каждого файла
                   $.each(files, function(index, file) {
    
                       // Несколько оповещений при попытке загрузить не изображение
                       if (!files[index].type.match('image.*')) {
    
                           if(errMessage == 0) {
                               $('#drop-files p').html('Эй! только изображения!');
                               ++errMessage
                           }
                           else if(errMessage == 1) {
                               $('#drop-files p').html('Стоп! Загружаются только изображения!');
                               ++errMessage
                           }
                           else if(errMessage == 2) {
                               $('#drop-files p').html("Не умеешь читать? Только изображения!");
                               ++errMessage
                           }
                           else if(errMessage == 3) {
                               $('#drop-files p').html("Хорошо! Продолжай в том же духе");
                               errMessage = 0;
                           }
                           return false;
                       }
    
                       // Проверяем количество загружаемых элементов
                       if((dataArray.length+files.length) <= maxFiles) {
                           // показываем область с кнопками
                           $('#upload-button').css({'display' : 'block'});
                       }
                       else { alert('Вы не можете загружать больше '+maxFiles+' изображений!'); return; }
    
                       // Создаем новый экземпляра FileReader
                       var fileReader = new FileReader();
                       // Инициируем функцию FileReader
                       fileReader.onload = (function(file) {
    
                           return function(e) {
                               // Помещаем URI изображения в массив
                               dataArray.push({name : file.name, value : this.result});
                               addImage((dataArray.length-1));
                           };
    
                       })(files[index]);
                       // Производим чтение картинки по URI
                       fileReader.readAsDataURL(file);
                   });
                   return false;
               }
    
    // Процедура добавления эскизов на страницу
               function addImage(ind) {
                   // Если индекс отрицательный значит выводим весь массив изображений
                   if (ind < 0 ) {
                       start = 0; end = dataArray.length;
                   } else {
                       // иначе только определенное изображение
                       start = ind; end = ind+1; }
                   // Оповещения о загруженных файлах
                   if(dataArray.length == 0) {
                       // Если пустой массив скрываем кнопки и всю область
                       $('#upload-button').hide();
                       $('#uploaded-holder').hide();
                   } else if (dataArray.length == 1) {
                       $('#upload-button span').html("Был выбран 1 файл");
                   } else {
                       $('#upload-button span').html(dataArray.length+" файлов были выбраны");
                   }
                   // Цикл для каждого элемента массива
                   for (i = start; i < end; i++) {
                       // размещаем загруженные изображения
                       if($('#dropped-files > .image').length <= maxFiles) {
                           $('#dropped-files').append('<div id="img-'+i+'" class="image" style="background: #292929 url('+dataArray[i].value+') center center no-repeat; background-size: contain;"> <a href="#" id="drop-'+i+'" class="drop-button"></a></div>');
                       }
                   }
                   return false;
               }
    
    // Загрузка изображений на сервер
               $('.btn-success').click(function() {
    
                   
                   // Показываем прогресс бар
                   $("#loading").show();
                   // переменные для работы прогресс бара
                   var totalPercent = 100 / dataArray.length;
                   var x = 0;
                   
                   $('#loading-content').html('Загружен '+dataArray[0].name);
                   // Для каждого файла
                   $.each(dataArray, function(index, file) {
                       // загружаем страницу и передаем значения, используя HTTP POST запрос
                       $.post('/main/test', dataArray[index], function(data) {
    
    
                           var fileName = dataArray[index].name;
                           ++x;
    
                           // Изменение бара загрузки
                           $('#loading-bar .loading-color').css({'width' : totalPercent*(x)+'%'});
                           // Если загрузка закончилась
                           if(totalPercent*(x) == 100) {
                               // Загрузка завершена
                               $('#loading-content').html('Загрузка завершена!');
    
                               // Вызываем функцию удаления всех изображений после задержки 1 секунда
                               setTimeout(restartFiles, 1000);
                               // если еще продолжается загрузка
                           } else if(totalPercent*(x) < 100) {
                               // Какой файл загружается
                               $('#loading-content').html('Загружается '+fileName);
                           }
    
                           // Формируем в виде списка все загруженные изображения
                           // data формируется в upload.php
                           var dataSplit = data.split(':');
                           if(dataSplit[1] == 'загружен успешно') {
                               $('#uploaded-files').append('<li><a href="images/'+dataSplit[0]+'">'+fileName+'</a> загружен успешно</li>');
    
                           } else {
                               $('#uploaded-files').append('<li><a href="images/'+data+'. Имя файла: '+dataArray[index].name+'</li>');
                           }
    
                           $('.ava_big_container').html(data);
    
                       });
                   });
                   // Показываем список загруженных файлов
                   $('#uploaded-files').show();
                   return false;
               });
  • Как поместить массив в input type = file?

    @AlexWeb6667 Автор вопроса
    Да, а это что-то меняет?
  • Почему не всегда срабатывает toggleClass?

    @AlexWeb6667 Автор вопроса
    Благодарю, занимательно!) Все попробую, отпишусь)
  • Почему не всегда срабатывает toggleClass?

    @AlexWeb6667 Автор вопроса
    1)Учту)
    2)Код работает, но ничего не поменялось( Сам toggle лагает. То удалить не может, то добавить. В инструменте разработчика мигает что что-то происходит с классом, но он или не удаляется, или не добавляется, IE и этот код не воспринимает.
  • Как вывести вид картинки загруженной через форму?

    @AlexWeb6667 Автор вопроса
    Спасибо братан, то что нужно)!
  • Как правильно создать форум на yii2?

    @AlexWeb6667 Автор вопроса
    Вот как раз хотел узнать про это все, у тех кто делал. Есть какие может видосики по тематике ну или рекомендации чего лучше не делать (Кроме не делай сам бери чужое))
  • Как правильно получать данные из таблиц связанных многие к многим?

    @AlexWeb6667 Автор вопроса
    В смысле как таблицы создал?
    1.News
    id, name и т.д

    2.Tags
    id, description и т.д

    3. и news_tags
    id (auto_increment)
    news_id
    tags_id

    и связал это все yii2 средствами

    public function getTags()
    {
    return $this->hasMany(Tags::className(), ['id' => 'tags_id'])
    ->viaTable('news_tags', ['news_id' => 'id']);
    }
  • Как обрезать запятую в конце сроки?

    @AlexWeb6667 Автор вопроса
    Спасибо, замудренненько немного, но тоже решение)
  • Как обрезать запятую в конце сроки?

    @AlexWeb6667 Автор вопроса
    Спасибо!) именно то что нужно, без велосипедов)
  • Как обрезать запятую в конце сроки?

    @AlexWeb6667 Автор вопроса
    Скриптом имеете в виду? вывести php Квадрокоптеры fll . А потом между ними запятые выставить? Не подскажите как?
  • Почему не выполняется цикл?

    @AlexWeb6667 Автор вопроса
    Ну что-то такое сочинил, спасибо, познакомился с инсертами хотя бы)

    $tags_id = $model->tags;
                  $tags_arr = explode(", ", $tags_id);
    
    
                  foreach ($tags_arr as $tag) {
    
                        $issert_row[] = [$model->id,$tag];
                  }
    
                  Yii::$app->db->createCommand()->batchInsert('news_tags',['news_id','tags_id'],$issert_row)->execute();
  • Почему не выполняется цикл?

    @AlexWeb6667 Автор вопроса
    Сергей Lero, Модель в цикл забросил и все сработало
    foreach ($tags_arr as $tag) {
    
                      $tranzit_model = new NewsTags();
    
                      $tranzit_model->news_id = 6;
                      $tranzit_model->tags_id = $tag;
                      $tranzit_model->save();
                  }


    Три записи с id 6, спасибо) Теперь с инсертами разберусь и все идеально будет, спасибо)
  • Почему не выполняется цикл?

    @AlexWeb6667 Автор вопроса
    У меня админка, и кол-во и значение id-шников абсолютно разные, наверное все равно цикл нужен да?
  • Почему не выполняется цикл?

    @AlexWeb6667 Автор вопроса
    Сергей Lero, Самоучка) Не подскажешь правильный аналог цикла?
  • Почему не выполняется цикл?

    @AlexWeb6667 Автор вопроса
    Да выводил в дебаге, Цикл с Id-шниками
    Array
    (
        [0] => 1
        [1] => 2
        [2] => 3
    )


    и мне нужно в таблице для новости с id 6 например, создать 3 записи. А цикл только с последним Id-шником создает
  • Как создать сайт, содержащий в себе другие сайты?

    @AlexWeb6667 Автор вопроса
    А можно по подробней чуть-чуть? Не совсем понял как это воплотить в жизнь
  • Как правильно подключить reCapcha на yii2?

    @AlexWeb6667 Автор вопроса
    Спасибо вам большое, только пару месяцев знакомлюсь с yii2 шикарный фреймворк как по мне, но всю глубину еще не познал... самоучка, по этому и всплывают такие вопросы. Еще раз спасибо)
  • Как правильно подключить reCapcha на yii2?

    @AlexWeb6667 Автор вопроса
    Ну гугл дает ключ сайта, и секретный ключ.

    Я и прописал это в файле web
    //          Капча
                'reCaptcha' => [
                    'name' => 'reCaptcha',
                    'class' => 'himiklab\yii2\recaptcha\ReCaptcha',
                    'siteKey' => '6LcyeS0UAAAAAGtTPNZ6AUyIhH3itXXXXXXX,
                    'secret' => '6LcyeS0UAAAAAG0ugrwlS9p9_-9yO_XXXXXXX',
                ],


    И я так понимаю если я указал в вебе ключи, то в модели и форме уже не нужно их прописывать?

    Модель
    //  Правила
    
         public $image;
        public $reCaptcha;
    
        public function rules()
        {
            return [
    
                //Обязательные к заполнению
                [['review','name','city'], 'required', 'message' => 'Поле не может быть пустым ↓'],
    
                // Проверяем длину сообщения
                [['review'], 'string', 'length' => [100, 400], 'tooLong' => 'Сообщение не должно 
               превышать 400 символов','tooShort' => 'Сообщение должно содержать минимум 100 
               символов'],
    
                [['name','city'], 'string'],
    
                //Формат изображения
                [['image'], 'file', 'extensions' => 'png, jpg'],
    
                [['reCaptcha'], \himiklab\yii2\recaptcha\ReCaptchaValidator::className()]
            ];
        }


    Ну и в форме без ключей прописал

    Форма
    <?php $form = ActiveForm::begin([
                        'id' => 'rew-form',
                        'layout' => 'horizontal',
                        'options' => ['class' => 'modal_rewiews_input','enctype' => 'multipart/form-data'],
                        'fieldConfig' => [
                            'template' => "{error}\n{input}",
                            'labelOptions' => ['class' => ''],
                        ],
                    ]) ?>
    
    
                        <?= $form->field($model, 'image')->fileInput(['class' => 'upload modal_rewiews_input','id' => 'files'])->label(false);?>
    
    
                    <div class="rew_img_input">
    
    
                    </div>
    
    
                    <?= $form->field($model, 'name')->textInput(['placeholder' => 'Имя фамилия'])-
                     >label(false) ?>
    
                    <?= $form->field($model, 'city')->textInput(['placeholder' => 'Город'])->label(false) ?>
    
                    <?= $form->field($model, 'review')->textarea(['rows' => 4, 'id' => 'good_reviews', 
                   'placeholder' => 'Хорошие отзывы'])->label(false) ?>
    
                    <?= \himiklab\yii2\recaptcha\ReCaptcha::widget(['name' => 'reCaptcha']) ?>
    
                    <div class="form-group">
                            <?= Html::submitButton('Оставить отзыв', ['class' => 'btn btn-primary main_btn 
                     form_btn', 'name' => 'button']) ?>
                    </div>
    
    
                    <?php $form = ActiveForm::end() ?>
  • Как правильно подключить reCapcha на yii2?

    @AlexWeb6667 Автор вопроса
    не знал(спасибо. В модели проблемы какие-то. Там в монуальчике к виджету пару вариантов подключения. Не могу сообразить какой подходит мне. У меня в файле веб все подключенно и прописанно ключи пароли. Если подключаю так
    public function rules()
    {
      return [
          // ...
          [[], \himiklab\yii2\recaptcha\ReCaptchaValidator::className()]
      ];
    }


    работает, но не валидирует)

    Если так, не сохраняет, не пропускает
    public $reCaptcha;
    
    public function rules()
    {
      return [
          // ...
          [['reCaptcha'], \himiklab\yii2\recaptcha\ReCaptchaValidator::className(), 'secret' => 'your secret key', 'uncheckedMessage' => 'Please confirm that you are not a bot.']
      ];
    }


    Запутался немного, где как что писать, ключи в модели форме. Там просто по 3 вариации подключения, видимо что-то на мешал...
  • Как правильно подключить reCapcha на yii2?

    @AlexWeb6667 Автор вопроса
    хм странно. Когда убирал из обязательных полей и не кликал чекбокс запрос сохраняется в бд

    в контроллере
    if ($model->load(Yii::$app->request->post()) && $model->validate() && $model->save()) {
    ....            
    }