Обучение C#

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

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

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

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

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

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

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



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

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


Отчёт отправил: 13417. Chip Выполнено за 36 мин. [Показать отчёт]
Научился: Недавно увидел отчеты по новому курсу от Валерия Жданова, заинтересовался и решил посмотреть уроки. В курсе предлагается использовать php + yii2, а я планирую набраться практики в этом направлении на языке Си. Установил сервер Apache, открыл тестовую страницу localhost в firefox. Что скажешь, Валерий, даешь добро на эксперименты? :) 
2 FREE Создание проекта YII2 00:13:49
1 тест
22 чел. ★ 4.8 Done
  На этом уроке мы создадим проект нового сайта, установим YII2 и запустим новый сайт на нашем локальном домене


Отчёт отправил: 13417. Chip Выполнено за 3 час. 42 мин. [Показать отчёт]
Научился: Добавил строку 127.0.0.1 bull.local в файл /etc/hosts. Убедился в том, что обращение по адресу bull.local в браузере переходит как и прежде на тестовую страницу. Создал программу, которая выводит html-текст с сообщением по центру экрана. Скопировал полученную программу в корневую папку сервера Apache /var/www/cgi-bin, запустил - отработало нормально. Далее хотел создать виртуальный хост и вынести файл в другую, более удобную папку, например в своем домашнем каталоге,  но столкнулся с проблемами настройки Apache. Почитав часок-другой документацию, набросал возможные варианты, но пока что успеха не добился. Оставил как есть, файл программы находится в корневом каталоге cgi-bin. Валерий, имеет ли смысл настраивать виртуальный хост для этого проекта? 
Сложности: Разбираться с конфигурацией сервера Apache. 
3 FREE Комфортная конфигурация 00:08:16
2 теста
21 чел. ★ 4.8 Done
  На этом уроке мы настроим удобные для человека ссылки и поменяем название сайта при помощи настроек config/web.php

Отчёт отправил: 13417. Chip Выполнено за 1 час. 29 мин. [Показать отчёт]
Научился: Вчера вечером решил проблему из прошлого отчета - добавил виртуальный хост. Изучал /var/log/httpd/error_log, там указывается код ошибки, по нему искал решение в Интернете. Как оказалось, все настройки были верные, ошибка была в том, что SELinux блокировал запуск моей программы из стороннего каталога сервера. Опробовал предложенное решение с сайта - работает, Apache теперь запускает мою программу. В этом уроке создал файл .htaccess, добавил его в папку с сайтом. Попутно потребовалось указать AllowOverride All в директиве описания виртуального хоста в файле httpd.conf, чтобы файл .htaccess мог переопределять настройки из главного конфигурационного файла. Попробовал решение Валерия для преобразования URL-адресов. Все работает. Однако вчера во время полетов по просторам документации Apache я побочно наткнулся на альтернативное решение преобразования адресов. Вместо RewriteEngine On и прочего там предлагается добавить всего одну строку "FallbackResource /index.cgi" Я так понимаю, это новая директива и она означает переадресацию всех запросов на несуществующие файлы на файл index.cgi, то есть на мою программу. Что вполне решает задачу красивых ссылок. Сегодня во время выполнения урока решил попробовать этот вариант. Результат аналогичный. Валерий, как думаешь, подойдет такое решение? На верхнем скриншоте все запросы к серверу переадресуются программе index.cgi, которая выводит содержимое переменной окружения REQUEST_URI. На нижнем скриншоте компиляция программы, установка программы по адресу каталога сайта и перенос в нее файла .htaccess. Немного ниже показано содержимое каталога сайта, там два файла: программа index.cgi и файл .htaccess. В самом низу показано содержимое файла .htaccess с единственной строкой FallbackResource /index.cgi. 
4 FREE Схема базы данных 00:14:25
21 чел. ★ 4.8 Done
  На этом уроке мы создадим схему базы данных для нашего проекта
Отчёт отправил: 13417. Chip Выполнено за 24 мин. [Показать отчёт]
Научился: Познакомился со структурой базы данных. Определил сущности, таблицы и поля. 
5 FREE Подключение к базе данных пользователя и миграция пользователей 00:13:36
1 тест
21 чел. ★ 4.8 Done
  На этом уроке мы создадим базу данных, подключим ее к нашему проекту и создадим таблицу пользователей
при помощи механизма миграций
Отчёт отправил: 13417. Chip Выполнено за 5 час. 17 мин. [Показать отчёт]
Научился: Мой дистрибутив Fedora по запросу установки MySQL вместо нее установил MariaDB, я так понимаю, это свободная версия MySQL, команды по управлению схожи. Установил PhpMyAdmin, создал через него базу данных bulletinsdb. Установил yii2, с помощью команды yii migrate/create create_user_table создал файл миграции, заполнил его данными для таблицы user. Запустил команду yii migrate и с помощью нее создал таблицу user в базе данных bulletinsdb. 
6 FREE Аутентификация - захешированный пользователь из БД 00:16:58
1 тест
20 чел. ★ 4.8 Done
  На этом уроке мы подкорректируем модель User  и реализуем аутентификацию на сайте через базу данных
Отчёт отправил: 13417. Chip Выполнено за 5 час. 27 мин. [Показать отчёт]
Научился: Научился добавлять нового пользователя в PhpMyAdmin с md5-хешированным паролем. Подключил к программе библиотеку mysql для создания запросов к базе данных. Подключил библиотеку crypto для md5-хеширования пароля пользователя. Добавил в программу форму ввода для логина и пароля. После ввода пароля он хешируется с помощью md5, выполняется запрос к базе и сравнивается пара логин/пароль. Для наглядности прикрепляю короткое видео. 
Видеообзор: RqkF3qRxkkc
7 FREE Информация о пользователе 00:13:28
19 чел. ★ 4.8 Done
  На этом уроке создадим таблицу и модель Информация о пользователе
