Активное меню и субменю в pug?

Для создания активного меню с субменю в Pug, можно использовать различные подходы и техники. Рассмотрим несколько возможных решений.

1. Использование условных операторов:

В данном подходе мы можем использовать условные операторы Pug для определения активной страницы и соответствующего класса элементу меню.
Например, если у вас есть массив-список элементов меню, вы можете проверить, совпадает ли значение текущего элемента со значением текущей страницы, и добавить класс активности соответствующему элементу.
Пример кода:

   ul
     li(class=(currentPage === 'home' ? 'active' : ''))
       a(href='/home') Home
     li(class=(currentPage === 'about' ? 'active' : ''))
       a(href='/about') About
     li(class=(currentPage === 'services' ? 'active' : ''))
       a(href='/services') Services
     li(class=(currentPage === 'contact' ? 'active' : ''))
       a(href='/contact') Contact

В этом примере переменная currentPage предполагается содержать текущую страницу, и мы проверяем её значение для каждого элемента меню.

2. Использование циклов и объектов:

Другой способ работы с активным меню состоит в использовании циклов и объектов. Вы можете создать объект, содержащий данные о каждом элементе меню (например, заголовок, ссылку и т. д.), и затем использовать цикл Pug для создания каждого элемента меню.
Пример кода:

   - var menuItems = [
     { title: 'Home', link: '/home' },
     { title: 'About', link: '/about' },
     { title: 'Services', link: '/services' },
     { title: 'Contact', link: '/contact' }
     ]
   
   ul
     each item in menuItems
       li(class=(item.link === currentPage ? 'active' : ''))
         a(href=item.link) #{item.title}

Здесь мы создали массив menuItems, содержащий объекты данных для каждого элемента меню. Затем, используя цикл each, мы обходим каждый элемент массива и создаем соответствующий элемент меню. Активный элемент определяется сравнением значения ссылки с текущей страницей.

3. Использование шаблонизаторов (например, express.js и res.locals):

Если вы работаете с шаблонизатором Pug в рамках фреймворка Express.js, вы можете использовать объект res.locals для передачи данных между сервером и шаблоном. В этом случае вы можете установить переменную активной страницы в res.locals на сервере, а затем использовать её в шаблоне Pug.
Пример кода:

   // Серверная часть
   app.use(function(req, res, next) {
     res.locals.currentPage = req.path;
     next();
   });

   // Шаблон Pug
   ul
     li(class=(currentPage === '/home' ? 'active' : ''))
       a(href='/home') Home
     li(class=(currentPage === '/about' ? 'active' : ''))
       a(href='/about') About
     li(class=(currentPage === '/services' ? 'active' : ''))
       a(href='/services') Services
     li(class=(currentPage === '/contact' ? 'active' : ''))
       a(href='/contact') Contact

Здесь мы устанавливаем переменную currentPage в res.locals на сервере с помощью промежуточного программного обеспечения Express.js. Затем в шаблоне Pug мы используем эту переменную для определения активного элемента меню.

В зависимости от вашего конкретного случая использования и структуры приложения вы можете выбрать подход, который лучше всего соответствует вашим потребностям.