Обучение C#

Формула программиста

основатель — Волосатов Евгений Витольдович
Поздравляю с 1 сентября! Система начисления Байтов работает.
Open shop Доска объявлений

Доска объявлений

Создание Доски объявлений с использованием фреймворка YII2.

Автор: Жданов В.В.

Данный курс - практикум по созданию сайта с использованием фреймворка YII2.
Цель: создание небольшого сайта с нуля до "коробочного" варианта, готового к размещению на хостинге.
Теории здесь не много, больше практической работы по принципу: "произвел действие - получил результат".
Также по максимуму используем функционал фреймворка YII2.

Программируем - и кайфуем!



Список уроков | фото | видео

# Название видеоурока Видео / Тесты Решило Рейтинг Доступ
1 FREE О проекте и про инструменты 00:08:31
26 чел. ★ 4.8 Done
  На этом уроке мы рассмотрим тематику разработки и настроим инструменты


Отчёт отправил: 30514. Tom Выполнено за 16 мин. [Показать отчёт]
Научился: Познакомился с тематикой курса, подготовил инструменты. 
2 FREE Создание проекта YII2 00:13:49
1 тест
22 чел. ★ 4.8 Done
  На этом уроке мы создадим проект нового сайта, установим YII2 и запустим новый сайт на нашем локальном домене


Отчёт отправил: 30514. Tom Выполнено за 1 час. 9 мин. [Показать отчёт]
Научился: Научился создавать проект yii2. Установил yii в папку bulletin, создал виртуальный хост bull.local, добавил bull.local в файл hosts, ввел значение ключа валидации в файл config/web.php. 
3 FREE Комфортная конфигурация 00:08:16
2 теста
21 чел. ★ 4.8 Done
  На этом уроке мы настроим удобные для человека ссылки и поменяем название сайта при помощи настроек config/web.php

Отчёт отправил: 30514. Tom Выполнено за 31 мин. [Показать отчёт]
Научился: Изменил название сайта с помощью параметра name в файле config/web.php. Настроил более удобные для чтения ссылки на страницы сайта. 
4 FREE Схема базы данных 00:14:25
21 чел. ★ 4.8 Done
  На этом уроке мы создадим схему базы данных для нашего проекта
Отчёт отправил: 30514. Tom Выполнено за 21 мин. [Показать отчёт]
Научился: Познакомился со структурой базы данных доски объявлений. Создал схему базы, написал таблицы и поля. 
5 FREE Подключение к базе данных пользователя и миграция пользователей 00:13:36
1 тест
21 чел. ★ 4.8 Done
  На этом уроке мы создадим базу данных, подключим ее к нашему проекту и создадим таблицу пользователей
при помощи механизма миграций
Отчёт отправил: 30514. Tom Выполнено за 42 мин. [Показать отчёт]
Научился: Научился создавать таблицу в базе данных с помощью механизма миграций yii2. 
6 FREE Аутентификация - захешированный пользователь из БД 00:16:58
1 тест
20 чел. ★ 4.8 Done
  На этом уроке мы подкорректируем модель User  и реализуем аутентификацию на сайте через базу данных
Отчёт отправил: 30514. Tom Выполнено за 53 мин. [Показать отчёт]
Научился: Научился создавать модель с помощью gii. Создал модель UserRecord по таблице user. Изменил модель User для связи с моделью UserRecord. Добавил нового пользователя в базу данных и сохранил его пароль в md5-хешированном виде. 
7 FREE Информация о пользователе 00:13:28
19 чел. ★ 4.8 Done
  На этом уроке создадим таблицу и модель Информация о пользователе
Отчёт отправил: 30514. Tom Выполнено за 29 мин. [Показать отчёт]
Научился: С помощью механизма миграций создал таблицу userinfo. Используя генератор gii создал модель UserinfoRecord. Добавил запись в таблицу userinfo. Сделал связь между UserRecord и UserinfoRecord. 
8 FREE MVC - немного теории 00:12:09
1 тест
19 чел. ★ 4.8 Done
  На этом уроке мы рассмотрим теоретические основы работы MVC и создадим новый контроллер в нашем проекте
Отчёт отправил: 30514. Tom Выполнено за 22 мин. [Показать отчёт]
Научился: Научился создавать контроллер и представление. Создал новый контроллер UserController, добавил в него действие index, создал представление user/index. 
9 MVC - информация о пользователе 00:09:33
18 чел. ★ 5 Done
  На этом уроке мы получим данные о пользователе из базы в представление
Отчёт отправил: 30514. Tom Выполнено за 21 мин. [Показать отчёт]
Научился: Научился обращаться к модели и находить информацию про пользователя по его id. Научился передавать информацию в представление. 
10 Пользователь - кто зарегистрирован сейчас? 00:09:22
1 тест
18 чел. ★ 4.9 Done
  На этом уроке мы получим информацию о текущем зарегистрированном пользователе, а также сделаем рефакторинг кода

Отчёт отправил: 30514. Tom Выполнено за 22 мин. [Показать отчёт]
Научился: Научился получать данные сессии, id текущего пользователя. 
11 Новый пользователь - заготовка и меню 00:09:17
18 чел. ★ 5 Done
  На этом уроке мы создадим действие и представление для добавления пользователя,
а также добавим пункт меню "Регистрация"
Отчёт отправил: 30514. Tom Выполнено за 31 мин. [Показать отчёт]
Научился: Научился редактировать пункты меню, добавил пункт Регистрация. В контроллере UserController создал действие actionAdd для регистрации нового пользователя и добавил представление user/adduser. 
12 Новый пользователь - модель для формы 00:15:43
1 тест
18 чел. ★ 5 Done
  На этом уроке мы создадим модель параметров формы добавления пользователя
Отчёт отправил: 30514. Tom Выполнено за 38 мин. [Показать отчёт]
Научился: Научился задавать правила для свойств модели с помощью функции rules. Научился задавать названия для свойств модели с помощью функции attributeLabels. 
13 Новый пользователь - дизайн формы начало 00:16:37
18 чел. ★ 5 Done
  На этом уроке мы зададим поля формы добавления пользователя
Отчёт отправил: 30514. Tom Выполнено за 45 мин. [Показать отчёт]
Научился: Научился создавать html-форму с помощью yii. Добавил поля для логина, пароля и подтверждения пароля. 
14 Новый пользователь - дизайн формы: поля и колонки 00:09:17
1 тест
18 чел. ★ 5 Done
  На этом уроке мы добавим все поля формы, кнопку сохранения, а также разместим поля в две колонки


