Тестовое задание PHP разработчика Вёрстка: https://disk.yandex.ru/d/qtI4_81_j6x5Ow
- Функциональные требования
- Меню
Должно содержать следующие элементы:
- Материалы - при клике должна открываться страница списка материалов;
- Теги - при клике должна открываться страница списка тегов;
- Категории - при клике должна открываться страница списка категорий;
- Страница списка материалов
На данной странице должны располагаться:
4. кнопка “Добавить” - при клике должна открываться страница создания и редактирования материала;
5. блок поиска:
- поисковая строка;
- кнопка “Искать”:
- при клике должен происходить поиск по материалам;
- если поисковая строка не пустая, то должны искаться вхождения поисковой строки в название материала, авторах, тегах и категориях;
- таблица результатов поиска, со столбцами:
- Название - название материала в виде ссылки на просмотр материала;
- Авторы - авторы материала;
- Тип - тип материала;
- Категория - категория материала;
- Действия:
- Редактирование - при клике должна открываться страница создания и редактирования материала;
- Удаление - при клике должно запрашиваться подтверждение удаления, при одобрении должно происходить удаление материала;
- Страница создания и редактирования материала На данной странице должны располагаться: 7. Тип - обязательное, возможен выбор одного значения из перечисления: Типы материала (см. пункт 3 ТЗ); 8. Категория - обязательное, выпадающий список категорий; 9. Название - строка, обязательное; 10. Авторы - необязательное, текстовое; 11. Описание - необязательное, многострочное; 12. кнопка “Добавить” - при клике должна происходить валидация формы и если нет ошибок то материал должен сохраниться;
- Страница просмотра материала
На данной странице должны располагаться:
13. Заголовок по шаблону: %название%
14. Автор;
15. Тип;
16. Категория;
17. описание;
18. блок “Теги”:
- панель добавления тега, состоит из:
- поле “название тега” - обязательное, выпадающий список из тегов;
- кнопка “добавить” - при клике должна происходить валидация, если успешно до должен добавиться тег к материалу;
- список добавленных тегов, где каждый элемент состоит из:
- название в виде ссылки - при клике должна открываться страница просмотра материалов с поиском по выбранному тегу;
- кнопка удаления тега - при клике должно запрашиваться подтверждение удаления, в случае подтверждения тег должен удалиться;
- блок Ссылки:
- кнопка “Добавить” - при клике должен появиться диалог добавления ссылки;
- диалог добавления и редактирования ссылки, состоит из:
- Подпись ссылки - не обязательное;
- Ссылка - обязательное, в формате url;
- кнопка “Добавить” - при клике должна происходить валидация данных и в случае успеха должна добавится ссылка к материалу;
- кнопка “Закрыть” - при клике должно закрываться диалоговое окно;
- список ссылок, где каждый элемент состоит из:
- подпись в виде ссылки (если подпись не задана, то должна выводиться ссылка);
- кнопка редактирования - при клике должен открываться диалог добавления и редактирования ссылки;
- кнопка удаления ссылки - при клике должно запрашиваться подтверждение удаления, в случае подтверждения ссылка должна удаляться;
- панель добавления тега, состоит из:
- Страница списка тегов
На данной странице должны располагаться:
20. кнопка “Добавить” - при клике должна открываться страница создания и редактирования тега;
21. список тегов, где каждый элемент состоит из:
- название - название тега;
- кнопка “Редактировать” - при клике должна открываться страница создания и редактирования тега;
- кнопка “Удалить” - при клике должно запрашиваться подтверждение удаления, в случае подтверждения тег должен удалиться;
- Страница создания и редактирования тега На данной странице должны располагаться: 22. поле “Название” - обязательное; 23. кнопка “Добавить” - при клике должна происходить валидация данных, если успешна, то тег должен сохраниться и открыться страница списка тегов;
- Страница списка категорий
На данной странице должны располагаться:
24. кнопка “Добавить” - при клике должна открываться страница создания и редактирования категории;
25. список категорий, где каждый элемент состоит из:
- название - название категории;
- кнопка “Редактировать” - при клике должна открываться страница создания и редактирования категории;
- кнопка “Удалить” - при клике должно запрашиваться подтверждение удаления, в случае подтверждения категория должна удалиться;
- Страница создания и редактирования категория На данной странице должны располагаться: 26. поле “Название” - обязательное; 27. кнопка “Добавить” - при клике должна происходить валидация данных, если успешна, то категория должна сохраниться и открыться страница списка категорий;
- Не функциональные требования
- выполнять задание можно на Yii2, Laravel или чистом PHP;
- версию PHP использовать не менее версии 7.4;
- в качестве базы данных можно использовать MySql или PostgreSql;
- в работе нужно использоваться систему версионирования кода Git (gitlab.com ,github.com, bitbucket.org);
- Приветствуется наличие развернутой версии на хостинге и/или описание по развертыванию проекта.
- Так же приветствуется заполнение проекта тестовыми данными для демонстрации отображения;
- Перечисления
- Типы материала
- Книга
- Статья
- Видео
- Сайт/Блог
- Подборка
- Ключевые идеи книги
- Типы материала
Поменять в docker-compose.yml
пароль и название базы данных по усмотрению;
Скопировать .env-example
в .env
, заменить DB_HOST
на название сервиса базы данных в docker-compose.yml
, по умолчанию db
, заменить DB_PASSWORD
на пароль базы данных в docker-compose.yml
, если поменяли имя базы на прошлом шаге замените и здесь;
Смонтировать composer в репозиторий docker run --rm -v $(pwd):/app composer install
;
Сменить владельца репозитория на www-data
- sudo chown -R www-data:root ~/laravel-app
;
Запустить docker-compose up -d
;
Сгенерировать ключ docker-compose exec app php artisan key:generate && docker-compose exec app php artisan config:cache
;
Запустить миграцию docker-compose exec app php artisan migrate
;