Создание Доски объявлений с использованием фреймворка YII2.
Автор: Жданов В.В.
Данный курс - практикум по созданию сайта с использованием фреймворка YII2.
Цель: создание небольшого сайта с нуля до "коробочного" варианта, готового к размещению на хостинге.
Теории здесь не много, больше практической работы по принципу: "произвел действие - получил результат".
Также по максимуму используем функционал фреймворка YII2.
Программируем - и кайфуем!
# | Название видеоурока | Видео / Тесты | Решило | Рейтинг | Доступ |
---|---|---|---|---|---|
1 |
![]() |
|
|||
На этом уроке мы рассмотрим тематику разработки и настроим инструменты Отчёт отправил: 13417. Chip Выполнено за 36 мин. [Показать отчёт] Научился: Недавно увидел отчеты по новому курсу от Валерия Жданова, заинтересовался и решил посмотреть уроки. В курсе предлагается использовать php + yii2, а я планирую набраться практики в этом направлении на языке Си. Установил сервер Apache, открыл тестовую страницу localhost в firefox. Что скажешь, Валерий, даешь добро на эксперименты? :) |
|||||
2 |
![]() |
1 тест |
|||
На этом уроке мы создадим проект нового сайта, установим 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 |
![]() |
2 теста |
|||
На этом уроке мы настроим удобные для человека ссылки и поменяем название сайта при помощи настроек 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 |
![]() |
|
|||
На этом уроке мы создадим схему базы данных для нашего проекта
Отчёт отправил: 13417. Chip Выполнено за 24 мин. [Показать отчёт] Научился: Познакомился со структурой базы данных. Определил сущности, таблицы и поля. |
|||||
5 |
![]() |
1 тест |
|||
На этом уроке мы создадим базу данных, подключим ее к нашему проекту и создадим таблицу пользователей при помощи механизма миграций Отчёт отправил: 13417. Chip Выполнено за 5 час. 17 мин. [Показать отчёт] Научился: Мой дистрибутив Fedora по запросу установки MySQL вместо нее установил MariaDB, я так понимаю, это свободная версия MySQL, команды по управлению схожи. Установил PhpMyAdmin, создал через него базу данных bulletinsdb. Установил yii2, с помощью команды yii migrate/create create_user_table создал файл миграции, заполнил его данными для таблицы user. Запустил команду yii migrate и с помощью нее создал таблицу user в базе данных bulletinsdb. |
|||||
6 |
![]() |
1 тест |
|||
На этом уроке мы подкорректируем модель User и реализуем аутентификацию на сайте через базу данных
Отчёт отправил: 13417. Chip Выполнено за 5 час. 27 мин. [Показать отчёт] Научился: Научился добавлять нового пользователя в PhpMyAdmin с md5-хешированным паролем. Подключил к программе библиотеку mysql для создания запросов к базе данных. Подключил библиотеку crypto для md5-хеширования пароля пользователя. Добавил в программу форму ввода для логина и пароля. После ввода пароля он хешируется с помощью md5, выполняется запрос к базе и сравнивается пара логин/пароль. Для наглядности прикрепляю короткое видео. Видеообзор: RqkF3qRxkkc |
|||||
7 |
![]() |
|
|||
На этом уроке создадим таблицу и модель Информация о пользователе
Отчёт отправил: 13417. Chip Выполнено за 44 мин. [Показать отчёт] Научился: Создал миграцию, заполнил ее необходимыми данными, применил миграцию и добавил новую таблицу userinfo в базу. С помощью PhpMyAdmin добавил строку John Carl Brown в новую таблицу. |
|||||
8 |
![]() |
1 тест |
|||
На этом уроке мы рассмотрим теоретические основы работы MVC и создадим новый контроллер в нашем проекте
Отчёт отправил: 13417. Chip Выполнено за 3 час. 4 мин. [Показать отчёт] Научился: Создал файл для контроллера user, добавил в него обработку действия index. Создал требуемое представление для нового контроллера. Для удобства навигации по сайту добавил меню, в котором разместил ссылку на запуск контроллера user и действия index. В коротком видео демонстрация перехода по ссылкам и результат работы контроллера. Видеообзор: XlQntGKemmc |
|||||
9 | MVC - информация о пользователе |
|
|||
На этом уроке мы получим данные о пользователе из базы в представление
Отчёт отправил: 13417. Chip Выполнено за 1 час. 52 мин. [Показать отчёт] Научился: Создал файл модели user, в котором через SQL-запрос возвращается информация о таблице user по указанному id. Аналогично создал модель для таблицы userinfo для получения информации по user_id. Контроллер /user/index обращается к обеим моделям, получает результат их работы и передает данные представлению. Представление отображает логин и фамилию пользователя. |
|||||
10 | Пользователь - кто зарегистрирован сейчас? |
1 тест |
|||
На этом уроке мы получим информацию о текущем зарегистрированном пользователе, а также сделаем рефакторинг кода Отчёт отправил: 13417. Chip Выполнено за 3 час. 11 мин. [Показать отчёт] Научился: Научился обращаться к данным сессии, получать текущего зарегистрированного пользователя. Для тестирования сайта добавил второго пользователя в таблицы user и userinfo. На видео демонстрация работы сайта при входе двух разных пользователей. Видеообзор: DRIeEUJ21Do |
|||||
11 | Новый пользователь - заготовка и меню |
|
|||
На этом уроке мы создадим действие и представление для добавления пользователя, а также добавим пункт меню "Регистрация" Отчёт отправил: 13417. Chip Выполнено за 1 час. 52 мин. [Показать отчёт] Научился: Добавил действие add для контроллера User. Создал представление для действия add. В меню добавил новый пункт "Регистрация". Пока что оставил свой пункт меню "Информация о пользователе" для тестирования сайта. Заготовка для добавления нового пользователя готова, идем дальше :) |
|||||
12 | Новый пользователь - модель для формы |
1 тест |
|||
На этом уроке мы создадим модель параметров формы добавления пользователя
Отчёт отправил: 13417. Chip Выполнено за 1 час. 31 мин. [Показать отчёт] Научился: Создал новую модель UserForm. Добавил функцию проверки полей формы - все поля проверяется на не пустое значение. Поле пароль и подтверждение пароля дополнительно проверяются на эквивалентность. Через вторую функцию можно получить значение атрибутов label для полей формы. Добавил атрибут label "Login" для поля username. |
|||||
13 | Новый пользователь - дизайн формы начало |
|
|||
На этом уроке мы зададим поля формы добавления пользователя
Отчёт отправил: 13417. Chip Выполнено за 1 час. 26 мин. [Показать отчёт] Научился: Добавил форму с тремя полями ввода и соответствующими метками. Первое поле для ввода логина, два других для ввода пароля и подтверждения пароля. |
|||||
14 | Новый пользователь - дизайн формы: поля и колонки |
1 тест |
|||
На этом уроке мы добавим все поля формы, кнопку сохранения, а также разместим поля в две колонки Отчёт отправил: 13417. Chip Выполнено за 4 час. 23 мин. [Показать отчёт] Научился: Добавил в форму три новых поля: фамилия, имя, отчество и кнопку для отправки данных. В модели UserForm добавил названия для всех меток полей. |
|||||
15 | Новый пользователь - сохранение нового пользователя |
1 тест |
|||
На этом уроке мы напишем алгоритм сохранения записи о пользователе и информации о нем
Отчёт отправил: 13417. Chip Выполнено за 3 час. 1 мин. [Показать отчёт] Научился: Научился передавать данные из формы в программу, проверять их на корректность, добавлять запись в таблицу базы данных, перенаправлять пользователя на указанную страницу. |
|||||
16 | Красивая аутентификация на сайте |
|
|||
На этом уроке мы поменяем дизайн формы входа на сайт
Отчёт отправил: 13417. Chip Выполнено за 1 час. 35 мин. [Показать отчёт] Научился: В этом уроке я изменил названия для меток полей формы, перевел их на русский язык. Добавил флажок для запоминания входа пользователя. Если флажок установлен, информация о входе сохраняется в течение суток. Если сброшен - браузер помнит о пользователе только во время сессии. |
|||||
17 | Что доступно Юпитеру? |
1 тест |
|||
На этом занятии мы научимся управлять доступом к пунктам главного меню
Отчёт отправил: 13417. Chip Выполнено за 1 час. 21 мин. [Показать отчёт] Научился: Сделал пункт меню "Регистрация" видимым только для гостевого пользователя. Пункт меню "Информация о пользователе" появляется только для авторизированных пользователей. |
|||||
18 | Объявления - создание базы и модели |
1 тест |
|||
На этом уроке мы создадим таблицу bulletins при помощи миграций и сгенерируем для данной таблицы класс ActiveRecord
Отчёт отправил: 13417. Chip Выполнено за 34 мин. [Показать отчёт] Научился: Создал файл для миграции таблицы bulletins, указал в этом файле требуемые поля. Применил миграцию, в базе данных появилась новая таблица bulletins. С помощью генератора gii создал класс BulletinsRecord. |
|||||
19 | Объявления - контроллер, представление и много записей |
1 тест |
|||
На этом уроке мы создадим контроллер и представление для работы с объявлениями, а также сделаем связь записей о пользователях и объявлениях типа "один-ко-многим" Отчёт отправил: 13417. Chip Выполнено за 1 час. 21 мин. [Показать отчёт] Научился: Создал новый контроллер BulletinsController, добавил для него представление при переходе по адресу /bulletins/index. Ссылка доступна только авторизированного пользователя. |
|||||
20 | Объявление - функциональный дизайн страницы |
|
|||
На этом уроке мы сделаем дизайн страницы наших объявлений, который поможет нам работать с объявлениями в дальнейшем
Отчёт отправил: 13417. Chip Выполнено за 1 час. 45 мин. [Показать отчёт] Научился: Добавил кнопку "Добавить объявление". Ниже разместил таблицу с вкладками "Опубликованные", "Черновики" и "Удаленные". |
|||||
21 | Объявление - ограничение доступа |
|
|||
На этом уроке мы ограничим доступ неавторизированного пользователя к странице управления объявлениями, а также решим некоторые технические вопросы
Отчёт отправил: 13417. Chip Выполнено за 2 час. 3 мин. [Показать отчёт] Научился: Настроил доступ к /bulletins/index только для выполнившего вход пользователя. При попытке гостя пройти по этой ссылке, он перенаправляется на страницу входа. Добавил запись в таблицу во вкладке черновики. Оформил ссылки в виде кнопок. Для иконки "галочка" использовал источник Google Icons. |
|||||
22 | Объявление - поля для пользовательских форм |
|
|||
На этом уроке мы создадим класс BulletinsForm и определим, какие поля будут использоваться при создании объявления Отчёт отправил: 13417. Chip Выполнено за 38 мин. [Показать отчёт] Научился: Создал модель BulletinsForm с полями title, info, contacts, city, price. Добавил проверку на заполненность полей. Указал названия для меток в attribute_labels. |
|||||
23 | Объявление - форма добавления объявлений |
1 тест |
|||
На этом уроке мы создадим представление для добавления объявлений и действие контроллера, запускающего это представление Отчёт отправил: 13417. Chip Выполнено за 3 час. 5 мин. [Показать отчёт] Научился: Добавил в контроллер BulletinController действие addbulletin. Создал для этого действия представление: разместил в нем форму с двумя колонками. Для заголовков полей ввода использовал метки из модели BulletinForm. |
|||||
24 | Объявление - сохранение в черновик |
|
|||
На этом уроке мы реализуем механизм сохранения нового объявления в черновик
Отчёт отправил: 13417. Chip Выполнено за 1 час. 32 мин. [Показать отчёт] Научился: В этом уроке я повторил как получать данные формы через post запрос и как добавлять новую запись в таблице базы данных. Заполнил поля формы для добавления новой бюллетени, данные выбрал как у Валерия, "Продается дом в г. Гусляр и т.д." |
|||||
25 | Объявление - список |
|
|||
На этом уроке мы реализуем вывод сохраненных в базе объявлений в список
Отчёт отправил: 13417. Chip Выполнено за 7 час. 46 мин. [Показать отчёт] Научился: Добавил в базу новое объявление по продаже детской коляски в г. Гусляр. Написал функции для загрузки из базы данных объявлений со статусами wait, public, delete. Во вкладке черновики вывел все объявления со статусом wait. |
|||||
26 | Объявление - всё на публику |
1 тест |
|||
На этом уроке мы сделаем наши объявления опубликованными
Отчёт отправил: 13417. Chip Выполнено за 2 час. 32 мин. [Показать отчёт] Научился: Добавил ссылки для кнопок "Опубликовать", создал новое действие public для контроллера BulletinsController. Повторил как получать текущее время. После нажатия на кнопку "Опубликовать" текущее время сохраняется в поле date_pub выбранного объявления и его статус меняется на 'public'. |
|||||
27 | Объявление - публикация на главной странице |
1 тест |
|||
На этом уроке мы разместим наши опубликованные объявления на главной странице сайта
Отчёт отправил: 13417. Chip Выполнено за 1 час. 54 мин. [Показать отчёт] Научился: Вывел на главную страницу список всех публичных объявлений от всех пользователей. Узнал как можно использовать placeholder для картинок. |
|||||
28 | Объявление - скрыть нельзя удалить |
|
|||
На этом уроке мы реализуем возможность помещать объявления в группу удаленных, восстанавливать их оттуда, а также отключать их просмотр Отчёт отправил: 13417. Chip Выполнено за 42 мин. [Показать отчёт] Научился: Заменил пустые адреса # ссылок на /bulletins/wait?id= и /bulletins/delete?id=. Теперь для объявлений появилась возможность цикла перехода между состояниями wait, public, delete. |
|||||
29 | Объявление - статусный рефакторинг |
1 тест |
|||
НА этом уроке мы сделаем рефакторинг методов работы со статусом объявлений
Отчёт отправил: 13417. Chip Выполнено за 28 мин. [Показать отчёт] Научился: Создал новую функцию для установки статуса объявления. Перенес в нее весь код по изменению состояния объявления. В трех прежних функциях вызываю новую функцию. |
|||||
30 | Объявление - рефакторинг редактирования |
|
|||
На этом уроке мы реализуем редактирование путем небольшого видоизменения функции добавления записи
Отчёт отправил: 13417. Chip Выполнено за 2 час. 10 мин. [Показать отчёт] Научился: Добавил адреса href-ссылок для кнопок "Редактировать". Реализовал редактирование объявлений с последующим сохранением в базе данных. Изменил цену детской коляски с 5000.23 на 4000.23 |
|||||
31 | Объявление: запрос - в функцию & кнопка для изображений |
|
|||
На этом уроке мы сделаем рефакторинг метода index и добавим кнопки для перехода в режим работы с изображениями
Отчёт отправил: 13417. Chip Выполнено за 1 час. 13 мин. [Показать отчёт] Научился: Добавил кнопки "Фото" для объявлений. Нашел по 5 изображений для каждого объявления по продаже дома, автомобиля и детской коляски. |
|||||
32 | Изображения - микс из миграций |
|
|||
На этом уроке мы через механизм миграций создадим таблицу photo и добавим поле для аватары в таблицу bulletins
Отчёт отправил: 13417. Chip Выполнено за 39 мин. [Показать отчёт] Научился: С помощью механизма миграций создал новую таблицу photo и добавил в таблицу bulletins дополнительный столбец avatar. |
|||||
33 | Изображения - снова MVC |
|
|||
На этом уроке мы создадим модель, контролер и представление для работы с фото
Отчёт отправил: 13417. Chip Выполнено за 1 час. 17 мин. [Показать отчёт] Научился: С помощью gii создал модель PhotoRecord, добавил PhotoController с действием actionIndex и его представление, которое выводит <h3>Изображения</h3>. |
|||||
34 | Изображения - работа с моделью |
|
|||
На этом уроке мы передадим модель нашего объявления в представление
Отчёт отправил: 13417. Chip Выполнено за 1 час. 33 мин. [Показать отчёт] Научился: Выполнил поиск фотографий по переданному номеру объявления, передал найденные фотографии в представление. Добавил в представление кнопку "Добавить фото". |
|||||
35 | Работаем над ошибками - YII2 в помощь |
|
|||
На этом уроке мы разберемся, как работать над ошибками и читать сигналы дебаггера YII2
Отчёт отправил: 13417. Chip Выполнено за 48 мин. [Показать отчёт] Научился: Проверил работу дебаггера Yii, придумал ошибку. На верхнем скриншоте слева на строке 33 в функции getBulletins допустил опечатку, вместо $currSession написал $currSesion. В результате справа в окне браузера сообщается о неопределенной переменной currSesion и указывается место в коде, где выполняется обращение к этой переменной. Посмотрев немного выше, на строке 31 можно увидеть определение переменной currSession и становится понятно, что была допущена опечатка. Результат исправления ошибки показан на нижнем скриншоте. |
|||||
36 | Изображения - где живут картинки |
1 тест |
|||
На этом уроке мы создадим папку для изображений, разместим там изображение по умолчанию, а также создадим универсальные параметры пути и изображения по умолчанию
Отчёт отправил: 13417. Chip Выполнено за 1 час. 53 мин. [Показать отчёт] Научился: Нашел в интернете изображение "по умолчанию", выбрал как у Валерия. Создал папку, разместил в ней это изображение. В представлении изменил адрес, вместо placeholder указал путь и файл через переменные. |
|||||
37 | Изображения - модель формы |
|
|||
На этом уроке мы создадим модель PhotoForm для работы с изображениями Отчёт отправил: 13417. Chip Выполнено за 1 час. 24 мин. [Показать отчёт] Научился: Создал класс модели PhotoForm, добавил в него поля file, link, info и методы rules и attributeLabels. |
|||||
38 | Изображение - загрузочное представление |
|
|||
На этом занятии мы создадим форму представления, через которое будет загружаться изображение Отчёт отправил: 13417. Chip Выполнено за 1 час. 48 мин. [Показать отчёт] Научился: Создал новое действие actionAdd для PhotoController, добавил для него представление, в котором выводится форма. В форме разместил кнопку для загрузки файла, текстовое поле для ввода информации и кнопку отправки данных. |
|||||
39 | Изображение - загрузка файла на сайт |
1 тест |
|||
На этом уроке мы реализуем алгоритм загрузки изображений на сайт
Отчёт отправил: 13417. Chip Выполнено за 3 час. 18 мин. [Показать отчёт] Научился: Научился загружать файлы с помощью метода post. Добавил к имени файла время его загрузки с помощью функции time. Загрузил все 5 изображений автомобиля Lada Priora в папку images. |
|||||
40 | ПРОМЕЖУТОЧНЫЙ ВИДЕО ОБЗОР |
без видео |
|||
Мы уже многое сделали на нашем видеокурсе, и автору очень важно узнать Ваше мнение о данном курсе и получить обратную связь в форме видео-презентации и ответов на вопросы. Сделай видео-презентацию своего сайта. Отчёт отправил: 13417. Chip Выполнено за 1 час. 13 мин. [Показать отчёт] Научился: На этом курсе я начал знакомство с фреймворком yii для создания сайта доски объявлений. Попрактиковался в языке php, увидел как в этом языке программирования создавать классы, методы. Фреймворк yii хорошо помогает в разработке сайта, модель MVC встроена в сам фреймворк. Узнал про механизм миграций, с помощью него создал таблицы в базе данных. Попутно самостоятельно разрабатывал сайт на языке Си. На верхнем скриншоте сайт php+yii, на нижнем скриншоте сайт на языке Си. На видео я показываю сайт на языке Си. Курс понравился подходом, который начал Евгений Витольдович - "делай как я". По этому курсу можно с полного нуля без знаний php и yii начать разрабатывать свой сайт. Причем с каждым последующим уроком больше входишь во вкус, как говорил Дмитрий Синицын, "сериал затягивает". В дальнейшем для реализации сайта доски объявлений можно добавить поиск по объявлениям, разные тематики, возможность оставлять комментарии. Видеообзор: B_XBVUHR5Ks |
|||||
41 | Изображение - сохранение пути в базу |
|
|||
На этом уроке мы реализуем сохранение пути к файлу изображений в базу данных
Отчёт отправил: 13417. Chip Выполнено за 2 час. 13 мин. [Показать отчёт] Научился: Реализовал сохранение пути загруженного изображения в таблице photo. Проверил работу сайта для двух изображений объявления по продаже автомобиля. |
|||||
42 | Изображение - управление картинками |
|
|||
На этом уроке мы займемся дизайном - создадим выпадающее меню управления изображением
Отчёт отправил: 13417. Chip Выполнено за 1 час. 12 мин. [Показать отчёт] Научился: Научился создавать выпадающий список меню, добавил в него пункты "Информация", "Сделать главной", "Удалить фото". |
|||||
43 | Изображение - JS - немного теории и пижонства |
1 тест |
|||
На этом уроке мы рассмотрим работу JS на yii2
Отчёт отправил: 13417. Chip Выполнено за 1 час. 51 мин. [Показать отчёт] Научился: Создал тестовое представления для знакомства с JavaScript. Разместил в представлении скрытое поле ввода и кнопку. С помощью JavaScript и jQuery научился показывать и скрывать поле ввода при нажатии на кнопку. Попутно научился изменять текст на кнопке. |
|||||
44 | Изображение - JS - глобализация |
|
|||
На этом уроке мы перенесем все скрипты JS в отдельный файл, а также реализуем открытие и скрытие элементов ввода информации Отчёт отправил: 13417. Chip Выполнено за 4 час. 19 мин. [Показать отчёт] Научился: Перенес JavaScript-код из представления в отдельный .js файл. Добавил в представление /photo/index скрытое поле для ввода информации. После нажатия кнопки "Управление" и при выборе пункта меню "Информация" становится видимым скрытое поле под выбранным изображением. Рядом с полем появляется новая кнопка "галочка" для скрытия поля. |
|||||
45 | Изображение - JS - сохранение информации в базу |
1 тест |
|||
На этом уроке мы научим нашу систему сохранять информацию об изображениях в базу с использованием технологии ajax Отчёт отправил: 13417. Chip Выполнено за 2 час. 43 мин. [Показать отчёт] Научился: Научился использовать ajax для передачи данных из программы на JavaScript на сервер. Заполнил поле информация под каждой фотографией объявления, передал информацию на сервер и сохранил в таблице photo поле info для каждой фотографии. |
|||||
46 | Изображение - JS - извлечение методом ajax |
|
|||
На этом уроке мы научим ajax получать информацию об изображениях из базы
Отчёт отправил: 13417. Chip Выполнено за 1 час. 8 мин. [Показать отчёт] Научился: С помощью ajax реализовал обращение к серверу и загрузку поля info для выбранного изображения из таблицы photo базы данных. |
|||||
47 | Изображение - аватарка - вывод на главной странице |
|
|||
На этом уроке мы реализуем вывод главных изображений каждого объявления (далее - аватарки) на главной странице Отчёт отправил: 13417. Chip Выполнено за 1 час. 17 мин. [Показать отчёт] Научился: Установил значение номера изображения в поле avatar для объявления по продаже автомобиля. Реализовал вывод изображения ("аватарки") на главной странице сайта. При указанном значении в поле avatar информация о пути к изображению берется из поля link таблицы photo. Если в поле avatar пусто, то на главную страницу выводится изображение по умолчанию. |
|||||
48 | Изображение - аватарка - работа над ошибками связей |
|
|||
На данном уроке мы исправим ошибки вывода фотографий, очистим базу и заново загрузим в нашу базу фотографии в одно из объявлений Отчёт отправил: 13417. Chip Выполнено за 28 мин. [Показать отчёт] Научился: Исправил ошибку в действии actionIndex по выбору id. Удалил все записи из таблицы photo, загрузил через интерфейс сайта новые фотографии для объявления по продаже автомобиля. Добавил описание к каждой фотографии. |
|||||
49 | Изображение - аватарка - как стать главной |
|
|||
На этом уроке мы создадим код, делающий любое фото главным
Отчёт отправил: 13417. Chip Выполнено за 1 час. 28 мин. [Показать отчёт] Научился: Добавил обработчик нажатия по ссылке "Сделать главной", реализовал передачу данных с помощью ajax на сервер, где через действие setavatar установил аватарку для объявления. |
|||||
50 | Изображение - удаление - ни шагу без подтверждения! |
|
|||
На этом уроке мы реализуем всплывающее окно подтверждения действия и протестируем результаты выбора различных вариантов Отчёт отправил: 13417. Chip Выполнено за 30 мин. [Показать отчёт] Научился: Добавил обработчик при нажатии кнопки удаления фотографии. В обработчике вызывается функция подтверждения, которая запрашивает у пользователя подтверждение для удаления фотографии. |
|||||
51 | Изображение - удаление - удаление файла и записи |
|
|||
На этом уроке мы реализуем удаление файлов изображений и записей о них из базы данных
Отчёт отправил: 13417. Chip Выполнено за 1 час. 30 мин. [Показать отчёт] Научился: Через ajax передал номер изображения на сервер в действие setdelete. Реализовал удаление файла из папки изображений и записи из таблицы photo. |
|||||
52 | Главная страница - подробности - ссылки и заготовка представлени |
|
|||
На этом уроке мы создадим ссылки для объявлений на главной странице и заготовку представления для подробного вывода информации объявления Отчёт отправил: 13417. Chip Выполнено за 56 мин. [Показать отчёт] Научился: Создал новое действие view-bulletin и соответствующее представление. Добавил ссылки на вызов действия. Вывел в представлении заголовок и информацию об объявлении. |
|||||
53 | Главная страница - подробности - больше подробностей |
|
|||
На этом уроке мы выведем максимум информации на страницу подробностей объявления
Отчёт отправил: 13417. Chip Выполнено за 1 час. 24 мин. [Показать отчёт] Научился: Добавил вывод полей (главная фотография "аватарка", цена, город, контактная информация и дата публикации) в представлении view-bulletin. |
|||||
54 | Главная страница - подробности - расширяя информацию |
1 тест |
|||
На этом уроке мы внесем в наш код изменения, которые позволят сохранять объявления с большим количеством информации Отчёт отправил: 13417. Chip Выполнено за 1 час. 1 мин. [Показать отчёт] Научился: С помощью механизма миграции изменил тип столбца info в таблице bulletins с varchar(255) на longtext. Добавил новое объявление по продаже дома, в котором разместил более объемную и подробную информацию в поле info. Текст взял по на основе реального объявлении на авито. Применил функцию nl2br к столбцу info при сохранении объявления. |
|||||
55 | Главная страница - оформление - дизайн объявления |
|
|||
На этом уроке мы зададим стиль дизайна объявления
Отчёт отправил: 13417. Chip Выполнено за 1 час. 14 мин. [Показать отчёт] Научился: Попрактиковался в CSS для оформления страницы, перенёс поле "информация" в правую часть страницы, оформил вывод полей "цена", "город", "контакты" в виде таблицы. |
|||||
56 | Главная страница - оформление - дизайн элементов базовой страницы |
1 тест |
|||
На этом уроке мы выведем информацию о себе в элементе footer и сделаем главное меню стильным и красивым
Отчёт отправил: 13417. Chip Выполнено за 1 час. 13 мин. [Показать отчёт] Научился: С помощью CSS изменил цвет главного меню сайта на синий. При выборе элемента меню, цвет его фона меняется на зеленый. Изменил информацию в footer страницы. |
|||||
57 | Главная страница - оформление - ловим цвет пикселя |
|
|||
На этом уроке мы рассмотрим использование инструментов определения цвета пикселя (Пипетка) Отчёт отправил: 13417. Chip Выполнено за 19 мин. [Показать отчёт] Научился: Изменил цвет фона меню на #ee8208. Познакомился с инструментом Пипетка в браузере Firefox. Узнал про сайты для определения цвета пикселя. Для выбора цвета использовал сайт sanstv.ru |
|||||
58 | Главная страница - оформление - смотрим все изображения |
|
|||
На этом уроке мы реализуем просмотр всех изображений объявления "не хуже, чем на Avito"
Отчёт отправил: 13417. Chip Выполнено за 1 час. 35 мин. [Показать отчёт] Научился: Вывел все изображения выбранного объявления на страницу. Реализовал выбор изображения "в стиле авито" при срабатывании события hover над миниатюрой изображения. |
|||||
59 | Главная страница - оформление - стильный логотип |
|
|||
На этом уроке мы реализуем вывод логотипа в иконку проекта и в пункт меню перехода на главную страницу
Отчёт отправил: 13417. Chip Выполнено за 1 час. 45 мин. [Показать отчёт] Научился: Загрузил два изображения в формате .ico и .png. Файл .ico переименовал в favicon.ico и разместил в корне сайта. Файл .png переименовал в logo.png и добавил на главное меню рядом с пунктом меню "Доска объявлений". |
|||||
60 | Главная страница - оформление - оповещения через баннер |
|
|||
На этом уроке мы создадим баннер для оповещений, новостей | |||||
61 | Разделы (темы) - немного теории |
|
|||
На этом уроке мы рассмотрим вопрос тематик объявлений на нашем сайте, а также составим план (структуру) таблицы тем Themes и связующей таблицы ThemesBulletins | |||||
62 | Разделы (темы) - миграции с внешними ключами |
|
|||
На этом уроке мы создадим миграции таблиц themes и themesbulletins, сами эти таблицы и их модели ActiveRecord с внешними связями | |||||
63 | Обратная связь - мозговой штурм - внештатные ситуации |
|
|||
В данном уроке попрошу Вас выполнить небольшую самостоятельную работу и дать обратную связь. |
|||||
64 | Разделы (темы) - вывод тем в объявлении |
|
|||
На этом уроке мы реализуем вывод тем на странице объявления | |||||
65 | Разделы (темы) - меню тематик |
|
|||
На этом уроке мы реализуем вывод ссылок на темы на главной странице и подсчет объявлений в каждой теме | |||||
66 | Разделы (темы) - тематические выборки |
|
|||
На этом уроке мы реализуем выбор объявлений по темам и вывод их на основную страницу | |||||
67 | Разделы (темы) - полезные переходы |
|
|||
На этом уроке мы реализуем возвращение со страницы объявлений на предыдущую страницу, а также переходы по темам объявления по типу хештегов | |||||
68 | Разделы (темы) - администрирование - теория и заготовки |
|
|||
На этом уроке мы создадим контроллер для администрирования разделов (тем) и представление index | |||||
69 | Разделы (темы) - администрирование - все темы в таблицу |
|
|||
На этом уроке мы выведем существующие темы в таблицу и зададим им элементы управления | |||||
70 | Разделы (темы) - администрирование - подтверждение удаления |
|
|||
На этом уроке мы реализуем алгоритм подтверждения удаления и создадим соответствующее представление | |||||
71 | Разделы (темы) - администрирование - удаление разделов и чистка связей |
|
|||
На этом уроке мы окончательно удалим раздел, а перед этим удалим все его связи с объявлениями | |||||
72 | Разделы (темы) - администрирование - Обычный ThemesForm |
|
|||
На этом уроке мы создадим модель ThemesForm, заготовку действия Add в контроллере Themes и представление под него | |||||
73 | Разделы (темы) - исправление подсчета и отображение текущей темы |
|
|||
Hа этом уроке мы исправим ошибку подсчета, обнаруженную в процессе прохождения курса, а также отобразим текущую тему, по которой выборка объявлений, в баннере |
|||||
74 | Разделы (темы) - администрирование - "темное" представление |
|
|||
На этом уроке мы создадим поля для редактирования или добавления темы в представлении themes\add | |||||
75 | Разделы (темы) - администрирование - волшебный выпадающий список |
1 тест |
|||
На этом уроке мы создадим выпадающий список выбора родительской темы | |||||
76 | Разделы (темы) - администрирование - сохранение темы |
|
|||
На этом уроке мы реализуем сохранение добавляемых и редактируемых тем | |||||
77 | Разделы (темы) - администрирование - рефакторинг и валидация |
|
|||
На этом уроке мы сделаем рефакторинг нашего представления add и валидацию данных формы ThemesForm | |||||
78 | Связи объявлений и тем - заготовка |
|
|||
На этом уроке мы создадим действие в контроллере BulletinsController и представление, которые помогут нам работать со связями объявлений и тем |
|||||
79 | Связи объявлений и тем - добавление новой темы |
|
|||
На этом уроке мы научим нашу систему добавлять новую тему в объявление (делать связь темы и объявления) | |||||
80 | Связи объявлений и тем - темы, которых не было |
1 тест |
|||
На этом уроке мы научим нашу систему выводить в список добавляемых в объявление тем только те, которые не прикреплены к нашему объявлению | |||||
81 | Связи объявлений и тем - темы, которых не будет |
|
|||
На этом уроке мы научим нашу систему удалять из объявлений темы, к которым наше объявление привязывать не надо | |||||
82 | Глобальный поиск - поле поиска в меню |
|
|||
На этом уроке мы добавим поле поиска в навигационное меню сайта, а также решим вопрос с активными пунктами меню. | |||||
83 | Глобальный поиск - ищем глобально |
|
|||
На этом уроке мы создадим алгоритм поиска по вводимому в поле search контенту | |||||
84 | Расширенный поиск - группировка пунктов главного меню |
|
|||
На этом уроке мы сгруппируем пункты главного меню в подразделы, и сделаем в нем ссылку на страницу расширенного поиска |
|||||
85 | Расширенный поиск - заготовки и план |
|
|||
На этом уроке мы набросаем план будущей страницы расширенного поиска, а также создадим действие контроллера и заготовку представления расширенного поиска |
|||||
86 | Расширенный поиск - стили и форма |
|
|||
На этом уроке мы внесем исправления в стили субменю и сделаем модель формы расширенного поиска | |||||
87 | Расширенный поиск - дизайн текстовых полей и кнопки |
|
|||
На этом уроке мы прокачаем навыки дизайна текстовых полей, создания активной формы в представлении, а также создания кнопки через хелперы yii2 |
|||||
88 | Расширенный поиск - цена - выбор варианта |
|
|||
На этом уроке мы создадим систему управления выбором варианта поиска по цене | |||||
89 | Расширенный поиск - цена - невидимые поля |
|
|||
На этом уроке мы создадим невидимые блоки с полями поиска цены, которые становятся видимыми при нажатии определенного пункта навигатора | |||||
90 | Расширенный поиск - дата публикации - виджет извне |
|
|||
На этом уроке мы установим в наш проект компонент jui от стороннего разработчика и создадим календарики для выбора дат |
|||||
91 | Расширенный поиск - результаты выборки - частичное представление |
|
|||
На этом уроке мы рассмотрим возможность использования частичного представления в yii2-проекте и выведем в частичное представление карточку объявления | |||||
92 | Расширенный поиск - генератор поиска - возвращение к SQL-запросу |
|
|||
На этом уроке мы создадим генератор отчета, используя работу ActiveRecord фреймворка yii2 c sql-запросами, и включим в него поиск по текстовым полям формы расширенного поиска |
|||||
93 | Расширенный поиск - генератор поиска - ограничивающие даты |
|
|||
На этом уроке мы добавим в генератор отчета расширенного поиска выборку по датам публикации |
|||||
94 | Расширенный поиск - генератор поиска - три вида цены и один POST |
|
|||
На этом уроке мы реализуем различные варианты выборки объявлений по цене и добавим их в наш генератор расширенного поиска |
|||||
95 | Обратная связь - свой сайт объявлений |
без видео |
|||
И снова обратная связь.Подумаем самостоятельно и ответим на вопросы: |
|||||
96 | Расширенный поиск - генератор поиска - показать, что нужно |
|
|||
На этом уроке мы реализуем отображение той вкладки поиска по ценам, по которой производился поиск |
|||||
97 | Работа с документацией Yii2 |
|
|||
На этом уроке переходим на один из официальных сайтов по Yii2 и, пользуясь помощью документации, реализовываем одну из своих идей |
|||||
98 | Пользователи и роли - планирование ролевой модели |
|
|||
На этом уроке мы составим ролевую модель пользователей нашего сайта | |||||
99 | Пользователи и роли - фильтры контроля доступа ACF - теория и эксперименты |
|
|||
На этом уроке мы рассмотрим принципы работы фильтров контроля доступа ACF | |||||
100 | Пользователи и роли - фильтры контроля доступа ACF - фильтруем всё |
|
|||
На этом уроке мы сами создадим метод behaviors() в BulletinsController и зададим нужные фильтры для действий контроллера | |||||
101 | Пользователи и роли - роли через RBAC - теория, установка и миграции |
|
|||
На этом уроке мы установим расширение RBAC, настроим подключение к RBAC и создадим базы для авторизации при помощи механизма миграции |
|||||
102 | Пользователи и роли - роли через RBAC - тесты и практика |
|
|||
На этом уроке мы создадим тестовые роли и разрешения, а также проверим работу контроллера согласно разрешений |
|||||
103 | Пользователи и роли - роли через RBAC - вносим действия в план |
|
|||
На этом уроке мы добавим действия к ролям в нашей актуальной ролевой модели | |||||
104 | Пользователи и роли - роли через RBAC - реализация плана |
|
|||
На этом уроке мы создадим актуальные роли и действия для пользователей нашего сайта | |||||
105 | Пользователи и роли - ACF+RBAC - ограничим доступ к темам |
|
|||
На этом уроке мы реализуем ролевую модель для контроллера тем | |||||
106 | Пользователи и роли - управление ролями и привилегиями - контроллер и таблица ролей |
|
|||
на этом уроке мы создадим контроллер и представление для управления ролями | |||||
107 | Пользователи и роли - управление ролями и привилегиями - форма добавления роли |
|
|||
На этом уроке мы создадим действие добавления роли и форму добавления роли |
|||||
108 | Пользователи и роли - управление ролями и привилегиями - сохранение и удаление роли |
|
|||
На этом уроке мы реализуем сохранение роли, а также напишем алгоритм удаления роли | |||||
Итого: 108 видеоуроков |
23 час. 33 мин. 25 тестов |
3 чел. | |||
Финалисты: Жан, Николай Денисов, Tom . |