Отчёт отправил: 30514. Tom Выполнено за 24 мин. [Показать отчёт]
Научился: Научился размещать элементы в две колонки с помощью сетки bootstrap. 
15 Новый пользователь - сохранение нового пользователя 00:20:06
1 тест
18 чел. ★ 5 Done
  На этом уроке мы напишем алгоритм сохранения записи о пользователе и информации о нем
Отчёт отправил: 30514. Tom Выполнено за 1 час. 23 мин. [Показать отчёт]
Научился: Научился сохранять модель ActiveRecord в базе данных. Научился делать redirect на страницу сайта. 
16 Красивая аутентификация на сайте 00:07:37
18 чел. ★ 5 Done
  На этом уроке мы поменяем дизайн формы входа на сайт
Отчёт отправил: 30514. Tom Выполнено за 21 мин. [Показать отчёт]
Научился: Убрал служебную информацию из представления site/login. Перевел метки полей формы на русский язык. 
17 Что доступно Юпитеру? 00:10:21
1 тест
18 чел. ★ 5 Done
  На этом занятии мы научимся управлять доступом к пунктам главного меню
Отчёт отправил: 30514. Tom Выполнено за 22 мин. [Показать отчёт]
Научился: Научился управлять видимостью элементов главного меню в зависимости от типа посетителя сайта: гость или зарегистрированный пользователь. Сделал пункт меню "Обратная связь" видимым для зарегистрированного пользователя. Пункт меню "Регистрация" виден только для гостя. 
18 Объявления - создание базы и модели 00:09:51
1 тест
18 чел. ★ 5 Done
  На этом уроке мы создадим таблицу bulletins при помощи миграций и сгенерируем для данной таблицы класс ActiveRecord
Отчёт отправил: 30514. Tom Выполнено за 27 мин. [Показать отчёт]
Научился: Научился как с помощью механизма миграций создавать поле, в котором хранится дата и время и как создавать непустое поле. С помощью миграций создал таблицу bulletins. Используя gii создал модель BulletinsRecord. 
19 Объявления - контроллер, представление и много записей 00:13:46
1 тест
18 чел. ★ 5 Done
  На этом уроке мы создадим контроллер и представление для работы с объявлениями,
а также сделаем связь записей о пользователях и объявлениях типа "один-ко-многим"
Отчёт отправил: 30514. Tom Выполнено за 32 мин. [Показать отчёт]
Научился: Научился объявлять связь один ко многим с помощью функции hasMany. Создал контроллер BulletinsController, действие в нем actionIndex, представление /bulletins/index. 
20 Объявление - функциональный дизайн страницы 00:14:17
17 чел. ★ 5 Done
  На этом уроке мы сделаем дизайн страницы наших объявлений, который поможет нам работать с объявлениями в дальнейшем
Отчёт отправил: 30514. Tom Выполнено за 50 мин. [Показать отчёт]
Научился: Научился создавать панель вкладок. Добавил три вкладки "Опубликованные", "Черновики" и "Удаленные". Добавил кнопку "Добавить объявление". 
21 Объявление - ограничение доступа 00:09:25
17 чел. ★ 5 Done
  На этом уроке мы ограничим доступ неавторизированного пользователя к странице управления объявлениями, а также решим некоторые технические вопросы
Отчёт отправил: 30514. Tom Выполнено за 1 час. 56 мин. [Показать отчёт]
Научился: Научился добавлять иконку к кнопке. Ограничил доступ для гостей сайта к странице управления объявлениями. 
22 Объявление - поля для пользовательских форм 00:09:44
17 чел. ★ 5 Done
  На этом уроке мы создадим класс BulletinsForm и определим, какие поля будут использоваться при создании объявления

Отчёт отправил: 30514. Tom Выполнено за 18 мин. [Показать отчёт]
Научился: Создал класс BulletinsForm. Определил поля формы, правила заполнения и названия меток полей. 
23 Объявление - форма добавления объявлений 00:17:03
1 тест
17 чел. ★ 5 Done
  На этом уроке мы создадим представление для добавления объявлений и действие контроллера, запускающего это представление

Отчёт отправил: 30514. Tom Выполнено за 1 час. 0 мин. [Показать отчёт]
Научился: Научился добавлять на форму элемент textarea. Создал форму для добавления объявления. 
24 Объявление - сохранение в черновик 00:10:39
17 чел. ★ 5 Done
  На этом уроке мы реализуем механизм сохранения нового объявления в черновик
Отчёт отправил: 30514. Tom Выполнено за 34 мин. [Показать отчёт]
Научился: Создал метод setNewRecord для заполнения модели объявления из полей формы. Реализовал сохранение модели объявления в базу данных со статусом черновик. 
25 Объявление - список 00:18:42
15 чел. ★ 5 Done
  На этом уроке мы реализуем вывод сохраненных в базе объявлений в список
Отчёт отправил: 30514. Tom Выполнено за 1 час. 13 мин. [Показать отчёт]
Научился: Научился обращаться к базе данных и получать информацию из таблицы с помощью метода find и указывать критерий выборки с помощью методов where и andWhere.  
26 Объявление - всё на публику 00:12:16
1 тест
15 чел. ★ 5 Done
  На этом уроке мы сделаем наши объявления опубликованными
Отчёт отправил: 30514. Tom Выполнено за 1 час. 9 мин. [Показать отчёт]
Научился: Научился находить и форматировать дату и время с помощью функции date. Реализовал изменение статуса объявления на 'public' при нажатии на кнопку "Опубликовать". 
27 Объявление - публикация на главной странице 00:15:27
1 тест
15 чел. ★ 5 Done
  На этом уроке мы разместим наши опубликованные объявления на главной странице сайта
Отчёт отправил: 30514. Tom Выполнено за 50 мин. [Показать отчёт]
Научился: Изменил главную страницу сайта. Добавил заголовок, вывел на главную страницу список всех опубликованных объявлений из базы данных. 
28 Объявление - скрыть нельзя удалить 00:12:40
14 чел. ★ 5 Done
  На этом уроке мы реализуем возможность помещать объявления в группу удаленных, восстанавливать их оттуда, а также отключать их просмотр

Отчёт отправил: 30514. Tom Выполнено за 33 мин. [Показать отчёт]
Научился: Реализовал переход между состояниями объявления "public", "wait" и "delete". 
29 Объявление - статусный рефакторинг 00:08:45
1 тест
14 чел. ★ 5 Done
  НА этом уроке мы сделаем рефакторинг методов работы со статусом объявлений
