 
				 
            Создание Доски объявлений с использованием фреймворка YII2.
Автор: Жданов В.В.
Данный курс - практикум по созданию сайта с использованием фреймворка YII2. 
Цель: создание небольшого сайта с нуля до "коробочного" варианта, готового к размещению на хостинге. 
Теории здесь не много, больше практической работы по принципу: "произвел действие - получил результат".
Также по максимуму используем функционал фреймворка YII2.
Программируем - и кайфуем!
| # | Название видеоурока | Видео / Тесты | Решило | Рейтинг | Доступ | 
|---|---|---|---|---|---|
| 1 |  О проекте и про инструменты |  | |||
| На этом уроке мы рассмотрим тематику разработки и настроим инструменты Отчёт отправил: 24659. Виталий Выполнено за 14 мин. [Показать отчёт] Научился: Всё воюю с вэб разработкой. Хотел сразу наскочить на АСП - без фундамента по C# ну никак, а там всё очень глубинно. Поэтому пока решил начать с PHP. Который без ведущего тоже туго понимается в практическом плане | |||||
| 2 |  Создание проекта YII2 | 1 тест | |||
| На этом уроке мы создадим проект нового сайта, установим YII2 и запустим новый сайт на нашем локальном домене Отчёт отправил: 24659. Виталий Выполнено за 1 час. 21 мин. [Показать отчёт] Научился: Работает. Соединил Composer с PHPStorm Сложности: Полтора часа возюкался. В итоге запустилось с ошибкой как на видео, хотя обещано было, что при установке через композер ключ создастся автоматом | |||||
| 3 |  Комфортная конфигурация | 2 теста | |||
| На этом уроке мы настроим удобные для человека ссылки и поменяем название сайта при помощи настроек config/web.php Отчёт отправил: 24659. Виталий Выполнено за 24 мин. [Показать отчёт] Научился: Обнаружил усечённость русифицированной инструкции на сайте фреймворка. Конкретно - настройки web.config для IIS есть только в английской версии Сложности: Осознание непаханного поля. Валерий из головы подставляет конфиги. Я за ним, конечно повторяю, но без времени затраченного на самостоятельный поиск, думаю к следующему проекту (да что там проекту, через пару дней) и не вспомню, что и где менял | |||||
| 4 |  Схема базы данных |  | |||
| На этом уроке мы создадим схему базы данных для нашего проекта Отчёт отправил: 24659. Виталий Выполнено за 2 дня 19 час. 56 мин. [Показать отчёт] Научился: проектировать БД Сложности: Совершенно непонятна необходимость двух таблиц для Юзера. Мы так будем под yii2 подстраиваться? А нельзя напрямую в модель дописать необходимые поля? | |||||
| 5 |  Подключение к базе данных пользователя и миграция пользователей | 1 тест | |||
| На этом уроке мы создадим базу данных, подключим ее к нашему проекту и создадим таблицу пользователей при помощи механизма миграций Отчёт отправил: 24659. Виталий Выполнено за 2 час. 55 мин. [Показать отчёт] Научился: освоено 100500 инструментов MySQL Workbench позволяет отрисовать структуру базы графически и потом одной кнопкой создаёт её. Пока не совсем понятно обязательно во фреймворке расписывать миграцию и может ли она самосоздаться по готовой базе полученной из воркбенча | |||||
| 6 |  Аутентификация - захешированный пользователь из БД | 1 тест | |||
| На этом уроке мы подкорректируем модель User  и реализуем аутентификацию на сайте через базу данных Отчёт отправил: 24659. Виталий Выполнено за 37 мин. [Показать отчёт] Научился: Всё сделано, Всё даже работает. Но как - непонятно. Всё равно надо курить мануалы по YII и MySQL. Ибо как конкретно работает findone и чего мы туда пишем непонятно | |||||
| 7 |  Информация о пользователе |  | |||
| На этом уроке создадим таблицу и модель Информация о пользователе | |||||
| 8 |  MVC - немного теории | 1 тест | |||
| На этом уроке мы рассмотрим теоретические основы работы MVC и создадим новый контроллер в нашем проекте | |||||
| 9 | MVC - информация о пользователе |  | |||
| На этом уроке мы получим данные о пользователе из базы в представление | |||||
| 10 | Пользователь - кто зарегистрирован сейчас? | 1 тест | |||
| На этом уроке мы получим информацию о текущем зарегистрированном пользователе, а также сделаем рефакторинг кода | |||||
| 11 | Новый пользователь - заготовка и меню |  | |||
| На этом уроке мы создадим действие и представление для добавления пользователя, а также добавим пункт меню "Регистрация" | |||||
| 12 | Новый пользователь - модель для формы | 1 тест | |||
| На этом уроке мы создадим модель параметров формы добавления пользователя | |||||
| 13 | Новый пользователь - дизайн формы начало |  | |||
| На этом уроке мы зададим поля формы добавления пользователя | |||||
| 14 | Новый пользователь - дизайн формы: поля и колонки | 1 тест | |||
| На этом уроке мы добавим все поля формы, кнопку сохранения, а также разместим поля в две колонки | |||||
| 15 | Новый пользователь - сохранение нового пользователя | 1 тест | |||
| На этом уроке мы напишем алгоритм сохранения записи о пользователе и информации о нем | |||||
| 16 | Красивая аутентификация на сайте |  | |||
| На этом уроке мы поменяем дизайн формы входа на сайт | |||||
| 17 | Что доступно Юпитеру? | 1 тест | |||
| На этом занятии мы научимся управлять доступом к пунктам главного меню | |||||
| 18 | Объявления - создание базы и модели | 1 тест | |||
| На этом уроке мы создадим таблицу bulletins при помощи миграций и сгенерируем для данной таблицы класс ActiveRecord | |||||
| 19 | Объявления - контроллер, представление и много записей | 1 тест | |||
| На этом уроке мы создадим контроллер и представление для работы с объявлениями, а также сделаем связь записей о пользователях и объявлениях типа "один-ко-многим" | |||||
| 20 | Объявление - функциональный дизайн страницы |  | |||
| На этом уроке мы сделаем дизайн страницы наших объявлений, который поможет нам работать с объявлениями в дальнейшем | |||||
| 21 | Объявление - ограничение доступа |  | |||
| На этом уроке мы ограничим доступ неавторизированного пользователя к странице управления объявлениями, а также решим некоторые технические вопросы | |||||
| 22 | Объявление - поля для пользовательских форм |  | |||
| На этом уроке мы создадим класс BulletinsForm и определим, какие поля будут использоваться при создании объявления | |||||
| 23 | Объявление - форма добавления объявлений | 1 тест | |||
| На этом уроке мы создадим представление для добавления объявлений и действие контроллера, запускающего это представление | |||||
| 24 | Объявление - сохранение в черновик |  | |||
| На этом уроке мы реализуем механизм сохранения нового объявления в черновик | |||||
| 25 | Объявление - список |  | |||
| На этом уроке мы реализуем вывод сохраненных в базе объявлений в список | |||||
| 26 | Объявление - всё на публику | 1 тест | |||
| На этом уроке мы сделаем наши объявления опубликованными | |||||
| 27 | Объявление - публикация на главной странице | 1 тест | |||
| На этом уроке мы разместим наши опубликованные объявления на главной странице сайта | |||||
| 28 | Объявление - скрыть нельзя удалить |  | |||
| На этом уроке мы реализуем возможность помещать объявления в группу удаленных, восстанавливать их оттуда, а также отключать их просмотр | |||||
| 29 | Объявление - статусный рефакторинг | 1 тест | |||
| НА этом уроке мы сделаем рефакторинг методов работы со статусом объявлений | |||||
| 30 | Объявление - рефакторинг редактирования |  | |||
| На этом уроке мы реализуем редактирование путем небольшого видоизменения функции добавления записи | |||||
| 31 | Объявление: запрос - в функцию & кнопка для изображений |  | |||
| На этом уроке мы сделаем рефакторинг метода index и добавим кнопки для перехода в режим работы с изображениями | |||||
| 32 | Изображения - микс из миграций |  | |||
| На этом уроке мы через механизм миграций создадим таблицу photo и добавим поле для аватары в таблицу bulletins | |||||
| 33 | Изображения - снова MVC |  | |||
| На этом уроке мы создадим модель, контролер и представление для работы с фото | |||||
| 34 | Изображения - работа с моделью |  | |||
| На этом уроке мы передадим модель нашего объявления в представление | |||||
| 35 | Работаем над ошибками - YII2 в помощь |  | |||
| На этом уроке мы разберемся, как работать над ошибками и читать сигналы дебаггера YII2 | |||||
| 36 | Изображения - где живут картинки | 1 тест | |||
| На этом уроке мы создадим папку для изображений, разместим там изображение по умолчанию, а также создадим универсальные параметры пути и изображения по умолчанию | |||||
| 37 | Изображения - модель формы |  | |||
| На этом уроке мы создадим модель PhotoForm для работы с изображениями | |||||
| 38 | Изображение - загрузочное представление |  | |||
| На этом занятии мы создадим форму представления, через которое будет загружаться изображение | |||||
| 39 | Изображение - загрузка файла на сайт | 1 тест | |||
| На этом уроке мы реализуем алгоритм загрузки изображений на сайт | |||||
| 40 | ПРОМЕЖУТОЧНЫЙ ВИДЕО ОБЗОР | без видео | |||
| Мы уже многое сделали на нашем видеокурсе, и автору очень важно узнать Ваше мнение о данном курсе и получить обратную связь в форме видео-презентации и ответов на вопросы. Сделай видео-презентацию своего сайта. | |||||
| 41 | Изображение - сохранение пути в базу |  | |||
| На этом уроке мы реализуем сохранение пути к файлу изображений в базу данных | |||||
| 42 | Изображение - управление картинками |  | |||
| На этом уроке мы займемся дизайном - создадим выпадающее меню управления изображением | |||||
| 43 | Изображение - JS - немного теории и пижонства | 1 тест | |||
| На этом уроке мы рассмотрим работу JS на yii2 | |||||
| 44 | Изображение - JS - глобализация |  | |||
| На этом уроке мы перенесем все скрипты JS в отдельный файл, а также реализуем открытие и скрытие элементов ввода информации | |||||
| 45 | Изображение - JS - сохранение информации в базу | 1 тест | |||
| На этом уроке мы научим нашу систему сохранять информацию об изображениях в базу с использованием технологии ajax | |||||
| 46 | Изображение - JS - извлечение методом ajax |  | |||
| На этом уроке мы научим ajax получать информацию об изображениях из базы | |||||
| 47 | Изображение - аватарка - вывод на главной странице |  | |||
| На этом уроке мы реализуем вывод главных изображений каждого объявления (далее - аватарки) на главной странице | |||||
| 48 | Изображение - аватарка - работа над ошибками связей |  | |||
| На данном уроке мы исправим ошибки вывода фотографий, очистим базу и заново загрузим в нашу базу фотографии в одно из объявлений | |||||
| 49 | Изображение - аватарка - как стать главной |  | |||
| На этом уроке мы создадим код, делающий любое фото главным | |||||
| 50 | Изображение - удаление - ни шагу без подтверждения! |  | |||
| На этом уроке мы реализуем всплывающее окно подтверждения действия и протестируем результаты выбора различных вариантов | |||||
| 51 | Изображение - удаление - удаление файла и записи |  | |||
| На этом уроке мы реализуем удаление файлов изображений и записей о них из базы данных | |||||
| 52 | Главная страница - подробности - ссылки и заготовка представлени |  | |||
| На этом уроке мы создадим ссылки для объявлений на главной странице и заготовку представления для подробного вывода информации объявления | |||||
| 53 | Главная страница - подробности - больше подробностей |  | |||
| На этом уроке мы выведем максимум информации на страницу подробностей объявления | |||||
| 54 | Главная страница - подробности - расширяя информацию | 1 тест | |||
| На этом уроке мы внесем в наш код изменения, которые позволят сохранять объявления с большим количеством информации | |||||
| 55 | Главная страница - оформление - дизайн объявления |  | |||
| На этом уроке мы зададим стиль дизайна объявления | |||||
| 56 | Главная страница - оформление - дизайн элементов базовой страницы | 1 тест | |||
| На этом уроке мы выведем информацию о себе в элементе footer и сделаем главное меню стильным и красивым | |||||
| 57 | Главная страница - оформление - ловим цвет пикселя |  | |||
| На этом уроке мы рассмотрим использование инструментов определения цвета пикселя (Пипетка) | |||||
| 58 | Главная страница - оформление - смотрим все изображения |  | |||
| На этом уроке мы реализуем просмотр всех изображений объявления "не хуже, чем на Avito" | |||||
| 59 | Главная страница - оформление - стильный логотип |  | |||
| На этом уроке мы реализуем вывод логотипа в иконку проекта и в пункт меню перехода на главную страницу | |||||
| 60 | Главная страница - оформление - оповещения через баннер |  | |||
| На этом уроке мы создадим баннер для оповещений, новостей | |||||
| 61 | Разделы (темы) - немного теории |  | |||
| На этом уроке мы рассмотрим вопрос тематик объявлений на нашем сайте, а также составим план (структуру) таблицы тем Themes и связующей таблицы ThemesBulletins | |||||
| 62 | Разделы (темы) - миграции с внешними ключами |  | |||
| На этом уроке мы создадим миграции таблиц themes и themesbulletins, сами эти таблицы и их модели ActiveRecord с внешними связями | |||||
| 63 | Обратная связь - мозговой штурм - внештатные ситуации |  | |||
| В данном уроке попрошу Вас выполнить небольшую самостоятельную работу и дать обратную связь. | |||||
| 64 | Разделы (темы) - вывод тем в объявлении |  | |||
| На этом уроке мы реализуем вывод тем на странице объявления | |||||
| 65 | Разделы (темы) - меню тематик |  | |||
| На этом уроке мы реализуем вывод ссылок на темы на главной странице и подсчет объявлений в каждой теме | |||||
| 66 | Разделы (темы) - тематические выборки |  | |||
| На этом уроке мы реализуем выбор объявлений по темам и вывод их на основную страницу | |||||
| 67 | Разделы (темы) - полезные переходы |  | |||
| На этом уроке мы реализуем возвращение со страницы объявлений на предыдущую страницу, а также переходы по темам объявления по типу хештегов | |||||
| 68 | Разделы (темы) - администрирование - теория и заготовки |  | |||
| На этом уроке мы создадим контроллер для администрирования разделов (тем) и представление index | |||||
| 69 | Разделы (темы) - администрирование - все темы в таблицу |  | |||
| На этом уроке мы выведем существующие темы в таблицу и зададим им элементы управления | |||||
| 70 | Разделы (темы) - администрирование - подтверждение удаления |  | |||
| На этом уроке мы реализуем алгоритм подтверждения удаления и создадим соответствующее представление | |||||
| 71 | Разделы (темы) - администрирование - удаление разделов и чистка связей |  | |||
| На этом уроке мы окончательно удалим раздел, а перед этим удалим все его связи с объявлениями | |||||
| 72 | Разделы (темы) - администрирование - Обычный ThemesForm |  | |||
| На этом уроке мы создадим модель ThemesForm, заготовку действия Add в контроллере Themes и представление под него | |||||
| 73 | Разделы (темы) - исправление подсчета и отображение текущей темы |  | |||
| Hа этом уроке мы исправим ошибку подсчета, обнаруженную в процессе прохождения курса, а также отобразим текущую тему, по которой выборка объявлений, в баннере | |||||
| 74 | Разделы (темы) - администрирование - "темное" представление |  | |||
| На этом уроке мы создадим поля для редактирования или добавления темы в представлении themes\add | |||||
| 75 | Разделы (темы) - администрирование - волшебный выпадающий список | 1 тест | |||
| На этом уроке мы создадим выпадающий список выбора родительской темы | |||||
| 76 | Разделы (темы) - администрирование - сохранение темы |  | |||
| На этом уроке мы реализуем сохранение добавляемых и редактируемых тем | |||||
| 77 | Разделы (темы) - администрирование - рефакторинг и валидация |  | |||
| На этом уроке мы сделаем рефакторинг нашего представления add и валидацию данных формы ThemesForm | |||||
| 78 | Связи объявлений и тем - заготовка |  | |||
| На этом уроке мы создадим действие в контроллере BulletinsController и представление, которые помогут нам работать со связями объявлений и тем | |||||
| 79 | Связи объявлений и тем - добавление новой темы |  | |||
| На этом уроке мы научим нашу систему добавлять новую тему в объявление (делать связь темы и объявления) | |||||
| 80 | Связи объявлений и тем - темы, которых не было | 1 тест | |||
| На этом уроке мы научим нашу систему выводить в список добавляемых в объявление тем только те, которые не прикреплены к нашему объявлению | |||||
| 81 | Связи объявлений и тем - темы, которых не будет |  | |||
| На этом уроке мы научим нашу систему удалять из объявлений темы, к которым наше объявление привязывать не надо | |||||
| 82 | Глобальный поиск - поле поиска в меню |  | |||
| На этом уроке мы добавим поле поиска в навигационное меню сайта, а также решим вопрос с активными пунктами меню. | |||||
| 83 | Глобальный поиск - ищем глобально |  | |||
| На этом уроке мы создадим алгоритм поиска по вводимому в поле search контенту | |||||
| 84 | Расширенный поиск - группировка пунктов главного меню |  | |||
| На этом уроке мы сгруппируем пункты главного меню в подразделы, и сделаем в нем ссылку на страницу расширенного поиска | |||||
| 85 | Расширенный поиск - заготовки и план |  | |||
| На этом уроке мы набросаем план будущей страницы расширенного поиска, а также создадим действие контроллера и заготовку представления расширенного поиска | |||||
| 86 | Расширенный поиск - стили и форма |  | |||
| На этом уроке мы внесем исправления в стили субменю и сделаем модель формы расширенного поиска | |||||
| 87 | Расширенный поиск - дизайн текстовых полей и кнопки |  | |||
| На этом уроке мы прокачаем навыки дизайна текстовых полей, создания активной формы в представлении, а также создания кнопки через хелперы yii2 | |||||
| 88 | Расширенный поиск - цена - выбор варианта |  | |||
| На этом уроке мы создадим систему управления выбором варианта поиска по цене | |||||
| 89 | Расширенный поиск - цена - невидимые поля |  | |||
| На этом уроке мы создадим невидимые блоки с полями поиска цены, которые становятся видимыми при нажатии определенного пункта навигатора | |||||
| 90 | Расширенный поиск - дата публикации - виджет извне |  | |||
| На этом уроке мы установим в наш проект компонент jui от стороннего разработчика и создадим календарики для выбора дат | |||||
| 91 | Расширенный поиск - результаты выборки - частичное представление |  | |||
| На этом уроке мы рассмотрим возможность использования частичного представления в yii2-проекте и выведем в частичное представление карточку объявления | |||||
| 92 | Расширенный поиск - генератор поиска - возвращение к SQL-запросу |  | |||
| На этом уроке мы создадим генератор отчета, используя работу ActiveRecord фреймворка yii2 c sql-запросами, и включим в него поиск по текстовым полям формы расширенного поиска | |||||
| 93 | Расширенный поиск - генератор поиска - ограничивающие даты |  | |||
| На этом уроке мы добавим в генератор отчета расширенного поиска выборку по датам публикации | |||||
| 94 | Расширенный поиск - генератор поиска - три вида цены и один POST |  | |||
| На этом уроке мы реализуем различные варианты выборки объявлений по цене и добавим их в наш генератор расширенного поиска | |||||
| 95 | Обратная связь - свой сайт объявлений | без видео | |||
| И снова обратная связь.Подумаем самостоятельно и ответим на вопросы: | |||||
| 96 | Расширенный поиск - генератор поиска - показать, что нужно |  | |||
| На этом уроке мы реализуем отображение той вкладки поиска по ценам, по которой производился поиск | |||||
| 97 | Работа с документацией Yii2 |  | |||
| На этом уроке переходим на один из официальных сайтов по Yii2 и, пользуясь помощью документации, реализовываем одну из своих идей | |||||
| 98 | Пользователи и роли - планирование ролевой модели |  | |||
| На этом уроке мы составим ролевую модель пользователей нашего сайта | |||||
| 99 | Пользователи и роли - фильтры контроля доступа ACF - теория и эксперименты |  | |||
| На этом уроке мы рассмотрим принципы работы фильтров контроля доступа ACF | |||||
| 100 | Пользователи и роли - фильтры контроля доступа ACF - фильтруем всё |  | |||
| На этом уроке мы сами создадим метод behaviors() в BulletinsController и зададим нужные фильтры для действий контроллера | |||||
| 101 | Пользователи и роли - роли через RBAC - теория, установка и миграции |  | |||
| На этом уроке мы установим расширение RBAC, настроим подключение к RBAC и создадим базы для авторизации при помощи механизма миграции | |||||
| 102 | Пользователи и роли - роли через RBAC - тесты и практика |  | |||
| На этом уроке мы создадим тестовые роли и разрешения, а также проверим работу контроллера согласно разрешений | |||||
| 103 | Пользователи и роли - роли через RBAC - вносим действия в план |  | |||
| На этом уроке мы добавим действия к ролям в нашей актуальной ролевой модели | |||||
| 104 | Пользователи и роли - роли через RBAC - реализация плана |  | |||
| На этом уроке мы создадим актуальные роли и действия для пользователей нашего сайта | |||||
| 105 | Пользователи и роли - ACF+RBAC - ограничим доступ к темам |  | |||
| На этом уроке мы реализуем ролевую модель для контроллера тем | |||||
| 106 | Пользователи и роли - управление ролями и привилегиями - контроллер и таблица ролей |  | |||
| на этом уроке мы создадим контроллер и представление для управления ролями | |||||
| 107 | Пользователи и роли - управление ролями и привилегиями - форма добавления роли |  | |||
| На этом уроке мы создадим действие добавления роли и форму добавления роли | |||||
| 108 | Пользователи и роли - управление ролями и привилегиями - сохранение и удаление роли |  | |||
| На этом уроке мы реализуем сохранение роли, а также напишем алгоритм удаления роли | |||||
| Итого: 108 видеоуроков | 23 час. 33 мин. 25 тестов | 3 чел. | |||
| Финалисты: Жан, Николай Денисов, Tom . | |||||