• Почему картинка сохраняется как папка?

    Jhon_Light
    @Jhon_Light Автор вопроса
    Магия кроется вот здесь
    $file -> move( public_path() . '/upload_for_post/' . $blog -> id . '/' . $input[ 'image' ] );

    Нужно перед $input[ 'image' ] указать " , " а не " . "
    Ответ написан
    Комментировать
  • Как отправить картинку методом POST после вставки картинки через ctrl+v?

    Jhon_Light
    @Jhon_Light Автор вопроса
    Пришел к такому выводу
    $(document).ready(function(e) {
    	
          // показываем картинку. Отменяем события для формы
      	var port = $('.port').css('display','none');
    	$("#text").change(function () {
    		$('#sendFormNews').submit(function(){return false;});
    		port.css('display','block');
    		$('.uploadIcon').css('display','none');
    	});
    });
    // вешаем слушателя
    window.addEventListener('load', function(e) {
            // откуда пришла картинка
    	let input = document.querySelector("#text");
            // где показать
    	let windowPrevImg = document.querySelector('#image_upload_preview');
    	// наша форма для отправки
    	let sendFormNews = document.getElementById('sendFormNews');
    
            // функция для страховки
    	function uploadPasteImage()
    	{
               // еще один слушатель - вешаем на submit - валидим форму один словом. (у меня аякс валидация выше)
    	    sendFormNews.addEventListener('submit',(e) => {
               // конвертим нашу строку base64 - говорим что это файл
    	    function dataURLtoFile(dataurl, filename) {
    		    var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],
    		    bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
    		    while(n--){
    		        u8arr[n] = bstr.charCodeAt(n);
    		    }
                        //отдаем результат
    		    return new File([u8arr], filename, {type:mime});
    		}
                    // вытягиваем base64 с картинки/прелоада 
    		var pasteImage = windowPrevImg.getAttribute('src');
                    // скармливаем функции да бы получить нужный нам файл да бы обьяснить серверу что это файл
    		var file = dataURLtoFile(pasteImage, input.value);
    		
                   // юзаем FormData https://developer.mozilla.org/ru/docs/Web/API/FormData
                   // в качестве аргумента передаем нашу форму
    		var fd = new FormData(sendFormNews);
                  // ищем нужное нам поле в форму и передаем туда наш полученный файл, который мы получили ранее
    		fd.append('News[image]',file);
                   // дальше дело техники
                    // вызываем
    		var request = new XMLHttpRequest();
                    // говорим куда и как 
    		request.open("POST", window.location.href);
                   // загружаем "если" делай то то
    		request.onload = function(oEvent) {
    		window.location.replace("/cabinet/my-news");
    			} else {
    				console.log("Error " + request.status + " occurred when trying to upload your file.<br \/>");
    			}
    		};
    		// отправляем
    		request.send(fd);
    		
    		});
    		
                   // события для копирования
    		input.addEventListener("paste",function(event){
    	    let items = (event.clipboardData || event.originalEvent.clipboardData).items;
    	    for (index in items) {
    	        let item = items[index];
    	        if (item.kind === 'file') {
    	            let blob = item.getAsFile();
    	            let reader = new FileReader();
    	            reader.onload = function(event){
    	                windowPrevImg.setAttribute('src', event.target.result);
    	            }; 
    	            reader.readAsDataURL(blob);
    	            }
    	        }
    	    });	
    	}
           // инициализируем нашу функцию
    	uploadPasteImage();
    });
    Ответ написан
    Комментировать
  • Объединение двух запросов sql?

    leftJoin вам в помощь
    Ответ написан
    Комментировать
  • Как сформировать option в selecte для работы с временем?

    Jhon_Light
    @Jhon_Light Автор вопроса
    Вид
    $timeStart 	= $formatter -> asTime( $this->model->working_time_start, 'php:G');
    		$timeEnd 	= $formatter -> asTime( $this->model->working_time_end, 'php:G');
    
    		$checkTimeStart = $this -> getAllTimeMyOrderInConferenceRoom();
    
    		$options = '';
    		for( $i = $timeStart; $i <= $timeEnd; $i++ )
    		{
    			$disabled = ( in_array( $i,$checkTimeStart)) ? 'disabled' : '';
    			$options .= "<option ". $disabled ." value='".$i."'>".$i.":00</option>";
    		}

    Модель
    public function getAllTimeMyOrderInConferenceRoom( $id_conf_rom )
    		{
    
    			$rows = BookingConferenceRoom ::find()
    										  -> select( 'time_start' )
    										  -> where( [ 'conf_room_id' => $id_conf_rom ] )
    										  -> orderBy( [ 'time_start' => SORT_ASC ] )
    										  -> column();
    			if( $rows )
    			{
    				$dates = [];
    				foreach( $rows as $row )
    				{
    					$dates[] = Yii ::$app -> formatter -> asTime( $row, 'php:G' );
    				}
    				return $dates;
    			}
    			return [];
    		}
    Ответ написан
    Комментировать
  • Как записать данные в таблицу базы данных когда данные суммированы?

    Jhon_Light
    @Jhon_Light Автор вопроса
    Спустя пару часов пришел к такому выводу. (Это пример для одного поля, у меня их 5, другие аналогичные, ограничиваемся только воображением)
    Сначала изобразил схему на листе ручкой, дальше дело техники.
    public static function updateMyBonus( $user_id, $count_events_week = NULL, $count_time_for_massage = NULL, $count_time_for_conf_room = NULL )
    		{
    			$model = self ::updateBonus( $user_id );
    			// Если данные которые пришли в $count_events_week меньше чем в базе.
    			// То передаем ее дальше и отнимаем от уже существующего значения в базе
    			if( $count_events_week < $model -> count_events_week )
    			{
    				// Пример 3 - 2 = 1
    				// Отнимаем от значений в базе значене $count_events_week
    				$old_data_value = $model -> count_events_week - $count_events_week;
    				// записываем
    				$model -> count_events_week = $old_data_value;
    				// сохраняем
    				$model -> save();
    			}
    			// если данные в $count_events_week равны значению которые в базе. Пишем чистый ноль без лишних движений
    			elseif($count_events_week == $model -> count_events_week)
    			{
    				// Пример 3 = 3 пишем ноль
    				$model -> count_events_week = 0;
    				$model -> save();
    			}
    			// Если же данные в $count_events_week больше занчения в базе у первого поля
    			// То записываем ноль и снова вызываем функцию для вызов новой записи.
    			else
    			{
    				// Для получения разницы отнимаем данные которые пришли в $count_events_week, от того что есть в базе
    				//Пример: Пришло 7 В базе 4
    				//  7 - 4 = 3 это наша разница
    				$remainder = $count_events_week - $model -> count_events_week;
    				//записываем ноль в первое поле
    				$model -> count_events_week = 0;
    				// сохраняем
    				if( $model -> save() )
    				{
    					// Дальше вызываем снова туже самую функцию, но так как мы уже записал ноль в первое поле
    					// Оно отдаст второе поле у которо поле не больше нуля
    					$next_model = self ::updateBonus( $user_id );
    					// Ранее полученую разницу отнимаем от основного значения которое хранит в себе второе поле
    					// Пример: 4 - 3 = 1 
    					$old_data_value = $next_model -> count_events_week - $remainder;
    					// Сохраняем данные
    					$next_model -> count_events_week = $old_data_value;
    					$next_model -> save();
    				}
    			}
    		}
    
    		// С помощью этой функции мы и обращаемся к полям где значения больше нуля
    		protected static function updateBonus( $user_id )
    		{
    			$row =  self ::find() -> where( [ 'user_id' => $user_id ] )
    				          -> andWhere(['>','count_events_week',0])
    						  -> orderBy( [ 'date_end' => SORT_ASC] )
     						  -> one();
    			return $row;
    		}
    Ответ написан
    Комментировать
  • Как сделать поиск внутри группы вопросов?

    Jhon_Light
    @Jhon_Light Автор вопроса
    Вот решение, пришел к такому выводу
    public function actionFaq()
    	{
    		$searchQuestion = Yii::$app->request->get('searchQuestion');
    		$faq = (new Query())
    			->from(Questions::tableName()." quest");
    		if(!empty($searchQuestion)) {
    			$faq->leftJoin(AnswerForQuestion::tableName()." ans_for_que",'ans_for_que.id_question = quest.id')
    				->select('ans_for_que.id_question as id_question, quest.title, quest.decsription')
    				->groupBy(['id_question','quest.id'])
    				->andWhere([
    							   'or',
    							   ['like','ans_for_que.question',$searchQuestion],
    						   ]);
    		}
    
    		return $this->render('faq',[
    			'faq' => $faq->all()
    		]);
    	}
    Ответ написан
    Комментировать
  • Как отобразить количество комментариев одного поста при этом еще выводить кто оставил?

    Jhon_Light
    @Jhon_Light Автор вопроса
    $queryPostUser->from(UserPosts::tableName()." us_post")
                ->select('us_prof.user_id, us_prof.avatar, user.username, us_post.text, us_post.id, com_us.text as comment')
                ->leftJoin(UserProfile::tableName()." us_prof",'us_prof.user_id = us_post.id_user')
                ->leftJoin(User::tableName()." user",'user.id = us_post.id_user')
                ->leftJoin(Comments::tableName()." com_us",'com_us.id_post = us_post.id')
                ->where(['us_post.id_user' => Yii::$app->user->identity->getId()]);

    Итог, для того что бы выбрать все записи и комменты к ним я сделал так.
    Спасибо всем за поддержку и советы
    Ответ написан
    Комментировать
  • По какой причине вылетает ошибка file_put_contents после загрузки файлов на сервер?

    Jhon_Light
    @Jhon_Light Автор вопроса
    Наше проблему,
    Пересмотрев свои старые проекты сделал вывод.
    В папке bootstrap был лишний файл конфига, накой, сам того не понимаю. Убрал его все заработало...
    Было
    5a6b4d66a3878499128579.png
    Стало
    5a6b4d712f087782802504.png

    Этот файл ни как не реагировал на команды очистки кеша. Ну я понял что, если не реагирует, значит он не нужен. Призвал заветную клавишу delete. И все заработало сразу и везде

    Спасибо всем кто откликнулся
    Ответ написан
  • Как настроить Corona render в 3d Max 15?

    Jhon_Light
    @Jhon_Light Автор вопроса
    Решение вот. После того как установили идем во вкладу Rendering\Render Setup. Во вкладке Common ищем под закладку Assing Render. В представленном окне нужно указать корону и вашу видео карту. Вот и все...
    Ответ написан