Отчёт отправил: 30514. Tom Выполнено за 16 мин. [Показать отчёт]
Научился: Создал метод setStatus, в который перенес код по изменению статуса объявления. 
30 Объявление - рефакторинг редактирования 00:12:58
14 чел. ★ 5 Done
  На этом уроке мы реализуем редактирование путем небольшого видоизменения функции добавления записи
Отчёт отправил: 30514. Tom Выполнено за 29 мин. [Показать отчёт]
Научился: Реализовал возможность редактирования объявления. Настроил адрес ссылки у кнопки "Редактировать". 
31 Объявление: запрос - в функцию & кнопка для изображений 00:09:52
14 чел. ★ 5 Done
  На этом уроке мы сделаем рефакторинг метода index и добавим кнопки для перехода в режим работы с изображениями
Отчёт отправил: 30514. Tom Выполнено за 47 мин. [Показать отчёт]
Научился: Создал метод getBulletins, который находит объявления с требуемым статусом. Добавил кнопки "Фото" к объявлениям в разделе черновики. Подготовил 5 фотографий дома для объявления. 
32 Изображения - микс из миграций 00:12:35
14 чел. ★ 5 Done
  На этом уроке мы через механизм миграций создадим таблицу photo и добавим поле для аватары в таблицу bulletins
Отчёт отправил: 30514. Tom Выполнено за 41 мин. [Показать отчёт]
Научился: С помощью механизма миграций в yii создал таблицу photo и изменил структуру таблицы bulletins - добавил в нее столбец avatar. 
33 Изображения - снова MVC 00:10:47
14 чел. ★ 5 Done
  На этом уроке мы создадим модель, контролер и представление для работы с фото
Отчёт отправил: 30514. Tom Выполнено за 55 мин. [Показать отчёт]
Научился: С помощью gii создал модель PhotoRecord. Создал контроллер PhotoController, в нем действие actionIndex. Добавил заготовку для представления photo/index. 
34 Изображения - работа с моделью 00:17:16
14 чел. ★ 5 Done
  На этом уроке мы передадим модель нашего объявления в представление
Отчёт отправил: 30514. Tom Выполнено за 45 мин. [Показать отчёт]
Научился: Передал найденную по id модель BulletinsRecord в представление photo/index. Добавил в представление photo/index кнопку "Добавить фото" и вывод фотографий переданного объявления. 
35 Работаем над ошибками - YII2 в помощь 00:13:03
14 чел. ★ 5 Done
  На этом уроке мы разберемся, как работать над ошибками и читать сигналы дебаггера 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 Изображения - где живут картинки 00:15:34
1 тест
14 чел. ★ 5 Done
  На этом уроке мы создадим папку для изображений, разместим там изображение по умолчанию, а также создадим универсальные параметры пути и изображения по умолчанию
Отчёт отправил: 30514. Tom Выполнено за 47 мин. [Показать отчёт]
Научился: Научился сохранять настройки сайта в массиве params. Создал папку images, добавил в нее изображение по умолчанию. В массиве params указал путь к папке изображений и названию файла с изображением по умолчанию. Использовал данные настройки в контроллере SiteController в действии actionIndex для вывода изображений объявлений. 
37 Изображения - модель формы 00:11:10
14 чел. ★ 5 Done
  На этом уроке мы создадим модель PhotoForm для работы с изображениями

Отчёт отправил: 30514. Tom Выполнено за 54 мин. [Показать отчёт]
Научился: Научился с помощью yii создавать правила для элемента загрузки файлов, указывать расширения загружаемых файлов. 
38 Изображение - загрузочное представление 00:15:37
14 чел. ★ 5 Done
  На этом занятии мы создадим форму представления, через которое будет загружаться изображение

Отчёт отправил: 30514. Tom Выполнено за 31 мин. [Показать отчёт]
Научился: Научился с помощью yii добавлять на форму элемент загрузки файлов, кнопку submit. 
39 Изображение - загрузка файла на сайт 00:17:29
1 тест
14 чел. ★ 5 Done
  На этом уроке мы реализуем алгоритм загрузки изображений на сайт
Отчёт отправил: 30514. Tom Выполнено за 1 час. 19 мин. [Показать отчёт]
Научился: Научился загружать файлы, сохранять их в требуемой папке. Научился определять имя загруженного файла и его расширение. 
40 ПРОМЕЖУТОЧНЫЙ ВИДЕО ОБЗОР без видео
11 чел. ★ 5 Done
  Мы уже многое сделали на нашем видеокурсе, и автору очень важно
узнать Ваше мнение о данном курсе и получить обратную связь
в форме видео-презентации и ответов на вопросы.

Сделай видео-презентацию своего сайта.
Отчёт отправил: 30514. Tom Выполнено за 31 мин. [Показать отчёт]
Научился: На этом курсе я познакомился с фреймворком yii. Получил практику в программировании на php. Оценил удобство создания кода по модели MVC. Попутно научился оформлять страницы используя bootstrap. В дальнейшем на сайт можно добавить поиск по объявлениям и добавить тематики объявлений. 
Видеообзор: Bi2AmSuqhGA
41 Изображение - сохранение пути в базу 00:14:17
11 чел. ★ 5 Done
  На этом уроке мы реализуем сохранение пути к файлу изображений в базу данных
Отчёт отправил: 30514. Tom Выполнено за 42 мин. [Показать отчёт]
Научился: Реализовал сохранение пути загруженного изображения в поле link таблицы photo базы данных. 
42 Изображение - управление картинками 00:08:36
11 чел. ★ 5 Done
  На этом уроке мы займемся дизайном - создадим выпадающее меню управления изображением
Отчёт отправил: 30514. Tom Выполнено за 23 мин. [Показать отчёт]
Научился: Научился создавать выпадающий список, добавлять в список элементы и разделять их сепаратором. 
43 Изображение - JS - немного теории и пижонства 00:16:29
1 тест
11 чел. ★ 4.7 Done
  На этом уроке мы рассмотрим работу JS на yii2
Отчёт отправил: 30514. Tom Выполнено за 37 мин. [Показать отчёт]
Научился: Научился добавлять JavaScript-код с помощью функции registerJs. Узнал как проверить видимость элемента используя is(':hidden'). Создал тестовый код на JavaScript, который показывает и скрывает текстовое поле при нажатии на кнопку. 
44 Изображение - JS - глобализация 00:26:49
11 чел. ★ 5 Done
  На этом уроке мы перенесем все скрипты JS в отдельный файл, а также реализуем открытие и скрытие элементов ввода информации