Отчёт отправил: 13417. Chip Выполнено за 44 мин. [Показать отчёт]
Научился: Создал миграцию, заполнил ее необходимыми данными, применил миграцию и добавил новую таблицу userinfo в базу. С помощью PhpMyAdmin добавил строку John Carl Brown в новую таблицу.  
8 FREE MVC - немного теории 00:12:09
1 тест
19 чел. ★ 4.8 Done
  На этом уроке мы рассмотрим теоретические основы работы MVC и создадим новый контроллер в нашем проекте
Отчёт отправил: 13417. Chip Выполнено за 3 час. 4 мин. [Показать отчёт]
Научился: Создал файл для контроллера user, добавил в него обработку действия index. Создал требуемое представление для нового контроллера. Для удобства навигации по сайту добавил меню, в котором разместил ссылку на запуск контроллера user и действия index. В коротком видео демонстрация перехода по ссылкам и результат работы контроллера. 
Видеообзор: XlQntGKemmc
9 MVC - информация о пользователе 00:09:33
18 чел. ★ 5 Done
  На этом уроке мы получим данные о пользователе из базы в представление
Отчёт отправил: 13417. Chip Выполнено за 1 час. 52 мин. [Показать отчёт]
Научился: Создал файл модели user, в котором через SQL-запрос возвращается информация о таблице user по указанному id. Аналогично создал модель для таблицы userinfo для получения информации по user_id. Контроллер /user/index обращается к обеим моделям, получает результат их работы и передает данные представлению. Представление отображает логин и фамилию пользователя. 
10 Пользователь - кто зарегистрирован сейчас? 00:09:22
1 тест
18 чел. ★ 4.9 Done
  На этом уроке мы получим информацию о текущем зарегистрированном пользователе, а также сделаем рефакторинг кода

Отчёт отправил: 13417. Chip Выполнено за 3 час. 11 мин. [Показать отчёт]
Научился: Научился обращаться к данным сессии, получать текущего зарегистрированного пользователя. Для тестирования сайта добавил второго пользователя в таблицы user и userinfo. На видео демонстрация работы сайта при входе двух разных пользователей. 
Видеообзор: DRIeEUJ21Do
11 Новый пользователь - заготовка и меню 00:09:17
18 чел. ★ 5 Done
  На этом уроке мы создадим действие и представление для добавления пользователя,
а также добавим пункт меню "Регистрация"
Отчёт отправил: 13417. Chip Выполнено за 1 час. 52 мин. [Показать отчёт]
Научился: Добавил действие add для контроллера User. Создал представление для действия add. В меню добавил новый пункт "Регистрация". Пока что оставил свой пункт меню "Информация о пользователе" для тестирования сайта. Заготовка для добавления нового пользователя готова, идем дальше :) 
12 Новый пользователь - модель для формы 00:15:43
1 тест
18 чел. ★ 5 Done
  На этом уроке мы создадим модель параметров формы добавления пользователя
Отчёт отправил: 13417. Chip Выполнено за 1 час. 31 мин. [Показать отчёт]
Научился: Создал новую модель UserForm. Добавил функцию проверки полей формы - все поля проверяется на не пустое значение. Поле пароль и подтверждение пароля дополнительно проверяются на эквивалентность. Через вторую функцию можно получить значение атрибутов label для полей формы. Добавил атрибут label "Login" для поля username. 
13 Новый пользователь - дизайн формы начало 00:16:37
18 чел. ★ 5 Done
  На этом уроке мы зададим поля формы добавления пользователя
Отчёт отправил: 13417. Chip Выполнено за 1 час. 26 мин. [Показать отчёт]
Научился: Добавил форму с тремя полями ввода и соответствующими метками. Первое поле для ввода логина, два других для ввода пароля и подтверждения пароля. 
14 Новый пользователь - дизайн формы: поля и колонки 00:09:17
1 тест
18 чел. ★ 5 Done
  На этом уроке мы добавим все поля формы, кнопку сохранения, а также разместим поля в две колонки


Отчёт отправил: 13417. Chip Выполнено за 4 час. 23 мин. [Показать отчёт]
Научился: Добавил в форму три новых поля: фамилия, имя, отчество и кнопку для отправки данных. В модели UserForm добавил названия для всех меток полей. 
15 Новый пользователь - сохранение нового пользователя 00:20:06
1 тест
18 чел. ★ 5 Done
  На этом уроке мы напишем алгоритм сохранения записи о пользователе и информации о нем
Отчёт отправил: 13417. Chip Выполнено за 3 час. 1 мин. [Показать отчёт]
Научился: Научился передавать данные из формы в программу, проверять их на корректность, добавлять запись в таблицу базы данных, перенаправлять пользователя на указанную страницу. 
16 Красивая аутентификация на сайте 00:07:37
18 чел. ★ 5 Done
  На этом уроке мы поменяем дизайн формы входа на сайт
Отчёт отправил: 13417. Chip Выполнено за 1 час. 35 мин. [Показать отчёт]
Научился: В этом уроке я изменил названия для меток полей формы, перевел их на русский язык. Добавил флажок для запоминания входа пользователя. Если флажок установлен, информация о входе сохраняется в течение суток. Если сброшен - браузер помнит о пользователе только во время сессии. 
17 Что доступно Юпитеру? 00:10:21
1 тест
18 чел. ★ 5 Done
  На этом занятии мы научимся управлять доступом к пунктам главного меню
