Создание Доски объявлений с использованием фреймворка YII2.
Автор: Жданов В.В.
Данный курс - практикум по созданию сайта с использованием фреймворка YII2.
Цель: создание небольшого сайта с нуля до "коробочного" варианта, готового к размещению на хостинге.
Теории здесь не много, больше практической работы по принципу: "произвел действие - получил результат".
Также по максимуму используем функционал фреймворка YII2.
Программируем - и кайфуем!
# | Название видеоурока | Видео / Тесты | Решило | Рейтинг | Доступ |
---|---|---|---|---|---|
1 |
![]() |
|
|||
На этом уроке мы рассмотрим тематику разработки и настроим инструменты Отчёт отправил: 30514. Tom Выполнено за 16 мин. [Показать отчёт] Научился: Познакомился с тематикой курса, подготовил инструменты. |
|||||
2 |
![]() |
1 тест |
|||
На этом уроке мы создадим проект нового сайта, установим YII2 и запустим новый сайт на нашем локальном домене Отчёт отправил: 30514. Tom Выполнено за 1 час. 9 мин. [Показать отчёт] Научился: Научился создавать проект yii2. Установил yii в папку bulletin, создал виртуальный хост bull.local, добавил bull.local в файл hosts, ввел значение ключа валидации в файл config/web.php. |
|||||
3 |
![]() |
2 теста |
|||
На этом уроке мы настроим удобные для человека ссылки и поменяем название сайта при помощи настроек config/web.php Отчёт отправил: 30514. Tom Выполнено за 31 мин. [Показать отчёт] Научился: Изменил название сайта с помощью параметра name в файле config/web.php. Настроил более удобные для чтения ссылки на страницы сайта. |
|||||
4 |
![]() |
|
|||
На этом уроке мы создадим схему базы данных для нашего проекта
Отчёт отправил: 30514. Tom Выполнено за 21 мин. [Показать отчёт] Научился: Познакомился со структурой базы данных доски объявлений. Создал схему базы, написал таблицы и поля. |
|||||
5 |
![]() |
1 тест |
|||
На этом уроке мы создадим базу данных, подключим ее к нашему проекту и создадим таблицу пользователей при помощи механизма миграций Отчёт отправил: 30514. Tom Выполнено за 42 мин. [Показать отчёт] Научился: Научился создавать таблицу в базе данных с помощью механизма миграций yii2. |
|||||
6 |
![]() |
1 тест |
|||
На этом уроке мы подкорректируем модель User и реализуем аутентификацию на сайте через базу данных
Отчёт отправил: 30514. Tom Выполнено за 53 мин. [Показать отчёт] Научился: Научился создавать модель с помощью gii. Создал модель UserRecord по таблице user. Изменил модель User для связи с моделью UserRecord. Добавил нового пользователя в базу данных и сохранил его пароль в md5-хешированном виде. |
|||||
7 |
![]() |
|
|||
На этом уроке создадим таблицу и модель Информация о пользователе
Отчёт отправил: 30514. Tom Выполнено за 29 мин. [Показать отчёт] Научился: С помощью механизма миграций создал таблицу userinfo. Используя генератор gii создал модель UserinfoRecord. Добавил запись в таблицу userinfo. Сделал связь между UserRecord и UserinfoRecord. |
|||||
8 |
![]() |
1 тест |
|||
На этом уроке мы рассмотрим теоретические основы работы MVC и создадим новый контроллер в нашем проекте
Отчёт отправил: 30514. Tom Выполнено за 22 мин. [Показать отчёт] Научился: Научился создавать контроллер и представление. Создал новый контроллер UserController, добавил в него действие index, создал представление user/index. |
|||||
9 | MVC - информация о пользователе |
|
|||
На этом уроке мы получим данные о пользователе из базы в представление
Отчёт отправил: 30514. Tom Выполнено за 21 мин. [Показать отчёт] Научился: Научился обращаться к модели и находить информацию про пользователя по его id. Научился передавать информацию в представление. |
|||||
10 | Пользователь - кто зарегистрирован сейчас? |
1 тест |
|||
На этом уроке мы получим информацию о текущем зарегистрированном пользователе, а также сделаем рефакторинг кода Отчёт отправил: 30514. Tom Выполнено за 22 мин. [Показать отчёт] Научился: Научился получать данные сессии, id текущего пользователя. |
|||||
11 | Новый пользователь - заготовка и меню |
|
|||
На этом уроке мы создадим действие и представление для добавления пользователя, а также добавим пункт меню "Регистрация" Отчёт отправил: 30514. Tom Выполнено за 31 мин. [Показать отчёт] Научился: Научился редактировать пункты меню, добавил пункт Регистрация. В контроллере UserController создал действие actionAdd для регистрации нового пользователя и добавил представление user/adduser. |
|||||
12 | Новый пользователь - модель для формы |
1 тест |
|||
На этом уроке мы создадим модель параметров формы добавления пользователя
Отчёт отправил: 30514. Tom Выполнено за 38 мин. [Показать отчёт] Научился: Научился задавать правила для свойств модели с помощью функции rules. Научился задавать названия для свойств модели с помощью функции attributeLabels. |
|||||
13 | Новый пользователь - дизайн формы начало |
|
|||
На этом уроке мы зададим поля формы добавления пользователя
Отчёт отправил: 30514. Tom Выполнено за 45 мин. [Показать отчёт] Научился: Научился создавать html-форму с помощью yii. Добавил поля для логина, пароля и подтверждения пароля. |
|||||
14 | Новый пользователь - дизайн формы: поля и колонки |
1 тест |
|||
На этом уроке мы добавим все поля формы, кнопку сохранения, а также разместим поля в две колонки Отчёт отправил: 30514. Tom Выполнено за 24 мин. [Показать отчёт] Научился: Научился размещать элементы в две колонки с помощью сетки bootstrap. |
|||||
15 | Новый пользователь - сохранение нового пользователя |
1 тест |
|||
На этом уроке мы напишем алгоритм сохранения записи о пользователе и информации о нем
Отчёт отправил: 30514. Tom Выполнено за 1 час. 23 мин. [Показать отчёт] Научился: Научился сохранять модель ActiveRecord в базе данных. Научился делать redirect на страницу сайта. |
|||||
16 | Красивая аутентификация на сайте |
|
|||
На этом уроке мы поменяем дизайн формы входа на сайт
Отчёт отправил: 30514. Tom Выполнено за 21 мин. [Показать отчёт] Научился: Убрал служебную информацию из представления site/login. Перевел метки полей формы на русский язык. |
|||||
17 | Что доступно Юпитеру? |
1 тест |
|||
На этом занятии мы научимся управлять доступом к пунктам главного меню
Отчёт отправил: 30514. Tom Выполнено за 22 мин. [Показать отчёт] Научился: Научился управлять видимостью элементов главного меню в зависимости от типа посетителя сайта: гость или зарегистрированный пользователь. Сделал пункт меню "Обратная связь" видимым для зарегистрированного пользователя. Пункт меню "Регистрация" виден только для гостя. |
|||||
18 | Объявления - создание базы и модели |
1 тест |
|||
На этом уроке мы создадим таблицу bulletins при помощи миграций и сгенерируем для данной таблицы класс ActiveRecord
Отчёт отправил: 30514. Tom Выполнено за 27 мин. [Показать отчёт] Научился: Научился как с помощью механизма миграций создавать поле, в котором хранится дата и время и как создавать непустое поле. С помощью миграций создал таблицу bulletins. Используя gii создал модель BulletinsRecord. |
|||||
19 | Объявления - контроллер, представление и много записей |
1 тест |
|||
На этом уроке мы создадим контроллер и представление для работы с объявлениями, а также сделаем связь записей о пользователях и объявлениях типа "один-ко-многим" Отчёт отправил: 30514. Tom Выполнено за 32 мин. [Показать отчёт] Научился: Научился объявлять связь один ко многим с помощью функции hasMany. Создал контроллер BulletinsController, действие в нем actionIndex, представление /bulletins/index. |
|||||
20 | Объявление - функциональный дизайн страницы |
|
|||
На этом уроке мы сделаем дизайн страницы наших объявлений, который поможет нам работать с объявлениями в дальнейшем
Отчёт отправил: 30514. Tom Выполнено за 50 мин. [Показать отчёт] Научился: Научился создавать панель вкладок. Добавил три вкладки "Опубликованные", "Черновики" и "Удаленные". Добавил кнопку "Добавить объявление". |
|||||
21 | Объявление - ограничение доступа |
|
|||
На этом уроке мы ограничим доступ неавторизированного пользователя к странице управления объявлениями, а также решим некоторые технические вопросы
Отчёт отправил: 30514. Tom Выполнено за 1 час. 56 мин. [Показать отчёт] Научился: Научился добавлять иконку к кнопке. Ограничил доступ для гостей сайта к странице управления объявлениями. |
|||||
22 | Объявление - поля для пользовательских форм |
|
|||
На этом уроке мы создадим класс BulletinsForm и определим, какие поля будут использоваться при создании объявления Отчёт отправил: 30514. Tom Выполнено за 18 мин. [Показать отчёт] Научился: Создал класс BulletinsForm. Определил поля формы, правила заполнения и названия меток полей. |
|||||
23 | Объявление - форма добавления объявлений |
1 тест |
|||
На этом уроке мы создадим представление для добавления объявлений и действие контроллера, запускающего это представление Отчёт отправил: 30514. Tom Выполнено за 1 час. 0 мин. [Показать отчёт] Научился: Научился добавлять на форму элемент textarea. Создал форму для добавления объявления. |
|||||
24 | Объявление - сохранение в черновик |
|
|||
На этом уроке мы реализуем механизм сохранения нового объявления в черновик
Отчёт отправил: 30514. Tom Выполнено за 34 мин. [Показать отчёт] Научился: Создал метод setNewRecord для заполнения модели объявления из полей формы. Реализовал сохранение модели объявления в базу данных со статусом черновик. |
|||||
25 | Объявление - список |
|
|||
На этом уроке мы реализуем вывод сохраненных в базе объявлений в список
Отчёт отправил: 30514. Tom Выполнено за 1 час. 13 мин. [Показать отчёт] Научился: Научился обращаться к базе данных и получать информацию из таблицы с помощью метода find и указывать критерий выборки с помощью методов where и andWhere. |
|||||
26 | Объявление - всё на публику |
1 тест |
|||
На этом уроке мы сделаем наши объявления опубликованными
Отчёт отправил: 30514. Tom Выполнено за 1 час. 9 мин. [Показать отчёт] Научился: Научился находить и форматировать дату и время с помощью функции date. Реализовал изменение статуса объявления на 'public' при нажатии на кнопку "Опубликовать". |
|||||
27 | Объявление - публикация на главной странице |
1 тест |
|||
На этом уроке мы разместим наши опубликованные объявления на главной странице сайта
Отчёт отправил: 30514. Tom Выполнено за 50 мин. [Показать отчёт] Научился: Изменил главную страницу сайта. Добавил заголовок, вывел на главную страницу список всех опубликованных объявлений из базы данных. |
|||||
28 | Объявление - скрыть нельзя удалить |
|
|||
На этом уроке мы реализуем возможность помещать объявления в группу удаленных, восстанавливать их оттуда, а также отключать их просмотр Отчёт отправил: 30514. Tom Выполнено за 33 мин. [Показать отчёт] Научился: Реализовал переход между состояниями объявления "public", "wait" и "delete". |
|||||
29 | Объявление - статусный рефакторинг |
1 тест |
|||
НА этом уроке мы сделаем рефакторинг методов работы со статусом объявлений
Отчёт отправил: 30514. Tom Выполнено за 16 мин. [Показать отчёт] Научился: Создал метод setStatus, в который перенес код по изменению статуса объявления. |
|||||
30 | Объявление - рефакторинг редактирования |
|
|||
На этом уроке мы реализуем редактирование путем небольшого видоизменения функции добавления записи
Отчёт отправил: 30514. Tom Выполнено за 29 мин. [Показать отчёт] Научился: Реализовал возможность редактирования объявления. Настроил адрес ссылки у кнопки "Редактировать". |
|||||
31 | Объявление: запрос - в функцию & кнопка для изображений |
|
|||
На этом уроке мы сделаем рефакторинг метода index и добавим кнопки для перехода в режим работы с изображениями
Отчёт отправил: 30514. Tom Выполнено за 47 мин. [Показать отчёт] Научился: Создал метод getBulletins, который находит объявления с требуемым статусом. Добавил кнопки "Фото" к объявлениям в разделе черновики. Подготовил 5 фотографий дома для объявления. |
|||||
32 | Изображения - микс из миграций |
|
|||
На этом уроке мы через механизм миграций создадим таблицу photo и добавим поле для аватары в таблицу bulletins
Отчёт отправил: 30514. Tom Выполнено за 41 мин. [Показать отчёт] Научился: С помощью механизма миграций в yii создал таблицу photo и изменил структуру таблицы bulletins - добавил в нее столбец avatar. |
|||||
33 | Изображения - снова MVC |
|
|||
На этом уроке мы создадим модель, контролер и представление для работы с фото
Отчёт отправил: 30514. Tom Выполнено за 55 мин. [Показать отчёт] Научился: С помощью gii создал модель PhotoRecord. Создал контроллер PhotoController, в нем действие actionIndex. Добавил заготовку для представления photo/index. |
|||||
34 | Изображения - работа с моделью |
|
|||
На этом уроке мы передадим модель нашего объявления в представление
Отчёт отправил: 30514. Tom Выполнено за 45 мин. [Показать отчёт] Научился: Передал найденную по id модель BulletinsRecord в представление photo/index. Добавил в представление photo/index кнопку "Добавить фото" и вывод фотографий переданного объявления. |
|||||
35 | Работаем над ошибками - YII2 в помощь |
|
|||
На этом уроке мы разберемся, как работать над ошибками и читать сигналы дебаггера YII2
Отчёт отправил: 30514. Tom Выполнено за 56 мин. [Показать отчёт] Научился: Внес ошибку в метод getBulletins в контроллере BulletinsController. Вместо поиска по user_id указал userid. В результате на первом скриншоте yii сообщает о неизвестном столбце userid в блоке where. Yii сообщает запрос, который вывел ошибку SELECT * FROM `bulletins` WHERE (`userid`=1) AND (`status`='wait'). Если знать структуру таблицы bulletins, то можно понять, что ошибка в опечатке userid и надо заменить на правильное user_id. Теперь надо найти место в коде, которое вызвало эту ошибку. Далее ниже в пункте 1 показано место генерации исключения это файл Schema.php. Это внутренний файл Yii, который я не редактировал, значит ошибка возникла где-то ранее в цепочке вызовов функций. Далее ниже идет цепочка из 6 вызовов функций, которые так же как и 1 являются системными. Пролистав ниже можно найти пункт 7 (на втором скриншоте), в котором показан файл BulletinsController. Этот файл в отличие от первых 6 был создан мной, поэтому ошибка вполне может быть здесь. В 7 пункте Yii указывает на sql-запрос, в котором в блоке where идет обращение к userid. Ранее yii сообщал, что не может найти поле userid. Исправив userid на user_id ошибка исчезла. |
|||||
36 | Изображения - где живут картинки |
1 тест |
|||
На этом уроке мы создадим папку для изображений, разместим там изображение по умолчанию, а также создадим универсальные параметры пути и изображения по умолчанию
Отчёт отправил: 30514. Tom Выполнено за 47 мин. [Показать отчёт] Научился: Научился сохранять настройки сайта в массиве params. Создал папку images, добавил в нее изображение по умолчанию. В массиве params указал путь к папке изображений и названию файла с изображением по умолчанию. Использовал данные настройки в контроллере SiteController в действии actionIndex для вывода изображений объявлений. |
|||||
37 | Изображения - модель формы |
|
|||
На этом уроке мы создадим модель PhotoForm для работы с изображениями Отчёт отправил: 30514. Tom Выполнено за 54 мин. [Показать отчёт] Научился: Научился с помощью yii создавать правила для элемента загрузки файлов, указывать расширения загружаемых файлов. |
|||||
38 | Изображение - загрузочное представление |
|
|||
На этом занятии мы создадим форму представления, через которое будет загружаться изображение Отчёт отправил: 30514. Tom Выполнено за 31 мин. [Показать отчёт] Научился: Научился с помощью yii добавлять на форму элемент загрузки файлов, кнопку submit. |
|||||
39 | Изображение - загрузка файла на сайт |
1 тест |
|||
На этом уроке мы реализуем алгоритм загрузки изображений на сайт
Отчёт отправил: 30514. Tom Выполнено за 1 час. 19 мин. [Показать отчёт] Научился: Научился загружать файлы, сохранять их в требуемой папке. Научился определять имя загруженного файла и его расширение. |
|||||
40 | ПРОМЕЖУТОЧНЫЙ ВИДЕО ОБЗОР |
без видео |
|||
Мы уже многое сделали на нашем видеокурсе, и автору очень важно узнать Ваше мнение о данном курсе и получить обратную связь в форме видео-презентации и ответов на вопросы. Сделай видео-презентацию своего сайта. Отчёт отправил: 30514. Tom Выполнено за 31 мин. [Показать отчёт] Научился: На этом курсе я познакомился с фреймворком yii. Получил практику в программировании на php. Оценил удобство создания кода по модели MVC. Попутно научился оформлять страницы используя bootstrap. В дальнейшем на сайт можно добавить поиск по объявлениям и добавить тематики объявлений. Видеообзор: Bi2AmSuqhGA |
|||||
41 | Изображение - сохранение пути в базу |
|
|||
На этом уроке мы реализуем сохранение пути к файлу изображений в базу данных
Отчёт отправил: 30514. Tom Выполнено за 42 мин. [Показать отчёт] Научился: Реализовал сохранение пути загруженного изображения в поле link таблицы photo базы данных. |
|||||
42 | Изображение - управление картинками |
|
|||
На этом уроке мы займемся дизайном - создадим выпадающее меню управления изображением
Отчёт отправил: 30514. Tom Выполнено за 23 мин. [Показать отчёт] Научился: Научился создавать выпадающий список, добавлять в список элементы и разделять их сепаратором. |
|||||
43 | Изображение - JS - немного теории и пижонства |
1 тест |
|||
На этом уроке мы рассмотрим работу JS на yii2
Отчёт отправил: 30514. Tom Выполнено за 37 мин. [Показать отчёт] Научился: Научился добавлять JavaScript-код с помощью функции registerJs. Узнал как проверить видимость элемента используя is(':hidden'). Создал тестовый код на JavaScript, который показывает и скрывает текстовое поле при нажатии на кнопку. |
|||||
44 | Изображение - JS - глобализация |
|
|||
На этом уроке мы перенесем все скрипты JS в отдельный файл, а также реализуем открытие и скрытие элементов ввода информации Отчёт отправил: 30514. Tom Выполнено за 1 час. 6 мин. [Показать отчёт] Научился: Научился добавлять JavaScript к проекту yii через AppAssets. Указал путь к JS-файлам, создал папку js, в ней создал файл main.js. Реализовал показ поля для ввода информации при нажатии на кнопку информация в блоке управления. Реализовал скрытие поля при нажатии на кнопку с иконкой. |
|||||
45 | Изображение - JS - сохранение информации в базу |
1 тест |
|||
На этом уроке мы научим нашу систему сохранять информацию об изображениях в базу с использованием технологии ajax Отчёт отправил: 30514. Tom Выполнено за 1 час. 1 мин. [Показать отчёт] Научился: Научился передавать данные на сервер с помощью ajax. Реализовал обновление информации в поле info в таблице photo. Научился перезагружать страницу с помощью jQuery. |
|||||
46 | Изображение - JS - извлечение методом ajax |
|
|||
На этом уроке мы научим ajax получать информацию об изображениях из базы
Отчёт отправил: 30514. Tom Выполнено за 47 мин. [Показать отчёт] Научился: Научился с помощью ajax получать информацию из базы данных. Реализовал загрузку информации из поля info таблицы photo при нажатии кнопки "Информация". |
|||||
47 | Изображение - аватарка - вывод на главной странице |
|
|||
На этом уроке мы реализуем вывод главных изображений каждого объявления (далее - аватарки) на главной странице Отчёт отправил: 30514. Tom Выполнено за 34 мин. [Показать отчёт] Научился: Реализовал вывод аватарки объявления на главную страницу. |
|||||
48 | Изображение - аватарка - работа над ошибками связей |
|
|||
На данном уроке мы исправим ошибки вывода фотографий, очистим базу и заново загрузим в нашу базу фотографии в одно из объявлений Отчёт отправил: 30514. Tom Выполнено за 17 мин. [Показать отчёт] Научился: Исправил ошибку при запросе в блоке where, добавил проверку на авторизацию пользователя в действия контроллера PhotoController, очистил таблицу photo, заново загрузил изображения объявления. |
|||||
49 | Изображение - аватарка - как стать главной |
|
|||
На этом уроке мы создадим код, делающий любое фото главным
Отчёт отправил: 30514. Tom Выполнено за 39 мин. [Показать отчёт] Научился: Научился получать значение атрибута с помощью jquery-функции attr. Реализовал установку аватарки для объявления при нажатии на кнопку "Сделать главной" в блоке управления фотографией. |
|||||
50 | Изображение - удаление - ни шагу без подтверждения! |
|
|||
На этом уроке мы реализуем всплывающее окно подтверждения действия и протестируем результаты выбора различных вариантов Отчёт отправил: 30514. Tom Выполнено за 29 мин. [Показать отчёт] Научился: Научился вызывать всплывающее окно с подтверждением confirm при нажатии на кнопку "Удалить" в блоке управления изображением. Реализовал обработку нажатия клавиш ОК и Отмена. |
|||||
51 | Изображение - удаление - удаление файла и записи |
|
|||
На этом уроке мы реализуем удаление файлов изображений и записей о них из базы данных
Отчёт отправил: 30514. Tom Выполнено за 41 мин. [Показать отчёт] Научился: Научился удалять файл из файловой системы и удалять запись из таблицы базы данных. |
|||||
52 | Главная страница - подробности - ссылки и заготовка представлени |
|
|||
На этом уроке мы создадим ссылки для объявлений на главной странице и заготовку представления для подробного вывода информации объявления Отчёт отправил: 30514. Tom Выполнено за 21 мин. [Показать отчёт] Научился: Добавил новое действие actionViewBulletin в SiteController и создал представление для вывода подробной информации про объявление. |
|||||
53 | Главная страница - подробности - больше подробностей |
|
|||
На этом уроке мы выведем максимум информации на страницу подробностей объявления
Отчёт отправил: 30514. Tom Выполнено за 1 час. 9 мин. [Показать отчёт] Научился: Изменил представление viewbulletin, вывел главное изображение объявления и более подробную информацию. |
|||||
54 | Главная страница - подробности - расширяя информацию |
1 тест |
|||
На этом уроке мы внесем в наш код изменения, которые позволят сохранять объявления с большим количеством информации Отчёт отправил: 30514. Tom Выполнено за 44 мин. [Показать отчёт] Научился: Научился изменять тип столбца таблицы. Научился добавлять <br> html-переводы строки с помощью функции nl2br. Изменил тип столбца info с varchar на longtext. Отредактировал объявление по продаже дома, ввел более подробный текст в поле info. |
|||||
55 | Главная страница - оформление - дизайн объявления |
|
|||
На этом уроке мы зададим стиль дизайна объявления
Отчёт отправил: 30514. Tom Выполнено за 1 час. 2 мин. [Показать отчёт] Научился: Научился создавать элементы с классом badge. Оформил в badge дату публикации. Вывел информацию про объявление в виде панели и таблицы. |
|||||
56 | Главная страница - оформление - дизайн элементов базовой страницы |
1 тест |
|||
На этом уроке мы выведем информацию о себе в элементе footer и сделаем главное меню стильным и красивым
Отчёт отправил: 30514. Tom Выполнено за 34 мин. [Показать отчёт] Научился: Научился изменять footer и главное меню сайта. Заменил цвет фона главного меню, цвет текста ссылок и цвет фона ссылок при наведении указателя мышки. |
|||||
57 | Главная страница - оформление - ловим цвет пикселя |
|
|||
На этом уроке мы рассмотрим использование инструментов определения цвета пикселя (Пипетка) Отчёт отправил: 30514. Tom Выполнено за 30 мин. [Показать отчёт] Научился: Научился пользоваться инструментом Пипетка. Определил цвет с помощью Пипетки и с помощью сайта https://sanstv.ru/color |
|||||
58 | Главная страница - оформление - смотрим все изображения |
|
|||
На этом уроке мы реализуем просмотр всех изображений объявления "не хуже, чем на Avito"
Отчёт отправил: 30514. Tom Выполнено за 1 час. 10 мин. [Показать отчёт] Научился: Реализовал вывод всех изображений на страницу текущего объявления, добавил обработку события hover при выборе изображения. |
|||||
59 | Главная страница - оформление - стильный логотип |
|
|||
На этом уроке мы реализуем вывод логотипа в иконку проекта и в пункт меню перехода на главную страницу
Отчёт отправил: 30514. Tom Выполнено за 34 мин. [Показать отчёт] Научился: Научился менять логотип проекта на вкладке браузера и в навигационном меню. |
|||||
60 | Главная страница - оформление - оповещения через баннер |
|
|||
На этом уроке мы создадим баннер для оповещений, новостей
Отчёт отправил: 30514. Tom Выполнено за 21 мин. [Показать отчёт] Научился: Научился создавать баннер с помощью yii2. Баннер можно использовать для оповещения о новостях сайта. |
|||||
61 | Разделы (темы) - немного теории |
|
|||
На этом уроке мы рассмотрим вопрос тематик объявлений на нашем сайте, а также составим план (структуру) таблицы тем Themes и связующей таблицы ThemesBulletins
Отчёт отправил: 30514. Tom Выполнено за 18 мин. [Показать отчёт] Научился: Составил структуру таблицы Разделов (Themes) и связующей таблицы Themesbulletins. |
|||||
62 | Разделы (темы) - миграции с внешними ключами |
|
|||
На этом уроке мы создадим миграции таблиц themes и themesbulletins, сами эти таблицы и их модели ActiveRecord с внешними связями
Отчёт отправил: 30514. Tom Выполнено за 47 мин. [Показать отчёт] Научился: Научился создавать связь по внешним ключам между таблицами. С помощью механизма миграций создал таблицы themes и themesbulletins. С помощью gii создал модели ThemesRecord и ThemesbulletinsRecord. |
|||||
63 | Обратная связь - мозговой штурм - внештатные ситуации |
|
|||
В данном уроке попрошу Вас выполнить небольшую самостоятельную работу и дать обратную связь. Отчёт отправил: 30514. Tom Выполнено за 1 час. 27 мин. [Показать отчёт] Научился: Научился делать экспорт и импорт базы данных с помощью phpmyadmin. Ошибки на сайте: 1) При редактировании объявления в поле "Информация" появляются некорректные <br />, причем с каждым переходом по ссылке редактирования их количество увеличивается (первый скриншот). 2) В поля формы можно добавить html, css, js. Для примера я вставил <script> alert('hello from js'); </script> в поле "Информация", разметку <small>дом</small> в поле "Заголовок" и стили в <span style="font-size: 40px;">Гусляр</span> в поле "Город". На втором скриншоте показан результат этих добавлений. 3) На втором скриншоте показана ошибка разметки при уменьшении ширины окна браузера - изображение вышло из своих границ. |
|||||
64 | Разделы (темы) - вывод тем в объявлении |
|
|||
На этом уроке мы реализуем вывод тем на странице объявления
Отчёт отправил: 30514. Tom Выполнено за 41 мин. [Показать отчёт] Научился: Добавил в таблицы themes и themesbulletins несколько записей, исправил ошибки связей в моделях ThemesRecord, ThemesbulletinsRecord, реализовал вывод тем объявления в представлении viewbulletin. |
|||||
65 | Разделы (темы) - меню тематик |
|
|||
На этом уроке мы реализуем вывод ссылок на темы на главной странице и подсчет объявлений в каждой теме
Отчёт отправил: 30514. Tom Выполнено за 25 мин. [Показать отчёт] Научился: Вывел на главную страницу список всех тем из таблицы themes и количество объявлений по каждой теме. |
|||||
66 | Разделы (темы) - тематические выборки |
|
|||
На этом уроке мы реализуем выбор объявлений по темам и вывод их на основную страницу
Отчёт отправил: 30514. Tom Выполнено за 44 мин. [Показать отчёт] Научился: Добавил адреса к ссылкам тем на главной странице. Реализовал выбор опубликованных объявлений по выбранной теме и вывод их на главной странице. |
|||||
67 | Разделы (темы) - полезные переходы |
|
|||
На этом уроке мы реализуем возвращение со страницы объявлений на предыдущую страницу, а также переходы по темам объявления по типу хештегов
Отчёт отправил: 30514. Tom Выполнено за 34 мин. [Показать отчёт] Научился: Добавил ссылку на предыдущую страницу и добавил адреса к ссылкам для перехода на список объявлений по выбранной теме. |
|||||
68 | Разделы (темы) - администрирование - теория и заготовки |
|
|||
На этом уроке мы создадим контроллер для администрирования разделов (тем) и представление index
Отчёт отправил: 30514. Tom Выполнено за 14 мин. [Показать отчёт] Научился: Добавил пункт "Справочник тем" в главное меню, создал контроллер ThemesController, в нем действие actionIndex и создал представление themes/index. |
|||||
69 | Разделы (темы) - администрирование - все темы в таблицу |
|
|||
На этом уроке мы выведем существующие темы в таблицу и зададим им элементы управления
Отчёт отправил: 30514. Tom Выполнено за 18 мин. [Показать отчёт] Научился: Создал кнопку "Добавит тему", вывел темы из базы данных в таблицу, добавил к каждой теме кнопки редактировать и удалить. |
|||||
70 | Разделы (темы) - администрирование - подтверждение удаления |
|
|||
На этом уроке мы реализуем алгоритм подтверждения удаления и создадим соответствующее представление
Отчёт отправил: 30514. Tom Выполнено за 29 мин. [Показать отчёт] Научился: Создал новое представление themes/deletequery, в котором реализовал интерфейс для подтверждения удаления темы. |
|||||
71 | Разделы (темы) - администрирование - удаление разделов и чистка связей |
|
|||
На этом уроке мы окончательно удалим раздел, а перед этим удалим все его связи с объявлениями
Отчёт отправил: 30514. Tom Выполнено за 13 мин. [Показать отчёт] Научился: Реализовал удаление темы из таблицы themes и всех связей по теме в таблице themesbulletins. |
|||||
72 | Разделы (темы) - администрирование - Обычный ThemesForm |
|
|||
На этом уроке мы создадим модель ThemesForm, заготовку действия Add в контроллере Themes и представление под него
Отчёт отправил: 30514. Tom Выполнено за 15 мин. [Показать отчёт] Научился: Создал действие actionAdd в контроллере ThemesController, добавил представление themes/add. Создал модель ThemesForm. |
|||||
73 | Разделы (темы) - исправление подсчета и отображение текущей темы |
|
|||
Hа этом уроке мы исправим ошибку подсчета, обнаруженную в процессе прохождения курса, а также отобразим текущую тему, по которой выборка объявлений, в баннере Отчёт отправил: 30514. Tom Выполнено за 15 мин. [Показать отчёт] Научился: Исправил ошибку подсчета количества объявлений по темам. Добавил вывод в баннер информации о просматриваемой теме. |
|||||
74 | Разделы (темы) - администрирование - "темное" представление |
|
|||
На этом уроке мы создадим поля для редактирования или добавления темы в представлении themes\add
Отчёт отправил: 30514. Tom Выполнено за 49 мин. [Показать отчёт] Научился: С помощью yii и bootstrap создал форму для добавления темы. Создал ссылку на кнопке "Отмена" для возврата в представление themes/index. |
|||||
75 | Разделы (темы) - администрирование - волшебный выпадающий список |
1 тест |
|||
На этом уроке мы создадим выпадающий список выбора родительской темы
Отчёт отправил: 30514. Tom Выполнено за 15 мин. [Показать отчёт] Научился: Научился создавать выпадающий список с помощью yii, задавать ему значения элементов и добавлять текстовое сообщение по умолчанию. |
|||||
76 | Разделы (темы) - администрирование - сохранение темы |
|
|||
На этом уроке мы реализуем сохранение добавляемых и редактируемых тем
Отчёт отправил: 30514. Tom Выполнено за 37 мин. [Показать отчёт] Научился: Реализовал добавление новой темы и редактирование выбранной темы. Реализовал сохранение изменений в таблице themes. |
|||||
77 | Разделы (темы) - администрирование - рефакторинг и валидация |
|
|||
На этом уроке мы сделаем рефакторинг нашего представления add и валидацию данных формы ThemesForm
Отчёт отправил: 30514. Tom Выполнено за 17 мин. [Показать отчёт] Научился: Перенес выборку родительских тем из представления themes/add в модель ThemesForm. Добавил валидацию поля title для формы ThemesForm. |
|||||
78 | Связи объявлений и тем - заготовка |
|
|||
На этом уроке мы создадим действие в контроллере BulletinsController и представление, которые помогут нам работать со связями объявлений и тем Отчёт отправил: 30514. Tom Выполнено за 28 мин. [Показать отчёт] Научился: Добавил кнопку "Темы" в представление bulletins/index. Создал действие actionAddtheme в контроллере BulletinsController. Создал представление bulletins/addtheme, в котором вывел все темы выбранного объявления. |
|||||
79 | Связи объявлений и тем - добавление новой темы |
|
|||
На этом уроке мы научим нашу систему добавлять новую тему в объявление (делать связь темы и объявления)
Отчёт отправил: 30514. Tom Выполнено за 37 мин. [Показать отчёт] Научился: Создал модель для формы ThemesbulletinsForm, передал ее в представление bulletins/addtheme. В представлении добавил выпадающий список, который заполнил списком всех тем из базы данных. Реализовал добавление новой темы к объявлению. |
|||||
80 | Связи объявлений и тем - темы, которых не было |
1 тест |
|||
На этом уроке мы научим нашу систему выводить в список добавляемых в объявление тем только те, которые не прикреплены к нашему объявлению
Отчёт отправил: 30514. Tom Выполнено за 19 мин. [Показать отчёт] Научился: Научился выбирать поля таблицы с помощью функции select() в yii2. Научился фильтровать записи при помощи where и 'not in'. Реализовал заполнение выпадающего списка темами, которых нет у текущего объявления. |
|||||
81 | Связи объявлений и тем - темы, которых не будет |
|
|||
На этом уроке мы научим нашу систему удалять из объявлений темы, к которым наше объявление привязывать не надо
Отчёт отправил: 30514. Tom Выполнено за 18 мин. [Показать отчёт] Научился: Добавил адрес ссылки для удаления темы в представлении bulletins/addtheme. Создал действие actionDeletetheme в контроллере BulletinsController. Реализовал в нем удаление темы из списка тем в объявлении. |
|||||
82 | Глобальный поиск - поле поиска в меню |
|
|||
На этом уроке мы добавим поле поиска в навигационное меню сайта, а также решим вопрос с активными пунктами меню.
Отчёт отправил: 30514. Tom Выполнено за 1 час. 46 мин. [Показать отчёт] Научился: Добавил на навигационное меню текстовое поле для поиска по сайту. Для этого в файле views/layouts/main.php добавил форму через ActiveForm и поле для поиска с помощью Html::input. |
|||||
83 | Глобальный поиск - ищем глобально |
|
|||
На этом уроке мы создадим алгоритм поиска по вводимому в поле search контенту
Отчёт отправил: 30514. Tom Выполнено за 26 мин. [Показать отчёт] Научился: Научился выполнять поиск в таблице базы данных с помощью операторов AND, OR, LIKE с использованием yii2. Добавил действие actionSearch в контроллер SiteController. Реализовал в нем поиск всех объявлений, у которых поле статус равно значению public и содержат искомый текст в поле заголовок, информация или город. |
|||||
84 | Расширенный поиск - группировка пунктов главного меню |
|
|||
На этом уроке мы сгруппируем пункты главного меню в подразделы, и сделаем в нем ссылку на страницу расширенного поиска Отчёт отправил: 30514. Tom Выполнено за 1 час. 6 мин. [Показать отчёт] Научился: Научился группировать пункты меню. Создал группу меню "Администрирование", перенес в нее две ссылки "Мои объявления" и "Справочник тем". Создал новую группу меню для поиска, добавил в нее ссылку "Расширенный поиск". |
|||||
85 | Расширенный поиск - заготовки и план |
|
|||
На этом уроке мы набросаем план будущей страницы расширенного поиска, а также создадим действие контроллера и заготовку представления расширенного поиска Отчёт отправил: 30514. Tom Выполнено за 13 мин. [Показать отчёт] Научился: Создал действие actionAdvsearch в контроллере SiteController, создал представление site/advsearch. Вывел в нем навигацию breadcrumbs. Составил план страницы расширенного поиска. |
|||||
86 | Расширенный поиск - стили и форма |
|
|||
На этом уроке мы внесем исправления в стили субменю и сделаем модель формы расширенного поиска
Отчёт отправил: 30514. Tom Выполнено за 36 мин. [Показать отчёт] Научился: Создал модель формы расширенного поиска AdvsearchForm. Добавил в нее поля для поиска и создал метод rules. |
|||||
87 | Расширенный поиск - дизайн текстовых полей и кнопки |
|
|||
На этом уроке мы прокачаем навыки дизайна текстовых полей, создания активной формы в представлении, а также создания кнопки через хелперы yii2 Отчёт отправил: 30514. Tom Выполнено за 21 мин. [Показать отчёт] Научился: Добавил на представление site/advsearch 4 текстовых поля для поиска по заголовку, информации, городу и контактам. Добавил кнопку submit. |
|||||
88 | Расширенный поиск - цена - выбор варианта |
|
|||
На этом уроке мы создадим систему управления выбором варианта поиска по цене
Отчёт отправил: 30514. Tom Выполнено за 19 мин. [Показать отчёт] Научился: Научился добавлять и удалять css-классы у элемента с помощью jQuery. Создал список из трех элементов для разных вариантов поиска по ценам. |
|||||
89 | Расширенный поиск - цена - невидимые поля |
|
|||
На этом уроке мы создадим невидимые блоки с полями поиска цены, которые становятся видимыми при нажатии определенного пункта навигатора
Отчёт отправил: 30514. Tom Выполнено за 38 мин. [Показать отчёт] Научился: Добавил три div с классом .priceblock. Разместил в первом блоке поле для ввода точного значение цены, во втором два поля для ввода диапазона цен и в третьем блоке добавил radio button по выбору "Больше", "Меньше" и поле для ввода цены. С помощью атрибута data-id и javascript реализовал скрытие всех блоков .priceblock и показ одного активного блока по нажатой ссылкой. |
|||||
90 | Расширенный поиск - дата публикации - виджет извне |
|
|||
На этом уроке мы установим в наш проект компонент jui от стороннего разработчика и создадим календарики для выбора дат Отчёт отправил: 30514. Tom Выполнено за 41 мин. [Показать отчёт] Научился: Научился устанавливать библиотеку с помощью composer. Установил библиотеку JUI. Добавил два поля для ввода диапазона даты публикации. Установил для них язык "ru" и формат данных "yyyy-MM-dd". |
|||||
91 | Расширенный поиск - результаты выборки - частичное представление |
|
|||
На этом уроке мы рассмотрим возможность использования частичного представления в yii2-проекте и выведем в частичное представление карточку объявления
Отчёт отправил: 30514. Tom Выполнено за 37 мин. [Показать отчёт] Научился: Научился создавать частичное представление и использовать его внутри другого представления. Создал частичное представление site/bulletin. Заменил вывод опубликованных объявлений в представлении site/index c помощью частичного представления site/bulletin. Реализовал вывод результатов поиска в представлении site/advsearch с помощью частичного представления site/bulletin при нажатии кнопки "Выборка". |
|||||
92 | Расширенный поиск - генератор поиска - возвращение к SQL-запросу |
|
|||
На этом уроке мы создадим генератор отчета, используя работу ActiveRecord фреймворка yii2 c sql-запросами, и включим в него поиск по текстовым полям формы расширенного поиска Отчёт отправил: 30514. Tom Выполнено за 26 мин. [Показать отчёт] Научился: Научился выполнять sql запрос с помощью метода yii2 findBySql. Реализовал поиск объявлений по полям "Заголовок", "Информация", "Город", "Контакты". |
|||||
93 | Расширенный поиск - генератор поиска - ограничивающие даты |
|
|||
На этом уроке мы добавим в генератор отчета расширенного поиска выборку по датам публикации Отчёт отправил: 30514. Tom Выполнено за 30 мин. [Показать отчёт] Научился: Добавил информацию о дате публикации в частичное представление site/bulletin. Реализовал поиск объявлений по дате публикации. |
|||||
94 | Расширенный поиск - генератор поиска - три вида цены и один POST |
|
|||
На этом уроке мы реализуем различные варианты выборки объявлений по цене и добавим их в наш генератор расширенного поиска Отчёт отправил: 30514. Tom Выполнено за 38 мин. [Показать отчёт] Научился: Добавил свойство price_more в модель AdvsearchForm и представление site/advsearch. Добавил значения атрибутов value для переключателей поиска по цене "Больше" или "Меньше". Реализовал поиск по точному значению цены, диапазону цен и значениям цен больше или меньше заданной. |
|||||
95 | Обратная связь - свой сайт объявлений |
без видео |
|||
И снова обратная связь.Подумаем самостоятельно и ответим на вопросы: Отчёт отправил: 30514. Tom Выполнено за 18 мин. [Показать отчёт] Научился: 1. Доска объявлений по продаже компьютеров и комплектующих. 2. computer-bulletin-board.ru 3. Сайт по продаже на вторичном рынке компьютеров, с более низкими ценами и товарами снятыми с производства. |
|||||
96 | Расширенный поиск - генератор поиска - показать, что нужно |
|
|||
На этом уроке мы реализуем отображение той вкладки поиска по ценам, по которой производился поиск Отчёт отправил: 30514. Tom Выполнено за 38 мин. [Показать отчёт] Научился: Реализовал сохранение выбранного элемента radio во вкладке "Больше ... меньше". Реализовал запоминание выбранной вкладки поиска по цене. |
|||||
97 | Работа с документацией Yii2 |
|
|||
На этом уроке переходим на один из официальных сайтов по Yii2 и, пользуясь помощью документации, реализовываем одну из своих идей Отчёт отправил: 30514. Tom Выполнено за 4 час. 26 мин. [Показать отчёт] Научился: В своем отчете https://www.videosharp.info/30514/checking/bulletin=2582 я указал три ошибки на сайте. В этом уроке их исправлял. Первая проблема: некорректные элементы br в тексте объявления. Для решения первой проблемы я перенес вызов функции nl2br для поля info из модели BulletinsForm в код представления site/viewbulletin. Теперь в базе данных нет текста br, он появляется только в момент показа объявления в представлении. Вторая проблема: встраивание html, css, javascript в поля формы. Чтобы решить вторую проблему я использовал документацию по yii по адресу https://www.yiiframework.com/doc/guide/2.0/en/structure-views#security . Добавил вызовы функций Html::encode и HtmlPurifier::process вокруг вывода информации из базы данных в представлении. Настроил вызов HtmlPurifier::process для того, чтобы разрешить только теги br, а все остальные теги экранировались. Теперь все html-теги(кроме br для переноса строки в поле info), css-правила и javascript-код экранированы и не влияют на дизайн страницы. Javascript код не запускается. Третья проблема: при уменьшении ширины окна изображение выходит за границы левой колонки. Третья ошибка не связана напрямую с yii2, здесь дело в верстке. Для ее решения я изменил значение атрибута style на style="max-width: 100%; height: 400px; object-fit: contain;". Теперь изображение занимает не больше, чем 100% ширины родительского элемента и не выходит за границу левой колонки. Высота фиксирована, поэтому миниатюры под изображением не прыгают. И object-fit: contain необходим для сохранения пропорций изображения при его замене после выбора миниатюры. |
|||||
98 | Пользователи и роли - планирование ролевой модели |
|
|||
На этом уроке мы составим ролевую модель пользователей нашего сайта
Отчёт отправил: 30514. Tom Выполнено за 10 мин. [Показать отчёт] Научился: Создал ролевую модель для пользователей на сайте доски объявлений. |
|||||
99 | Пользователи и роли - фильтры контроля доступа ACF - теория и эксперименты |
|
|||
На этом уроке мы рассмотрим принципы работы фильтров контроля доступа ACF
Отчёт отправил: 30514. Tom Выполнено за 11 мин. [Показать отчёт] Научился: Научился открывать доступ к действию контроллера только для зарегистрированных пользователей с помощью метода behaviors и свойства access. |
|||||
100 | Пользователи и роли - фильтры контроля доступа ACF - фильтруем всё |
|
|||
На этом уроке мы сами создадим метод behaviors() в BulletinsController и зададим нужные фильтры для действий контроллера
Отчёт отправил: 30514. Tom Выполнено за 34 мин. [Показать отчёт] Научился: Добавил методы behaviors для контроллеров BulletinsController, PhotoController, ThemesController и UserController. Реализовал в них доступ к действиям контроллеров для зарегистрированных пользователей. Удалил переадресацию на /site/login в действиях контроллеров. |
|||||
101 | Пользователи и роли - роли через RBAC - теория, установка и миграции |
|
|||
На этом уроке мы установим расширение RBAC, настроим подключение к RBAC и создадим базы для авторизации при помощи механизма миграции Отчёт отправил: 30514. Tom Выполнено за 20 мин. [Показать отчёт] Научился: С помощью composer установил расширение "Yii2 RBAC Extension". Настроил подключение компонента в файлах web.php и console.php. С помощью миграций создал таблицы RBAC. |
|||||
102 | Пользователи и роли - роли через RBAC - тесты и практика |
|
|||
На этом уроке мы создадим тестовые роли и разрешения, а также проверим работу контроллера согласно разрешений Отчёт отправил: 30514. Tom Выполнено за 51 мин. [Показать отчёт] Научился: В действии site/authinit создал три разрешения: на добавление, изменение и удаление объявления. Добавил две роли: модератор и автор объявления. Для модератора определил возможность удалять и изменять объявления. Для автора доступны все три разрешения на добавление, изменение и удаление объявления. Присвоил роли модератора и автора двум пользователям из таблицы user. Создал действие site/testrole и представление testrole, в котором вывел доступные разрешения для текущего зарегистрированного пользователя. |
|||||
103 | Пользователи и роли - роли через RBAC - вносим действия в план |
|
|||
На этом уроке мы добавим действия к ролям в нашей актуальной ролевой модели
Отчёт отправил: 30514. Tom Выполнено за 10 мин. [Показать отчёт] Научился: Написал действия к ролям SuperUser, Admin, Moderator, User, Гость на сайте доски объявлений. |
|||||
104 | Пользователи и роли - роли через RBAC - реализация плана |
|
|||
На этом уроке мы создадим актуальные роли и действия для пользователей нашего сайта
Отчёт отправил: 30514. Tom Выполнено за 1 час. 22 мин. [Показать отчёт] Научился: В действии site/authinit cоздал роли SuperUser, Admin, Moderator, User. Создал действия для этих ролей. |
|||||
105 | Пользователи и роли - ACF+RBAC - ограничим доступ к темам |
|
|||
На этом уроке мы реализуем ролевую модель для контроллера тем
Отчёт отправил: 30514. Tom Выполнено за 31 мин. [Показать отчёт] Научился: Изменил ролевую модель для контроллера тем: доступ к действиям контроллера разрешен пользователям, которые имеют роль admin и выше. Таким образом, superuser и admin могут управлять темами, а moderator и user - нет. |
|||||
106 | Пользователи и роли - управление ролями и привилегиями - контроллер и таблица ролей |
|
|||
на этом уроке мы создадим контроллер и представление для управления ролями
Отчёт отправил: 30514. Tom Выполнено за 24 мин. [Показать отчёт] Научился: Создал контроллер RolesController, добавил в него действие actionIndex, создал представление /roles/index. В этом представлении вывел в таблицу все роли, их описания и кнопки управления. Добавил в главное меню ссылку "Управление ролями". |
|||||
107 | Пользователи и роли - управление ролями и привилегиями - форма добавления роли |
|
|||
На этом уроке мы создадим действие добавления роли и форму добавления роли Отчёт отправил: 30514. Tom Выполнено за 21 мин. [Показать отчёт] Научился: Создал модель RolesForm, добавил действие actionAddrole в RolesController. Создал представление roles/addrole, где вывел форму с текстовым полем и кнопкой submit. |
|||||
108 | Пользователи и роли - управление ролями и привилегиями - сохранение и удаление роли |
|
|||
На этом уроке мы реализуем сохранение роли, а также напишем алгоритм удаления роли
Отчёт отправил: 30514. Tom Выполнено за 38 мин. [Показать отчёт] Научился: Научился устанавливать атрибут только для чтения для текстового поля формы. Реализовал сохранение и удаление роли. В действии actionAddrole реализовал алгоритм добавления роли. Создал действие actionRemoverole и представление roles/removerole. |
|||||
Итого: 108 видеоуроков |
23 час. 33 мин. 25 тестов |
3 чел. | |||
Финалисты: Жан, Николай Денисов, Tom . |