Отчёт отправил: 30514. Tom Выполнено за 1 час. 6 мин. [Показать отчёт]
Научился: Научился добавлять JavaScript к проекту yii через AppAssets. Указал путь к JS-файлам, создал папку js, в ней создал файл main.js. Реализовал показ поля для ввода информации при нажатии на кнопку информация в блоке управления. Реализовал скрытие поля при нажатии на кнопку с иконкой. 
45 Изображение - JS - сохранение информации в базу 00:22:42
1 тест
11 чел. ★ 5 Done
  На этом уроке мы научим нашу систему сохранять информацию об изображениях в базу
с использованием технологии ajax


Отчёт отправил: 30514. Tom Выполнено за 1 час. 1 мин. [Показать отчёт]
Научился: Научился передавать данные на сервер с помощью ajax. Реализовал обновление информации в поле info в таблице photo. Научился перезагружать страницу с помощью jQuery. 
46 Изображение - JS - извлечение методом ajax 00:09:51
11 чел. ★ 5 Done
  На этом уроке мы научим ajax получать информацию об изображениях из базы
Отчёт отправил: 30514. Tom Выполнено за 47 мин. [Показать отчёт]
Научился: Научился с помощью ajax получать информацию из базы данных. Реализовал загрузку информации из поля info таблицы photo при нажатии кнопки "Информация". 
47 Изображение - аватарка - вывод на главной странице 00:15:26
11 чел. ★ 5 Done
  На этом уроке мы реализуем вывод главных изображений каждого объявления
(далее - аватарки) на главной странице
Отчёт отправил: 30514. Tom Выполнено за 34 мин. [Показать отчёт]
Научился: Реализовал вывод аватарки объявления на главную страницу. 
48 Изображение - аватарка - работа над ошибками связей 00:09:33
11 чел. ★ 5 Done
  На данном уроке мы исправим ошибки вывода фотографий, очистим базу и заново загрузим в нашу базу
фотографии в одно из объявлений
Отчёт отправил: 30514. Tom Выполнено за 17 мин. [Показать отчёт]
Научился: Исправил ошибку при запросе в блоке where, добавил проверку на авторизацию пользователя в действия контроллера PhotoController, очистил таблицу photo, заново загрузил изображения объявления. 
49 Изображение - аватарка - как стать главной 00:18:13
11 чел. ★ 5 Done
  На этом уроке мы создадим код, делающий любое фото главным
Отчёт отправил: 30514. Tom Выполнено за 39 мин. [Показать отчёт]
Научился: Научился получать значение атрибута с помощью jquery-функции attr. Реализовал установку аватарки для объявления при нажатии на кнопку "Сделать главной" в блоке управления фотографией. 
50 Изображение - удаление - ни шагу без подтверждения! 00:09:13
11 чел. ★ 5 Done
  На этом уроке мы реализуем всплывающее окно подтверждения действия
и протестируем результаты выбора различных вариантов
Отчёт отправил: 30514. Tom Выполнено за 29 мин. [Показать отчёт]
Научился: Научился вызывать всплывающее окно с подтверждением confirm при нажатии на кнопку "Удалить" в блоке управления изображением. Реализовал обработку нажатия клавиш ОК и Отмена. 
51 Изображение - удаление - удаление файла и записи 00:15:49
11 чел. ★ 5 Done
  На этом уроке мы реализуем удаление файлов изображений и записей о них из базы данных
Отчёт отправил: 30514. Tom Выполнено за 41 мин. [Показать отчёт]
Научился: Научился удалять файл из файловой системы и удалять запись из таблицы базы данных. 
52 Главная страница - подробности - ссылки и заготовка представлени 00:09:05
11 чел. ★ 5 Done
  На этом уроке мы создадим ссылки для объявлений на главной странице и заготовку представления для подробного вывода
информации объявления
Отчёт отправил: 30514. Tom Выполнено за 21 мин. [Показать отчёт]
Научился: Добавил новое действие actionViewBulletin в SiteController и создал представление для вывода подробной информации про объявление. 
53 Главная страница - подробности - больше подробностей 00:11:37
11 чел. ★ 5 Done
  На этом уроке мы выведем максимум информации на страницу подробностей объявления
Отчёт отправил: 30514. Tom Выполнено за 1 час. 9 мин. [Показать отчёт]
Научился: Изменил представление viewbulletin, вывел главное изображение объявления и более подробную информацию. 
54 Главная страница - подробности - расширяя информацию 00:15:15
1 тест
11 чел. ★ 5 Done
  На этом уроке мы внесем в наш код изменения, которые позволят сохранять объявления с большим количеством информации

Отчёт отправил: 30514. Tom Выполнено за 44 мин. [Показать отчёт]
Научился: Научился изменять тип столбца таблицы. Научился добавлять <br> html-переводы строки с помощью функции nl2br. Изменил тип столбца info с varchar на longtext. Отредактировал объявление по продаже дома, ввел более подробный текст в поле info. 
55 Главная страница - оформление - дизайн объявления 00:10:02
11 чел. ★ 5 Done
  На этом уроке мы зададим стиль дизайна объявления
Отчёт отправил: 30514. Tom Выполнено за 1 час. 2 мин. [Показать отчёт]
Научился: Научился создавать элементы с классом badge. Оформил в badge дату публикации. Вывел информацию про объявление в виде панели и таблицы. 
56 Главная страница - оформление - дизайн элементов базовой страницы 00:11:44
1 тест
11 чел. ★ 5 Done
  На этом уроке мы выведем информацию о себе в элементе footer и сделаем главное меню стильным и красивым
Отчёт отправил: 30514. Tom Выполнено за 34 мин. [Показать отчёт]
Научился: Научился изменять footer и главное меню сайта. Заменил цвет фона главного меню, цвет текста ссылок и цвет фона ссылок при наведении указателя мышки. 
57 Главная страница - оформление - ловим цвет пикселя 00:06:00
11 чел. ★ 5 Done
  На этом уроке мы рассмотрим использование инструментов определения цвета пикселя (Пипетка)

Отчёт отправил: 30514. Tom Выполнено за 30 мин. [Показать отчёт]
Научился: Научился пользоваться инструментом Пипетка. Определил цвет с помощью Пипетки и с помощью сайта https://sanstv.ru/color 
58 Главная страница - оформление - смотрим все изображения 00:15:27
11 чел. ★ 5 Done
  На этом уроке мы реализуем просмотр всех изображений объявления "не хуже, чем на Avito"