Отчёт отправил: 13417. Chip Выполнено за 1 час. 21 мин. [Показать отчёт]
Научился: Сделал пункт меню "Регистрация" видимым только для гостевого пользователя. Пункт меню "Информация о пользователе" появляется только для авторизированных пользователей. 
18 Объявления - создание базы и модели 00:09:51
1 тест
18 чел. ★ 5 Done
  На этом уроке мы создадим таблицу bulletins при помощи миграций и сгенерируем для данной таблицы класс ActiveRecord
Отчёт отправил: 13417. Chip Выполнено за 34 мин. [Показать отчёт]
Научился: Создал файл для миграции таблицы bulletins, указал в этом файле требуемые поля. Применил миграцию, в базе данных появилась новая таблица bulletins. С помощью генератора gii создал класс BulletinsRecord. 
19 Объявления - контроллер, представление и много записей 00:13:46
1 тест
18 чел. ★ 5 Done
  На этом уроке мы создадим контроллер и представление для работы с объявлениями,
а также сделаем связь записей о пользователях и объявлениях типа "один-ко-многим"
Отчёт отправил: 13417. Chip Выполнено за 1 час. 21 мин. [Показать отчёт]
Научился: Создал новый контроллер BulletinsController, добавил для него представление при переходе по адресу /bulletins/index. Ссылка доступна только авторизированного пользователя. 
20 Объявление - функциональный дизайн страницы 00:14:17
17 чел. ★ 5 Done
  На этом уроке мы сделаем дизайн страницы наших объявлений, который поможет нам работать с объявлениями в дальнейшем
Отчёт отправил: 13417. Chip Выполнено за 1 час. 45 мин. [Показать отчёт]
Научился: Добавил кнопку "Добавить объявление". Ниже разместил таблицу с вкладками "Опубликованные", "Черновики" и "Удаленные".  
21 Объявление - ограничение доступа 00:09:25
17 чел. ★ 5 Done
  На этом уроке мы ограничим доступ неавторизированного пользователя к странице управления объявлениями, а также решим некоторые технические вопросы
Отчёт отправил: 13417. Chip Выполнено за 2 час. 3 мин. [Показать отчёт]
Научился: Настроил доступ к /bulletins/index только для выполнившего вход пользователя. При попытке гостя пройти по этой ссылке, он перенаправляется на страницу входа. Добавил запись в таблицу во вкладке черновики. Оформил ссылки в виде кнопок. Для иконки "галочка" использовал источник Google Icons. 
22 Объявление - поля для пользовательских форм 00:09:44
17 чел. ★ 5 Done
  На этом уроке мы создадим класс BulletinsForm и определим, какие поля будут использоваться при создании объявления

Отчёт отправил: 13417. Chip Выполнено за 38 мин. [Показать отчёт]
Научился: Создал модель BulletinsForm с полями title, info, contacts, city, price. Добавил проверку на заполненность полей. Указал названия для меток в attribute_labels. 
23 Объявление - форма добавления объявлений 00:17:03
1 тест
17 чел. ★ 5 Done
  На этом уроке мы создадим представление для добавления объявлений и действие контроллера, запускающего это представление

Отчёт отправил: 13417. Chip Выполнено за 3 час. 5 мин. [Показать отчёт]
Научился: Добавил в контроллер BulletinController действие addbulletin. Создал для этого действия представление: разместил в нем форму с двумя колонками. Для заголовков полей ввода использовал метки из модели BulletinForm. 
24 Объявление - сохранение в черновик 00:10:39
17 чел. ★ 5 Done
  На этом уроке мы реализуем механизм сохранения нового объявления в черновик
Отчёт отправил: 13417. Chip Выполнено за 1 час. 32 мин. [Показать отчёт]
Научился: В этом уроке я повторил как получать данные формы через post запрос и как добавлять новую запись в таблице базы данных. Заполнил поля формы для добавления новой бюллетени, данные выбрал как у Валерия, "Продается дом в г. Гусляр и т.д." 
25 Объявление - список 00:18:42
15 чел. ★ 5 Done
  На этом уроке мы реализуем вывод сохраненных в базе объявлений в список
Отчёт отправил: 13417. Chip Выполнено за 7 час. 46 мин. [Показать отчёт]
Научился: Добавил в базу новое объявление по продаже детской коляски в г. Гусляр. Написал функции для загрузки из базы данных объявлений со статусами wait, public, delete. Во вкладке черновики вывел все объявления со статусом wait. 
26 Объявление - всё на публику 00:12:16
1 тест
15 чел. ★ 5 Done
  На этом уроке мы сделаем наши объявления опубликованными
Отчёт отправил: 13417. Chip Выполнено за 2 час. 32 мин. [Показать отчёт]
Научился: Добавил ссылки для кнопок "Опубликовать", создал новое действие public для контроллера BulletinsController. Повторил как получать текущее время. После нажатия на кнопку "Опубликовать" текущее время сохраняется в поле date_pub выбранного объявления и его статус меняется на 'public'. 
27 Объявление - публикация на главной странице 00:15:27
1 тест
15 чел. ★ 5 Done
  На этом уроке мы разместим наши опубликованные объявления на главной странице сайта
