# Лабораторная работа №5. Добавление категорий и фильтров --- Добавьте новые блюда и категории. Создайте фильтры для каждой категории. ## Порядок выполнения Примерные макеты разделов: * Раздел "Выберите суп" * Раздел "Выберите главное блюдо" * Раздел "Выберите салат или стартер" * Раздел "Выберите напиток" * Раздел "Выберите десерт" * Раздел "Сделать заказ" [Полный макет](https://lms.mospolytech.ru/pluginfile.php/1314142/mod_assign/intro/mockupfull.png "Полный макет") страницы: 1. Для каждой категории блюд добавьте блок с фильтрами (фильтры - это кнопки). Фильтры для категорий: |Категория|Фильтры| |---|---| |Суп|рыбный
мясной
вегетарианский| |Главное блюдо|рыбное
мясное
вегетарианское| |Напиток|холодный
горячий| У каждой кнопки должен быть data-атрибут - data-kind. Значение data-kind - это название фильтра на английском. Например, для рыбных супов data-kind может быть со значением "fish". 2. Для каждого объекта с блюдом добавьте новое свойство kind. Оно будет хранить значение для фильтрации. Значение kind должно соответствовать значению data-kind одного из фильтров. Например, если data-kind для вегетарианских супов - "veg", свойство kind супа "Гаспачо" тоже будет "veg". 3. Добавьте новые категории блюд на страницу. Добавьте еще 2 категории блюд: - Салаты и стартеры - Десерты Структура блоков с новыми категориями должна быть такой же как у остальных категорий. Сейчас новые блоки не содержат блюд, вы будете заполнять их в следующем шаге. В данные категории также необходимо добавить блок с фильтрами. Фильтры: |Категория|Фильтры| |---|---| |Салат или стартер|рыбный
мясной
вегетарианский| |Десерты|маленькая порция
средняя порция
большая порция| 4. Добавьте новые блюда. Теперь необходимо добавить новые блюда во все существующие категории. В каждой категории должно быть по 6 блюд. Добавьте в массив все недостающие блюда. Не забудьте указать все свойства, включая kind. В каждом разделе должны быть представлены блюда всех возможных категорий для данного раздела. Ниже представлена таблица с указанием количества блюд каждой категории для соответствующих им разделов меню: | Блюдо | Категория | Количество | | ----------------- | ---------------- | ---------- | | Суп | рыбный | 2 | | Суп | мясной | 2 | | Суп | вегетарианский | 2 | | Главное блюдо | рыбное | 2 | | Главное блюдо | мясное | 2 | | Главное блюдо | вегетарианское | 2 | | Салат или стартер | рыбный | 1 | | Салат или стартер | мясной | 1 | | Салат или стартер | вегетарианский | 4 | | Напиток | холодный | 3 | | Напиток | горячий | 3 | | Десерт | маленькая порция | 3 | | Десерт | средняя порция | 2 | | Десерт | большая порция | 1 | То есть, если сейчас в разделе с главными блюдами у вас добавлено 2 рыбных и 1 мясное блюдо, вам нужно добавить еще 1 мясное и 2 вегетарианских. Изображения с блюдами можно скачать по [ссылке](https://lms.mospolytech.ru/pluginfile.php/1314142/mod_assign/intro/menu.zip?time=1729893070876 "ссылке"). 5. Реализуйте отображение всех новых блюд на страницу с помощью JavaScript. Проверьте, что скрипт работает для всех категорий. 6. Создайте скрипт, с помощью которого можно фильтровать отображаемые в каждой категории блюда. - При клике на ссылку с фильтром, в блоке отображаются только блюда с соответствующим значением kind. Например, пользователь выбрал фильтр "мясное" в категории с главными блюдами. - Если затем пользователь выбрал другой фильтр, блюда должны измениться. Например, поменяем фильтр на "рыбное" - При клике на ссылку, ей добавляется класс "active" и меняется стиль ее отображения. - Если кликнуть по выбранному фильтру повторно, класс "active" удаляется, а в блоке снова отображаются все блюда. - Если ни один из фильтров не был выбран, в блоке отображаются все блюда. Функции из предыдущей лабораторной должны работать корректно, в том числе после фильтрации блюд. ### Материалы для изучения #### HTML [Атрибуты data-* [Doka]](https://doka.guide/html/data-attributes/) #### JS [Функция [Doka]](https://doka.guide/js/function/) [Функции [MDN]](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Functions) [push() [Doka]](https://doka.guide/js/array-push/) [pop() [Doka]](https://doka.guide/js/array-pop/) [unshift() [Doka]](https://doka.guide/js/array-unshift/) [shift() [Doka]](https://doka.guide/js/array-shift/) [slice() [Doka]](https://doka.guide/js/array-slice/) [splice() [Doka]](https://doka.guide/js/array-splice/) [includes() [Doka]](https://doka.guide/js/includes/) [classList [Doka]](https://doka.guide/js/element-classlist/) [Области видимости [Doka]](https://doka.guide/js/closures/)