Отчёт отправил: 30514. Tom Выполнено за 1 час. 10 мин. [Показать отчёт]
Научился: Реализовал вывод всех изображений на страницу текущего объявления, добавил обработку события hover при выборе изображения. 
59 Главная страница - оформление - стильный логотип 00:09:56
11 чел. ★ 5 Done
  На этом уроке мы реализуем вывод логотипа в иконку проекта и в пункт меню перехода на главную страницу
Отчёт отправил: 30514. Tom Выполнено за 34 мин. [Показать отчёт]
Научился: Научился менять логотип проекта на вкладке браузера и в навигационном меню. 
60 Главная страница - оформление - оповещения через баннер 00:11:19
10 чел. ★ 5 Done
  На этом уроке мы создадим баннер для оповещений, новостей
Отчёт отправил: 30514. Tom Выполнено за 21 мин. [Показать отчёт]
Научился: Научился создавать баннер с помощью yii2. Баннер можно использовать для оповещения о новостях сайта. 
61 Разделы (темы) - немного теории 00:11:07
10 чел. ★ 5 Done
  На этом уроке мы рассмотрим вопрос тематик объявлений на нашем сайте, а также составим план (структуру) таблицы тем Themes и связующей таблицы ThemesBulletins
Отчёт отправил: 30514. Tom Выполнено за 18 мин. [Показать отчёт]
Научился: Составил структуру таблицы Разделов (Themes) и связующей таблицы Themesbulletins. 
62 Разделы (темы) - миграции с внешними ключами 00:18:49
10 чел. ★ 5 Done
  На этом уроке мы создадим миграции таблиц themes и themesbulletins, сами эти таблицы и их модели ActiveRecord с внешними связями
Отчёт отправил: 30514. Tom Выполнено за 47 мин. [Показать отчёт]
Научился: Научился создавать связь по внешним ключам между таблицами. С помощью механизма миграций создал таблицы themes и themesbulletins. С помощью gii создал модели ThemesRecord и ThemesbulletinsRecord. 
63 Обратная связь - мозговой штурм - внештатные ситуации 00:09:19
9 чел. ★ 5 Done
  В данном уроке попрошу Вас выполнить небольшую самостоятельную работу и дать обратную связь.

Отчёт отправил: 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 Разделы (темы) - вывод тем в объявлении 00:16:29
9 чел. ★ 5 Done
  На этом уроке мы реализуем вывод тем на странице объявления
Отчёт отправил: 30514. Tom Выполнено за 41 мин. [Показать отчёт]
Научился: Добавил в таблицы themes и themesbulletins несколько записей, исправил ошибки связей в моделях ThemesRecord, ThemesbulletinsRecord, реализовал вывод тем объявления в представлении viewbulletin. 
65 Разделы (темы) - меню тематик 00:10:55
8 чел. ★ 5 Done
  На этом уроке мы реализуем вывод ссылок на темы на главной странице и подсчет объявлений в каждой теме
Отчёт отправил: 30514. Tom Выполнено за 25 мин. [Показать отчёт]
Научился: Вывел на главную страницу список всех тем из таблицы themes и количество объявлений по каждой теме. 
66 Разделы (темы) - тематические выборки 00:15:13
8 чел. ★ 5 Done
  На этом уроке мы реализуем выбор объявлений по темам и вывод их на основную страницу
Отчёт отправил: 30514. Tom Выполнено за 44 мин. [Показать отчёт]
Научился: Добавил адреса к ссылкам тем на главной странице. Реализовал выбор опубликованных объявлений по выбранной теме и вывод их на главной странице. 
67 Разделы (темы) - полезные переходы 00:11:48
7 чел. ★ 5 Done
  На этом уроке мы реализуем возвращение со страницы объявлений на предыдущую страницу, а также переходы по темам объявления по типу хештегов
Отчёт отправил: 30514. Tom Выполнено за 34 мин. [Показать отчёт]
Научился: Добавил ссылку на предыдущую страницу и добавил адреса к ссылкам для перехода на список объявлений по выбранной теме. 
68 Разделы (темы) - администрирование - теория и заготовки 00:09:03
7 чел. ★ 5 Done
  На этом уроке мы создадим контроллер для администрирования разделов (тем) и представление index
Отчёт отправил: 30514. Tom Выполнено за 14 мин. [Показать отчёт]
Научился: Добавил пункт "Справочник тем" в главное меню, создал контроллер ThemesController, в нем действие actionIndex и создал представление themes/index. 
69 Разделы (темы) - администрирование - все темы в таблицу 00:10:55
7 чел. ★ 5 Done
  На этом уроке мы выведем существующие темы в таблицу и зададим им элементы управления
Отчёт отправил: 30514. Tom Выполнено за 18 мин. [Показать отчёт]
Научился: Создал кнопку "Добавит тему", вывел темы из базы данных в таблицу, добавил к каждой теме кнопки редактировать и удалить. 
70 Разделы (темы) - администрирование - подтверждение удаления 00:15:58
7 чел. ★ 5 Done
  На этом уроке мы реализуем алгоритм подтверждения удаления и создадим соответствующее представление
Отчёт отправил: 30514. Tom Выполнено за 29 мин. [Показать отчёт]
Научился: Создал новое представление themes/deletequery, в котором реализовал интерфейс для подтверждения удаления темы. 
71 Разделы (темы) - администрирование - удаление разделов и чистка связей 00:09:07
7 чел. ★ 5 Done
  На этом уроке мы окончательно удалим раздел, а перед этим удалим все его связи с объявлениями
Отчёт отправил: 30514. Tom Выполнено за 13 мин. [Показать отчёт]
Научился: Реализовал удаление темы из таблицы themes и всех связей по теме в таблице themesbulletins. 
72 Разделы (темы) - администрирование - Обычный ThemesForm 00:10:23
7 чел. ★ 5 Done
  На этом уроке мы создадим модель ThemesForm, заготовку действия Add в контроллере Themes и представление под него
Отчёт отправил: 30514. Tom Выполнено за 15 мин. [Показать отчёт]
Научился: Создал действие actionAdd в контроллере ThemesController, добавил представление themes/add. Создал модель ThemesForm. 
73 Разделы (темы) - исправление подсчета и отображение текущей темы 00:08:28
7 чел. ★ 5 Done
  Hа этом уроке мы исправим ошибку подсчета, обнаруженную в процессе прохождения курса,
а также отобразим текущую тему, по которой выборка объявлений, в баннере