Отчёт отправил: 13417. Chip Выполнено за 1 час. 54 мин. [Показать отчёт]
Научился: Вывел на главную страницу список всех публичных объявлений от всех пользователей. Узнал как можно использовать placeholder для картинок. 
28 Объявление - скрыть нельзя удалить 00:12:40
14 чел. ★ 5 Done
  На этом уроке мы реализуем возможность помещать объявления в группу удаленных, восстанавливать их оттуда, а также отключать их просмотр

Отчёт отправил: 13417. Chip Выполнено за 42 мин. [Показать отчёт]
Научился: Заменил пустые адреса # ссылок на /bulletins/wait?id= и /bulletins/delete?id=. Теперь для объявлений появилась возможность цикла перехода между состояниями wait, public, delete. 
29 Объявление - статусный рефакторинг 00:08:45
1 тест
14 чел. ★ 5 Done
  НА этом уроке мы сделаем рефакторинг методов работы со статусом объявлений
Отчёт отправил: 13417. Chip Выполнено за 28 мин. [Показать отчёт]
Научился: Создал новую функцию для установки статуса объявления. Перенес в нее весь код по изменению состояния объявления. В трех прежних функциях вызываю новую функцию. 
30 Объявление - рефакторинг редактирования 00:12:58
14 чел. ★ 5 Done
  На этом уроке мы реализуем редактирование путем небольшого видоизменения функции добавления записи
Отчёт отправил: 13417. Chip Выполнено за 2 час. 10 мин. [Показать отчёт]
Научился: Добавил адреса href-ссылок для кнопок "Редактировать". Реализовал редактирование объявлений с последующим сохранением в базе данных. Изменил цену детской коляски с 5000.23 на 4000.23 
31 Объявление: запрос - в функцию & кнопка для изображений 00:09:52
14 чел. ★ 5 Done
  На этом уроке мы сделаем рефакторинг метода index и добавим кнопки для перехода в режим работы с изображениями
Отчёт отправил: 13417. Chip Выполнено за 1 час. 13 мин. [Показать отчёт]
Научился: Добавил кнопки "Фото" для объявлений. Нашел по 5 изображений для каждого объявления по продаже дома, автомобиля и детской коляски. 
32 Изображения - микс из миграций 00:12:35
14 чел. ★ 5 Done
  На этом уроке мы через механизм миграций создадим таблицу photo и добавим поле для аватары в таблицу bulletins
Отчёт отправил: 13417. Chip Выполнено за 39 мин. [Показать отчёт]
Научился: С помощью механизма миграций создал новую таблицу photo и добавил в таблицу bulletins дополнительный столбец avatar. 
33 Изображения - снова MVC 00:10:47
14 чел. ★ 5 Done
  На этом уроке мы создадим модель, контролер и представление для работы с фото
Отчёт отправил: 13417. Chip Выполнено за 1 час. 17 мин. [Показать отчёт]
Научился: С помощью gii создал модель PhotoRecord, добавил PhotoController с действием actionIndex и его представление, которое выводит <h3>Изображения</h3>. 
34 Изображения - работа с моделью 00:17:16
14 чел. ★ 5 Done
  На этом уроке мы передадим модель нашего объявления в представление
Отчёт отправил: 13417. Chip Выполнено за 1 час. 33 мин. [Показать отчёт]
Научился: Выполнил поиск фотографий по переданному номеру объявления, передал найденные фотографии в представление. Добавил в представление кнопку "Добавить фото". 
35 Работаем над ошибками - YII2 в помощь 00:13:03
14 чел. ★ 5 Done
  На этом уроке мы разберемся, как работать над ошибками и читать сигналы дебаггера YII2
Отчёт отправил: 13417. Chip Выполнено за 48 мин. [Показать отчёт]
Научился: Проверил работу дебаггера Yii, придумал ошибку. На верхнем скриншоте слева на строке 33 в функции getBulletins допустил опечатку, вместо $currSession написал $currSesion. В результате справа в окне браузера сообщается о неопределенной переменной currSesion и указывается место в коде, где выполняется обращение к этой переменной. Посмотрев немного выше, на строке 31 можно увидеть определение переменной currSession и становится понятно, что была допущена опечатка. Результат исправления ошибки показан на нижнем скриншоте.  
36 Изображения - где живут картинки 00:15:34
1 тест
14 чел. ★ 5 Done
  На этом уроке мы создадим папку для изображений, разместим там изображение по умолчанию, а также создадим универсальные параметры пути и изображения по умолчанию
Отчёт отправил: 13417. Chip Выполнено за 1 час. 53 мин. [Показать отчёт]
Научился: Нашел в интернете изображение "по умолчанию", выбрал как у Валерия. Создал папку, разместил в ней это изображение. В представлении изменил адрес, вместо placeholder указал путь и файл через переменные. 
37 Изображения - модель формы 00:11:10
14 чел. ★ 5 Done
  На этом уроке мы создадим модель PhotoForm для работы с изображениями

Отчёт отправил: 13417. Chip Выполнено за 1 час. 24 мин. [Показать отчёт]
Научился: Создал класс модели PhotoForm, добавил в него поля file, link, info и методы rules и attributeLabels. 
38 Изображение - загрузочное представление 00:15:37
14 чел. ★ 5 Done
  На этом занятии мы создадим форму представления, через которое будет загружаться изображение

Отчёт отправил: 13417. Chip Выполнено за 1 час. 48 мин. [Показать отчёт]
Научился: Создал новое действие actionAdd для PhotoController, добавил для него представление, в котором выводится форма. В форме разместил кнопку для загрузки файла, текстовое поле для ввода информации и кнопку отправки данных. 
39 Изображение - загрузка файла на сайт 00:17:29
1 тест
14 чел. ★ 5 Done
  На этом уроке мы реализуем алгоритм загрузки изображений на сайт
Отчёт отправил: 13417. Chip Выполнено за 3 час. 18 мин. [Показать отчёт]
Научился: Научился загружать файлы с помощью метода post. Добавил к имени файла время его загрузки с помощью функции time. Загрузил все 5 изображений автомобиля Lada Priora в папку images. 
40 ПРОМЕЖУТОЧНЫЙ ВИДЕО ОБЗОР без видео
11 чел. ★ 5 Done
  Мы уже многое сделали на нашем видеокурсе, и автору очень важно
узнать Ваше мнение о данном курсе и получить обратную связь
в форме видео-презентации и ответов на вопросы.

Сделай видео-презентацию своего сайта.
Отчёт отправил: 13417. Chip Выполнено за 1 час. 13 мин. [Показать отчёт]
Научился: На этом курсе я начал знакомство с фреймворком yii для создания сайта доски объявлений. Попрактиковался в языке php, увидел как в этом языке программирования создавать классы, методы. Фреймворк yii хорошо помогает в разработке сайта, модель MVC встроена в сам фреймворк. Узнал про механизм миграций, с помощью него создал таблицы в базе данных. Попутно самостоятельно разрабатывал сайт на языке Си. На верхнем скриншоте сайт php+yii, на нижнем скриншоте сайт на языке Си. На видео я показываю сайт на языке Си. Курс понравился подходом, который начал Евгений Витольдович - "делай как я". По этому курсу можно с полного нуля без знаний php и yii начать разрабатывать свой сайт. Причем с каждым последующим уроком больше входишь во вкус, как говорил Дмитрий Синицын, "сериал затягивает". В дальнейшем для реализации сайта доски объявлений можно добавить поиск по объявлениям, разные тематики, возможность оставлять комментарии.  
Видеообзор: B_XBVUHR5Ks
41 Изображение - сохранение пути в базу 00:14:17
11 чел. ★ 5 Done
  На этом уроке мы реализуем сохранение пути к файлу изображений в базу данных
Отчёт отправил: 13417. Chip Выполнено за 2 час. 13 мин. [Показать отчёт]
Научился: Реализовал сохранение пути загруженного изображения в таблице photo. Проверил работу сайта для двух изображений объявления по продаже автомобиля. 
42 Изображение - управление картинками 00:08:36
11 чел. ★ 5 Done
  На этом уроке мы займемся дизайном - создадим выпадающее меню управления изображением
Отчёт отправил: 13417. Chip Выполнено за 1 час. 12 мин. [Показать отчёт]
Научился: Научился создавать выпадающий список меню, добавил в него пункты "Информация", "Сделать главной", "Удалить фото". 
43 Изображение - JS - немного теории и пижонства 00:16:29
1 тест
11 чел. ★ 4.7 Done
  На этом уроке мы рассмотрим работу JS на yii2
Отчёт отправил: 13417. Chip Выполнено за 1 час. 51 мин. [Показать отчёт]
Научился: Создал тестовое представления для знакомства с JavaScript. Разместил в представлении скрытое поле ввода и кнопку. С помощью JavaScript и jQuery научился показывать и скрывать поле ввода при нажатии на кнопку. Попутно научился изменять текст на кнопке. 
44 Изображение - JS - глобализация 00:26:49
11 чел. ★ 5 Done
  На этом уроке мы перенесем все скрипты JS в отдельный файл, а также реализуем открытие и скрытие элементов ввода информации

Отчёт отправил: 13417. Chip Выполнено за 4 час. 19 мин. [Показать отчёт]
Научился: Перенес JavaScript-код из представления в отдельный .js файл. Добавил в представление /photo/index скрытое поле для ввода информации. После нажатия кнопки "Управление" и при выборе пункта меню "Информация" становится видимым скрытое поле под выбранным изображением. Рядом с полем появляется новая кнопка "галочка" для скрытия поля. 
45 Изображение - JS - сохранение информации в базу 00:22:42
1 тест
11 чел. ★ 5 Done
  На этом уроке мы научим нашу систему сохранять информацию об изображениях в базу
с использованием технологии ajax


Отчёт отправил: 13417. Chip Выполнено за 2 час. 43 мин. [Показать отчёт]
Научился: Научился использовать ajax для передачи данных из программы на JavaScript на сервер. Заполнил поле информация под каждой фотографией объявления, передал информацию на сервер и сохранил в таблице photo поле info для каждой фотографии. 
46 Изображение - JS - извлечение методом ajax 00:09:51
11 чел. ★ 5 Done
  На этом уроке мы научим ajax получать информацию об изображениях из базы
Отчёт отправил: 13417. Chip Выполнено за 1 час. 8 мин. [Показать отчёт]
Научился: С помощью ajax реализовал обращение к серверу и загрузку поля info для выбранного изображения из таблицы photo базы данных. 
47 Изображение - аватарка - вывод на главной странице 00:15:26
11 чел. ★ 5 Done
  На этом уроке мы реализуем вывод главных изображений каждого объявления
(далее - аватарки) на главной странице
Отчёт отправил: 13417. Chip Выполнено за 1 час. 17 мин. [Показать отчёт]
Научился: Установил значение номера изображения в поле avatar для объявления по продаже автомобиля. Реализовал вывод изображения ("аватарки") на главной странице сайта. При указанном значении в поле avatar информация о пути к изображению берется из поля link таблицы photo. Если в поле avatar пусто, то на главную страницу выводится изображение по умолчанию. 
48 Изображение - аватарка - работа над ошибками связей 00:09:33
11 чел. ★ 5 Done
  На данном уроке мы исправим ошибки вывода фотографий, очистим базу и заново загрузим в нашу базу