Отчёт отправил: 30514. Tom Выполнено за 15 мин. [Показать отчёт]
Научился: Исправил ошибку подсчета количества объявлений по темам. Добавил вывод в баннер информации о просматриваемой теме. 
74 Разделы (темы) - администрирование - "темное" представление 00:11:49
7 чел. ★ 5 Done
  На этом уроке мы создадим поля для редактирования или добавления темы в представлении themes\add
Отчёт отправил: 30514. Tom Выполнено за 49 мин. [Показать отчёт]
Научился: С помощью yii и bootstrap создал форму для добавления темы. Создал ссылку на кнопке "Отмена" для возврата в представление themes/index. 
75 Разделы (темы) - администрирование - волшебный выпадающий список 00:09:17
1 тест
7 чел. ★ 5 Done
  На этом уроке мы создадим выпадающий список выбора родительской темы
Отчёт отправил: 30514. Tom Выполнено за 15 мин. [Показать отчёт]
Научился: Научился создавать выпадающий список с помощью yii, задавать ему значения элементов и добавлять текстовое сообщение по умолчанию. 
76 Разделы (темы) - администрирование - сохранение темы 00:19:30
7 чел. ★ 5 Done
  На этом уроке мы реализуем сохранение добавляемых и редактируемых тем
Отчёт отправил: 30514. Tom Выполнено за 37 мин. [Показать отчёт]
Научился: Реализовал добавление новой темы и редактирование выбранной темы. Реализовал сохранение изменений в таблице themes.  
77 Разделы (темы) - администрирование - рефакторинг и валидация 00:07:02
7 чел. ★ 5 Done
  На этом уроке мы сделаем рефакторинг нашего представления add и валидацию данных формы ThemesForm
Отчёт отправил: 30514. Tom Выполнено за 17 мин. [Показать отчёт]
Научился: Перенес выборку родительских тем из представления themes/add в модель ThemesForm. Добавил валидацию поля title для формы ThemesForm. 
78 Связи объявлений и тем - заготовка 00:12:50
7 чел. ★ 5 Done
  На этом уроке мы создадим действие в контроллере BulletinsController и представление,
которые помогут нам работать со связями объявлений и тем
Отчёт отправил: 30514. Tom Выполнено за 28 мин. [Показать отчёт]
Научился: Добавил кнопку "Темы" в представление bulletins/index. Создал действие actionAddtheme в контроллере BulletinsController. Создал представление bulletins/addtheme, в котором вывел все темы выбранного объявления. 
79 Связи объявлений и тем - добавление новой темы 00:22:38
7 чел. ★ 5 Done
  На этом уроке мы научим нашу систему добавлять новую тему в объявление (делать связь темы и объявления)
Отчёт отправил: 30514. Tom Выполнено за 37 мин. [Показать отчёт]
Научился: Создал модель для формы ThemesbulletinsForm, передал ее в представление bulletins/addtheme. В представлении добавил выпадающий список, который заполнил списком всех тем из базы данных. Реализовал добавление новой темы к объявлению. 
80 Связи объявлений и тем - темы, которых не было 00:11:33
1 тест
7 чел. ★ 5 Done
  На этом уроке мы научим нашу систему выводить в список добавляемых в объявление тем только те, которые не прикреплены к нашему объявлению
Отчёт отправил: 30514. Tom Выполнено за 19 мин. [Показать отчёт]
Научился: Научился выбирать поля таблицы с помощью функции select() в yii2. Научился фильтровать записи при помощи where и 'not in'. Реализовал заполнение выпадающего списка темами, которых нет у текущего объявления. 
81 Связи объявлений и тем - темы, которых не будет 00:10:57
7 чел. ★ 5 Done
  На этом уроке мы научим нашу систему удалять из объявлений темы, к которым наше объявление привязывать не надо
Отчёт отправил: 30514. Tom Выполнено за 18 мин. [Показать отчёт]
Научился: Добавил адрес ссылки для удаления темы в представлении bulletins/addtheme. Создал действие actionDeletetheme в контроллере BulletinsController. Реализовал в нем удаление темы из списка тем в объявлении. 
82 Глобальный поиск - поле поиска в меню 00:17:09
7 чел. ★ 5 Done
  На этом уроке мы добавим поле поиска в навигационное меню сайта, а также решим вопрос с активными пунктами меню.
Отчёт отправил: 30514. Tom Выполнено за 1 час. 46 мин. [Показать отчёт]
Научился: Добавил на навигационное меню текстовое поле для поиска по сайту. Для этого в файле views/layouts/main.php добавил форму через ActiveForm и поле для поиска с помощью Html::input. 
83 Глобальный поиск - ищем глобально 00:17:08
7 чел. ★ 5 Done
  На этом уроке мы создадим алгоритм поиска по вводимому в поле search контенту
Отчёт отправил: 30514. Tom Выполнено за 26 мин. [Показать отчёт]
Научился: Научился выполнять поиск в таблице базы данных с помощью операторов AND, OR, LIKE с использованием yii2. Добавил действие actionSearch в контроллер SiteController. Реализовал в нем поиск всех объявлений, у которых поле статус равно значению public и содержат искомый текст в поле заголовок, информация или город. 
84 Расширенный поиск - группировка пунктов главного меню 00:12:47
7 чел. ★ 5 Done
  На этом уроке мы сгруппируем пункты главного меню в подразделы,
и сделаем в нем ссылку на страницу расширенного поиска
Отчёт отправил: 30514. Tom Выполнено за 1 час. 6 мин. [Показать отчёт]
Научился: Научился группировать пункты меню. Создал группу меню "Администрирование", перенес в нее две ссылки "Мои объявления" и "Справочник тем". Создал новую группу меню для поиска, добавил в нее ссылку "Расширенный поиск". 
85 Расширенный поиск - заготовки и план 00:10:03
7 чел. ★ 5 Done
  На этом уроке мы набросаем план будущей страницы расширенного поиска,
а также создадим действие контроллера и заготовку представления расширенного поиска
Отчёт отправил: 30514. Tom Выполнено за 13 мин. [Показать отчёт]
Научился: Создал действие actionAdvsearch в контроллере SiteController, создал представление site/advsearch. Вывел в нем навигацию breadcrumbs. Составил план страницы расширенного поиска. 
86 Расширенный поиск - стили и форма 00:10:11
7 чел. ★ 5 Done
  На этом уроке мы внесем исправления в стили субменю и сделаем модель формы расширенного поиска
Отчёт отправил: 30514. Tom Выполнено за 36 мин. [Показать отчёт]
Научился: Создал модель формы расширенного поиска AdvsearchForm. Добавил в нее поля для поиска и создал метод rules. 
87 Расширенный поиск - дизайн текстовых полей и кнопки 00:16:02
7 чел. ★ 5 Done
  На этом уроке мы прокачаем навыки дизайна текстовых полей, создания активной формы в представлении,
а также создания кнопки через хелперы yii2
Отчёт отправил: 30514. Tom Выполнено за 21 мин. [Показать отчёт]
Научился: Добавил на представление site/advsearch 4 текстовых поля для поиска по заголовку, информации, городу и контактам. Добавил кнопку submit. 
88 Расширенный поиск - цена - выбор варианта 00:10:45
7 чел. ★ 5 Done
  На этом уроке мы создадим систему управления выбором варианта поиска по цене
Отчёт отправил: 30514. Tom Выполнено за 19 мин. [Показать отчёт]
Научился: Научился добавлять и удалять css-классы у элемента с помощью jQuery. Создал список из трех элементов для разных вариантов поиска по ценам. 
89 Расширенный поиск - цена - невидимые поля 00:18:17
7 чел. ★ 5 Done
  На этом уроке мы создадим невидимые блоки с полями поиска цены, которые становятся видимыми при нажатии определенного пункта навигатора
Отчёт отправил: 30514. Tom Выполнено за 38 мин. [Показать отчёт]
Научился: Добавил три div с классом .priceblock. Разместил в первом блоке поле для ввода точного значение цены, во втором два поля для ввода диапазона цен и в третьем блоке добавил radio button по выбору "Больше", "Меньше" и поле для ввода цены. С помощью атрибута data-id и javascript  реализовал скрытие всех блоков .priceblock и показ одного активного блока по нажатой ссылкой. 
90 Расширенный поиск - дата публикации - виджет извне 00:23:18
7 чел. ★ 5 Done
  На этом уроке мы установим в наш проект компонент jui от стороннего разработчика
и создадим календарики для выбора дат


Отчёт отправил: 30514. Tom Выполнено за 41 мин. [Показать отчёт]
Научился: Научился устанавливать библиотеку с помощью composer. Установил библиотеку JUI. Добавил два поля для ввода диапазона даты публикации. Установил для них язык "ru" и формат данных "yyyy-MM-dd". 
91 Расширенный поиск - результаты выборки - частичное представление 00:17:21
7 чел. ★ 5 Done
  На этом уроке мы рассмотрим возможность использования частичного представления в yii2-проекте и выведем в частичное представление карточку объявления
Отчёт отправил: 30514. Tom Выполнено за 37 мин. [Показать отчёт]
Научился: Научился создавать частичное представление и использовать его внутри другого представления. Создал частичное представление site/bulletin. Заменил вывод опубликованных объявлений в представлении site/index c помощью частичного представления site/bulletin. Реализовал вывод результатов поиска в представлении site/advsearch с помощью частичного представления site/bulletin при нажатии кнопки "Выборка". 
92 Расширенный поиск - генератор поиска - возвращение к SQL-запросу 00:15:52
7 чел. ★ 5 Done
  На этом уроке мы создадим генератор отчета, используя работу ActiveRecord фреймворка yii2 c
sql-запросами, и включим в него поиск по текстовым полям формы расширенного поиска
Отчёт отправил: 30514. Tom Выполнено за 26 мин. [Показать отчёт]
Научился: Научился выполнять sql запрос с помощью метода yii2 findBySql. Реализовал поиск объявлений по полям "Заголовок", "Информация", "Город", "Контакты". 
93 Расширенный поиск - генератор поиска - ограничивающие даты 00:10:54
7 чел. ★ 5 Done
  На этом уроке мы добавим в генератор отчета расширенного поиска выборку по датам публикации

Отчёт отправил: 30514. Tom Выполнено за 30 мин. [Показать отчёт]
Научился: Добавил информацию о дате публикации в частичное представление site/bulletin. Реализовал поиск объявлений по дате публикации. 
94 Расширенный поиск - генератор поиска - три вида цены и один POST 00:14:47
7 чел. ★ 5 Done
  На этом уроке мы реализуем различные варианты выборки объявлений по цене и добавим их в наш генератор расширенного поиска

Отчёт отправил: 30514. Tom Выполнено за 38 мин. [Показать отчёт]
Научился: Добавил свойство price_more в модель AdvsearchForm и представление site/advsearch. Добавил значения атрибутов value для переключателей поиска по цене "Больше" или "Меньше". Реализовал поиск по точному значению цены, диапазону цен и значениям цен больше или меньше заданной. 
95 Обратная связь - свой сайт объявлений без видео
7 чел. ★ 5 Done
  И снова обратная связь.Подумаем самостоятельно и ответим на вопросы:

Отчёт отправил: 30514. Tom Выполнено за 18 мин. [Показать отчёт]
Научился: 1. Доска объявлений по продаже компьютеров и комплектующих. 2. computer-bulletin-board.ru 3. Сайт по продаже на вторичном рынке компьютеров, с более низкими ценами и товарами снятыми с производства. 
96 Расширенный поиск - генератор поиска - показать, что нужно 00:20:55
7 чел. ★ 5 Done
  На этом уроке мы реализуем отображение той вкладки поиска по ценам,
по которой производился  поиск
Отчёт отправил: 30514. Tom Выполнено за 38 мин. [Показать отчёт]
Научился: Реализовал сохранение выбранного элемента radio во вкладке "Больше ... меньше". Реализовал запоминание выбранной вкладки поиска по цене. 
97 Работа с документацией Yii2 00:04:42
7 чел. ★ 5 Done
  На этом уроке переходим на один из официальных сайтов по 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 Пользователи и роли - планирование ролевой модели 00:08:08
7 чел. ★ 5 Done
  На этом уроке мы составим ролевую модель пользователей нашего сайта
Отчёт отправил: 30514. Tom Выполнено за 10 мин. [Показать отчёт]
Научился: Создал ролевую модель для пользователей на сайте доски объявлений. 
99 Пользователи и роли - фильтры контроля доступа ACF - теория и эксперименты 00:08:44
7 чел. ★ 5 Done
  На этом уроке мы рассмотрим принципы работы фильтров контроля доступа ACF