фотографии в одно из объявлений
Отчёт отправил: 13417. Chip Выполнено за 28 мин. [Показать отчёт]
Научился: Исправил ошибку в действии actionIndex по выбору id. Удалил все записи из таблицы photo, загрузил через интерфейс сайта новые фотографии для объявления по продаже автомобиля. Добавил описание к каждой фотографии. 
49 Изображение - аватарка - как стать главной 00:18:13
11 чел. ★ 5 Done
  На этом уроке мы создадим код, делающий любое фото главным
Отчёт отправил: 13417. Chip Выполнено за 1 час. 28 мин. [Показать отчёт]
Научился: Добавил обработчик нажатия по ссылке "Сделать главной", реализовал передачу данных с помощью ajax на сервер, где через действие setavatar установил аватарку для объявления. 
50 Изображение - удаление - ни шагу без подтверждения! 00:09:13
11 чел. ★ 5 Done
  На этом уроке мы реализуем всплывающее окно подтверждения действия
и протестируем результаты выбора различных вариантов
Отчёт отправил: 13417. Chip Выполнено за 30 мин. [Показать отчёт]
Научился: Добавил обработчик при нажатии кнопки удаления фотографии. В обработчике вызывается функция подтверждения, которая запрашивает у пользователя подтверждение для удаления фотографии. 
51 Изображение - удаление - удаление файла и записи 00:15:49
11 чел. ★ 5 Done
  На этом уроке мы реализуем удаление файлов изображений и записей о них из базы данных
Отчёт отправил: 13417. Chip Выполнено за 1 час. 30 мин. [Показать отчёт]
Научился: Через ajax передал номер изображения на сервер в действие setdelete. Реализовал удаление файла из папки изображений и записи из таблицы photo. 
52 Главная страница - подробности - ссылки и заготовка представлени 00:09:05
11 чел. ★ 5 Done
  На этом уроке мы создадим ссылки для объявлений на главной странице и заготовку представления для подробного вывода
информации объявления
Отчёт отправил: 13417. Chip Выполнено за 56 мин. [Показать отчёт]
Научился: Создал новое действие view-bulletin и соответствующее представление. Добавил ссылки на вызов действия. Вывел в представлении заголовок и информацию об объявлении. 
53 Главная страница - подробности - больше подробностей 00:11:37
11 чел. ★ 5 Done
  На этом уроке мы выведем максимум информации на страницу подробностей объявления
Отчёт отправил: 13417. Chip Выполнено за 1 час. 24 мин. [Показать отчёт]
Научился: Добавил вывод полей (главная фотография "аватарка", цена, город, контактная информация и дата публикации) в представлении view-bulletin. 
54 Главная страница - подробности - расширяя информацию 00:15:15
1 тест
11 чел. ★ 5 Done
  На этом уроке мы внесем в наш код изменения, которые позволят сохранять объявления с большим количеством информации

Отчёт отправил: 13417. Chip Выполнено за 1 час. 1 мин. [Показать отчёт]
Научился: С помощью механизма миграции изменил тип столбца info в таблице bulletins с varchar(255) на longtext. Добавил новое объявление по продаже дома, в котором разместил более объемную и подробную информацию в поле info. Текст взял по на основе реального объявлении на авито. Применил функцию nl2br к столбцу info при сохранении объявления. 
55 Главная страница - оформление - дизайн объявления 00:10:02
11 чел. ★ 5 Done
  На этом уроке мы зададим стиль дизайна объявления
Отчёт отправил: 13417. Chip Выполнено за 1 час. 14 мин. [Показать отчёт]
Научился: Попрактиковался в CSS для оформления страницы, перенёс поле "информация" в правую часть страницы, оформил вывод полей "цена", "город", "контакты" в виде таблицы. 
56 Главная страница - оформление - дизайн элементов базовой страницы 00:11:44
1 тест
11 чел. ★ 5 Done
  На этом уроке мы выведем информацию о себе в элементе footer и сделаем главное меню стильным и красивым
Отчёт отправил: 13417. Chip Выполнено за 1 час. 13 мин. [Показать отчёт]
Научился: С помощью CSS изменил цвет главного меню сайта на синий. При выборе элемента меню, цвет его фона меняется на зеленый. Изменил информацию в footer страницы. 
57 Главная страница - оформление - ловим цвет пикселя 00:06:00
11 чел. ★ 5 Done
  На этом уроке мы рассмотрим использование инструментов определения цвета пикселя (Пипетка)

Отчёт отправил: 13417. Chip Выполнено за 19 мин. [Показать отчёт]
Научился: Изменил цвет фона меню на #ee8208. Познакомился с инструментом Пипетка в браузере Firefox. Узнал про сайты для определения цвета пикселя. Для выбора цвета использовал сайт sanstv.ru  
58 Главная страница - оформление - смотрим все изображения 00:15:27
11 чел. ★ 5 Done
  На этом уроке мы реализуем просмотр всех изображений объявления "не хуже, чем на Avito"
Отчёт отправил: 13417. Chip Выполнено за 1 час. 35 мин. [Показать отчёт]
Научился: Вывел все изображения выбранного объявления на страницу. Реализовал выбор изображения "в стиле авито" при срабатывании события hover над миниатюрой изображения. 
59 Главная страница - оформление - стильный логотип 00:09:56
11 чел. ★ 5 Done
  На этом уроке мы реализуем вывод логотипа в иконку проекта и в пункт меню перехода на главную страницу
Отчёт отправил: 13417. Chip Выполнено за 1 час. 45 мин. [Показать отчёт]
Научился: Загрузил два изображения в формате .ico и .png. Файл .ico переименовал в favicon.ico и разместил в корне сайта. Файл .png переименовал в logo.png и добавил на главное меню рядом с пунктом меню "Доска объявлений". 
60 Главная страница - оформление - оповещения через баннер 00:11:19
10 чел. ★ 5 Open
  На этом уроке мы создадим баннер для оповещений, новостей
61 Разделы (темы) - немного теории 00:11:07
10 чел. ★ 5 ^
  На этом уроке мы рассмотрим вопрос тематик объявлений на нашем сайте, а также составим план (структуру) таблицы тем Themes и связующей таблицы ThemesBulletins
62 Разделы (темы) - миграции с внешними ключами 00:18:49
10 чел. ★ 5 ^
  На этом уроке мы создадим миграции таблиц themes и themesbulletins, сами эти таблицы и их модели ActiveRecord с внешними связями
63 Обратная связь - мозговой штурм - внештатные ситуации 00:09:19
9 чел. ★ 5 ^
  В данном уроке попрошу Вас выполнить небольшую самостоятельную работу и дать обратную связь.
64 Разделы (темы) - вывод тем в объявлении 00:16:29
9 чел. ★ 5 ^
  На этом уроке мы реализуем вывод тем на странице объявления
65 Разделы (темы) - меню тематик 00:10:55
8 чел. ★ 5 ^
  На этом уроке мы реализуем вывод ссылок на темы на главной странице и подсчет объявлений в каждой теме
66 Разделы (темы) - тематические выборки 00:15:13
8 чел. ★ 5 ^
  На этом уроке мы реализуем выбор объявлений по темам и вывод их на основную страницу
67 Разделы (темы) - полезные переходы 00:11:48
7 чел. ★ 5 ^
  На этом уроке мы реализуем возвращение со страницы объявлений на предыдущую страницу, а также переходы по темам объявления по типу хештегов
68 Разделы (темы) - администрирование - теория и заготовки 00:09:03
7 чел. ★ 5 ^
  На этом уроке мы создадим контроллер для администрирования разделов (тем) и представление index
69 Разделы (темы) - администрирование - все темы в таблицу 00:10:55
7 чел. ★ 5 ^
  На этом уроке мы выведем существующие темы в таблицу и зададим им элементы управления
70 Разделы (темы) - администрирование - подтверждение удаления 00:15:58
7 чел. ★ 5 ^
  На этом уроке мы реализуем алгоритм подтверждения удаления и создадим соответствующее представление
71 Разделы (темы) - администрирование - удаление разделов и чистка связей 00:09:07
7 чел. ★ 5 ^
  На этом уроке мы окончательно удалим раздел, а перед этим удалим все его связи с объявлениями
72 Разделы (темы) - администрирование - Обычный ThemesForm 00:10:23
7 чел. ★ 5 ^
  На этом уроке мы создадим модель ThemesForm, заготовку действия Add в контроллере Themes и представление под него
73 Разделы (темы) - исправление подсчета и отображение текущей темы 00:08:28
7 чел. ★ 5 ^
  Hа этом уроке мы исправим ошибку подсчета, обнаруженную в процессе прохождения курса,
а также отобразим текущую тему, по которой выборка объявлений, в баннере

74 Разделы (темы) - администрирование - "темное" представление 00:11:49
7 чел. ★ 5 ^
  На этом уроке мы создадим поля для редактирования или добавления темы в представлении themes\add
75 Разделы (темы) - администрирование - волшебный выпадающий список 00:09:17
1 тест
7 чел. ★ 5 ^
  На этом уроке мы создадим выпадающий список выбора родительской темы
76 Разделы (темы) - администрирование - сохранение темы 00:19:30
7 чел. ★ 5 ^
  На этом уроке мы реализуем сохранение добавляемых и редактируемых тем
77 Разделы (темы) - администрирование - рефакторинг и валидация 00:07:02
7 чел. ★ 5 ^
  На этом уроке мы сделаем рефакторинг нашего представления add и валидацию данных формы ThemesForm
78 Связи объявлений и тем - заготовка 00:12:50
7 чел. ★ 5 ^
  На этом уроке мы создадим действие в контроллере BulletinsController и представление,
которые помогут нам работать со связями объявлений и тем
79 Связи объявлений и тем - добавление новой темы 00:22:38
7 чел. ★ 5 ^
  На этом уроке мы научим нашу систему добавлять новую тему в объявление (делать связь темы и объявления)
80 Связи объявлений и тем - темы, которых не было 00:11:33
1 тест
7 чел. ★ 5 ^
  На этом уроке мы научим нашу систему выводить в список добавляемых в объявление тем только те, которые не прикреплены к нашему объявлению
81 Связи объявлений и тем - темы, которых не будет 00:10:57
7 чел. ★ 5 ^
  На этом уроке мы научим нашу систему удалять из объявлений темы, к которым наше объявление привязывать не надо
82 Глобальный поиск - поле поиска в меню 00:17:09
7 чел. ★ 5 ^
  На этом уроке мы добавим поле поиска в навигационное меню сайта, а также решим вопрос с активными пунктами меню.
83 Глобальный поиск - ищем глобально 00:17:08
7 чел. ★ 5 ^
  На этом уроке мы создадим алгоритм поиска по вводимому в поле search контенту
84 Расширенный поиск - группировка пунктов главного меню 00:12:47
7 чел. ★ 5 ^
  На этом уроке мы сгруппируем пункты главного меню в подразделы,