Отчёт отправил: 30514. Tom Выполнено за 11 мин. [Показать отчёт]
Научился: Научился открывать доступ к действию контроллера только для зарегистрированных пользователей с помощью метода behaviors и свойства access. 
100 Пользователи и роли - фильтры контроля доступа ACF - фильтруем всё 00:10:27
7 чел. ★ 5 Done
  На этом уроке мы сами создадим метод behaviors() в BulletinsController и зададим нужные фильтры для действий контроллера
Отчёт отправил: 30514. Tom Выполнено за 34 мин. [Показать отчёт]
Научился: Добавил методы behaviors для контроллеров BulletinsController, PhotoController, ThemesController и UserController. Реализовал в них доступ к действиям контроллеров для зарегистрированных пользователей. Удалил переадресацию на /site/login в действиях контроллеров. 
101 Пользователи и роли - роли через RBAC - теория, установка и миграции 00:11:16
7 чел. ★ 5 Done
  На этом уроке мы установим расширение RBAC, настроим подключение к RBAC и создадим
базы для авторизации при помощи механизма миграции

Отчёт отправил: 30514. Tom Выполнено за 20 мин. [Показать отчёт]
Научился: С помощью composer установил расширение "Yii2 RBAC Extension". Настроил подключение компонента в файлах web.php и console.php. С помощью миграций создал таблицы RBAC. 
102 Пользователи и роли - роли через RBAC - тесты и практика 00:25:53
7 чел. ★ 5 Done
  На этом уроке мы создадим тестовые роли и разрешения, а также проверим работу контроллера
согласно разрешений
Отчёт отправил: 30514. Tom Выполнено за 51 мин. [Показать отчёт]
Научился: В действии site/authinit создал три разрешения: на добавление, изменение и удаление объявления. Добавил две роли: модератор и автор объявления. Для модератора определил возможность удалять и изменять объявления. Для автора доступны все три разрешения на добавление, изменение и удаление объявления. Присвоил роли модератора и автора двум пользователям из таблицы user. Создал действие site/testrole и представление testrole, в котором вывел доступные разрешения для текущего зарегистрированного пользователя. 
103 Пользователи и роли - роли через RBAC - вносим действия в план 00:09:04
7 чел. ★ 5 Done
  На этом уроке мы добавим действия к ролям в нашей актуальной ролевой модели
Отчёт отправил: 30514. Tom Выполнено за 10 мин. [Показать отчёт]
Научился: Написал действия к ролям SuperUser, Admin, Moderator, User, Гость на сайте доски объявлений. 
104 Пользователи и роли - роли через RBAC - реализация плана 00:30:34
6 чел. ★ 5 Done
  На этом уроке мы создадим актуальные роли и действия для пользователей нашего сайта
Отчёт отправил: 30514. Tom Выполнено за 1 час. 22 мин. [Показать отчёт]
Научился: В действии site/authinit cоздал роли SuperUser, Admin, Moderator, User. Создал действия для этих ролей.  
105 Пользователи и роли - ACF+RBAC - ограничим доступ к темам 00:16:01
4 чел. ★ 5 Done
  На этом уроке мы реализуем ролевую модель для контроллера тем
Отчёт отправил: 30514. Tom Выполнено за 31 мин. [Показать отчёт]
Научился: Изменил ролевую модель для контроллера тем: доступ к действиям контроллера разрешен пользователям, которые имеют роль admin и выше. Таким образом, superuser и admin могут управлять темами, а moderator и user - нет. 
106 Пользователи и роли - управление ролями и привилегиями - контроллер и таблица ролей 00:16:57
3 чел. ★ 5 Done
  на этом уроке мы создадим контроллер и представление для управления ролями
Отчёт отправил: 30514. Tom Выполнено за 24 мин. [Показать отчёт]
Научился: Создал контроллер RolesController, добавил в него действие actionIndex, создал представление /roles/index. В этом представлении вывел в таблицу все роли, их описания и кнопки управления. Добавил в главное меню ссылку "Управление ролями". 
107 Пользователи и роли - управление ролями и привилегиями - форма добавления роли 00:13:53
3 чел. ★ 5 Done
  На этом уроке мы создадим действие добавления роли и форму добавления роли


Отчёт отправил: 30514. Tom Выполнено за 21 мин. [Показать отчёт]
Научился: Создал модель RolesForm, добавил действие actionAddrole в RolesController. Создал представление roles/addrole, где вывел форму с текстовым полем и кнопкой submit. 
108 Пользователи и роли - управление ролями и привилегиями - сохранение и удаление роли 00:14:17
3 чел. ★ 5 Done
  На этом уроке мы реализуем сохранение роли, а также напишем алгоритм удаления роли
Отчёт отправил: 30514. Tom Выполнено за 38 мин. [Показать отчёт]
Научился: Научился устанавливать атрибут только для чтения для текстового поля формы. Реализовал сохранение и удаление роли. В действии actionAddrole реализовал алгоритм добавления роли. Создал действие actionRemoverole и представление roles/removerole. 
  Итого:   108 видеоуроков 23 час. 33 мин.
25 тестов
3 чел. ★ 4.99  
  Финалисты:   Жан,   Николай Денисов,   Tom .

Начинаем практику по языку C#





Если вы пришли без приглашения -
введите тысяча двадцать четыре (цифрами).
Чтобы стать хорошим программистом — нужно писать программы. На нашем сайте очень много практических упражнений.

После заполнения формы ты будешь подписан на рассылку «C# Вебинары и Видеоуроки», у тебя появится доступ к видеоурокам и консольным задачам.

Несколько раз в неделю тебе будут приходить письма — приглашения на вебинары, информация об акциях и скидках, полезная информация по C#.

Ты в любой момент сможешь отписаться от рассылки.


Научился: Записал видеообзор курса "Доска объявлений" как получилось судить вам, но не судите строго))
Трудности: скришот требует, а где я его возьму? я видео снимал, зачем тогда скрин? ну ладно выложу первый кадр



Научился: На этом курсе: 1 Я создал сайт 2 Сделал домен 3 Реализовал регистрацию пользователей 4 Добавлять объявления - которые могут добавлять только зарегистрированные пользователи один ко многим 5 Загружать фотографии - фотографии к объявлениям сохраняются на сайте в папке image Нравиться что Видеокурсы не больше чем 20мин, всё доступно и понятно рассказано и показано. Хочу научится делать правильные сайты модели MVC
Трудности: Получилось добавить звук к видео средствами youtube.com Надеюсь вы оцените мои труды. Что касается микрофона я купил микрофон и даже конденсаторный переходник, но это мне не помогло. Нужно покупать что то дорогое, а денег как известно нету.