и сделаем в нем ссылку на страницу расширенного поиска
85 Расширенный поиск - заготовки и план 00:10:03
7 чел. ★ 5 ^
  На этом уроке мы набросаем план будущей страницы расширенного поиска,
а также создадим действие контроллера и заготовку представления расширенного поиска
86 Расширенный поиск - стили и форма 00:10:11
7 чел. ★ 5 ^
  На этом уроке мы внесем исправления в стили субменю и сделаем модель формы расширенного поиска
87 Расширенный поиск - дизайн текстовых полей и кнопки 00:16:02
7 чел. ★ 5 ^
  На этом уроке мы прокачаем навыки дизайна текстовых полей, создания активной формы в представлении,
а также создания кнопки через хелперы yii2
88 Расширенный поиск - цена - выбор варианта 00:10:45
7 чел. ★ 5 ^
  На этом уроке мы создадим систему управления выбором варианта поиска по цене
89 Расширенный поиск - цена - невидимые поля 00:18:17
7 чел. ★ 5 ^
  На этом уроке мы создадим невидимые блоки с полями поиска цены, которые становятся видимыми при нажатии определенного пункта навигатора
90 Расширенный поиск - дата публикации - виджет извне 00:23:18
7 чел. ★ 5 ^
  На этом уроке мы установим в наш проект компонент jui от стороннего разработчика
и создадим календарики для выбора дат

91 Расширенный поиск - результаты выборки - частичное представление 00:17:21
7 чел. ★ 5 ^
  На этом уроке мы рассмотрим возможность использования частичного представления в yii2-проекте и выведем в частичное представление карточку объявления
92 Расширенный поиск - генератор поиска - возвращение к SQL-запросу 00:15:52
7 чел. ★ 5 ^
  На этом уроке мы создадим генератор отчета, используя работу ActiveRecord фреймворка yii2 c
sql-запросами, и включим в него поиск по текстовым полям формы расширенного поиска
93 Расширенный поиск - генератор поиска - ограничивающие даты 00:10:54
7 чел. ★ 5 ^
  На этом уроке мы добавим в генератор отчета расширенного поиска выборку по датам публикации
94 Расширенный поиск - генератор поиска - три вида цены и один POST 00:14:47
7 чел. ★ 5 ^
  На этом уроке мы реализуем различные варианты выборки объявлений по цене и добавим их в наш генератор расширенного поиска
95 Обратная связь - свой сайт объявлений без видео
7 чел. ★ 5 ^
  И снова обратная связь.Подумаем самостоятельно и ответим на вопросы:
96 Расширенный поиск - генератор поиска - показать, что нужно 00:20:55
7 чел. ★ 5 ^
  На этом уроке мы реализуем отображение той вкладки поиска по ценам,
по которой производился  поиск
97 Работа с документацией Yii2 00:04:42
7 чел. ★ 5 ^
  На этом уроке переходим на один из официальных сайтов по Yii2
и, пользуясь помощью документации, реализовываем одну из своих идей

98 Пользователи и роли - планирование ролевой модели 00:08:08
7 чел. ★ 5 ^
  На этом уроке мы составим ролевую модель пользователей нашего сайта
99 Пользователи и роли - фильтры контроля доступа ACF - теория и эксперименты 00:08:44
7 чел. ★ 5 ^
  На этом уроке мы рассмотрим принципы работы фильтров контроля доступа ACF
100 Пользователи и роли - фильтры контроля доступа ACF - фильтруем всё 00:10:27
7 чел. ★ 5 ^
  На этом уроке мы сами создадим метод behaviors() в BulletinsController и зададим нужные фильтры для действий контроллера
101 Пользователи и роли - роли через RBAC - теория, установка и миграции 00:11:16
7 чел. ★ 5 ^
  На этом уроке мы установим расширение RBAC, настроим подключение к RBAC и создадим
базы для авторизации при помощи механизма миграции
102 Пользователи и роли - роли через RBAC - тесты и практика 00:25:53
7 чел. ★ 5 ^
  На этом уроке мы создадим тестовые роли и разрешения, а также проверим работу контроллера
согласно разрешений
103 Пользователи и роли - роли через RBAC - вносим действия в план 00:09:04
7 чел. ★ 5 ^
  На этом уроке мы добавим действия к ролям в нашей актуальной ролевой модели
104 Пользователи и роли - роли через RBAC - реализация плана 00:30:34
6 чел. ★ 5 ^
  На этом уроке мы создадим актуальные роли и действия для пользователей нашего сайта
105 Пользователи и роли - ACF+RBAC - ограничим доступ к темам 00:16:01
4 чел. ★ 5 ^
  На этом уроке мы реализуем ролевую модель для контроллера тем
106 Пользователи и роли - управление ролями и привилегиями - контроллер и таблица ролей 00:16:57
3 чел. ★ 5 ^
  на этом уроке мы создадим контроллер и представление для управления ролями
107 Пользователи и роли - управление ролями и привилегиями - форма добавления роли 00:13:53
3 чел. ★ 5 ^
  На этом уроке мы создадим действие добавления роли и форму добавления роли

108 Пользователи и роли - управление ролями и привилегиями - сохранение и удаление роли 00:14:17
3 чел. ★ 5 ^
  На этом уроке мы реализуем сохранение роли, а также напишем алгоритм удаления роли
  Итого:   108 видеоуроков 23 час. 33 мин.
25 тестов
3 чел. ★ 4.99  
  Финалисты:   Жан,   Николай Денисов,   Tom .

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





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

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

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

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


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



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