Перейти к содержанию

Шаблон:НавигацияМодуль: различия между версиями

Материал из GravityWiki
Новая страница: «local p = {} function p.navmenu(frame) local args = frame:getParent().args local currentTitle = mw.title.getCurrentTitle() -- Собираем все категории local categories = {} for key, value in pairs(args) do if string.match(key, '^category%d+$') then local num = string.match(key, 'category(%d+)') categories[tonumber(num)] = { name = value, subitems...»
 
Нет описания правки
 
Строка 5: Строка 5:
     local currentTitle = mw.title.getCurrentTitle()
     local currentTitle = mw.title.getCurrentTitle()
      
      
    -- Собираем все категории
     local categories = {}
     local categories = {}
      
      
Строка 18: Строка 17:
     end
     end
      
      
    -- Собираем подпункты для каждой категории
     for key, value in pairs(args) do
     for key, value in pairs(args) do
         if string.match(key, '^subitems%d+$') then
         if string.match(key, '^subitems%d+$') then
Строка 33: Строка 31:
     end
     end
      
      
    -- Сортируем категории по номерам
     local sortedCategories = {}
     local sortedCategories = {}
     for num in pairs(categories) do
     for num in pairs(categories) do
Строка 40: Строка 37:
     table.sort(sortedCategories)
     table.sort(sortedCategories)
      
      
    -- Начинаем формировать HTML
     local html = {}
     local html = {}
     table.insert(html, '<nav class="wiki-nav-menu">')
     table.insert(html, '<nav class="wiki-nav-menu">')
Строка 46: Строка 42:
     table.insert(html, '<ul class="nav-main-list">')
     table.insert(html, '<ul class="nav-main-list">')
      
      
    -- Выводим категории
     for _, num in ipairs(sortedCategories) do
     for _, num in ipairs(sortedCategories) do
         local category = categories[num]
         local category = categories[num]
Строка 52: Строка 47:
         table.insert(html, '<li class="nav-category">')
         table.insert(html, '<li class="nav-category">')
          
          
        -- Обрабатываем иконки (формат: Файл:icon.png&Ссылка&Текст)
         if string.find(category.name, '&') then
         if string.find(category.name, '&') then
             local parts = mw.text.split(category.name, '&')
             local parts = mw.text.split(category.name, '&')
Строка 64: Строка 58:
         end
         end
          
          
        -- Выводим подпункты
         if #category.subitems > 0 then
         if #category.subitems > 0 then
             table.insert(html, '<ul class="nav-sub-list">')
             table.insert(html, '<ul class="nav-sub-list">')

Текущая версия от 07:26, 20 октября 2025

local p = {}

function p.navmenu(frame)

   local args = frame:getParent().args
   local currentTitle = mw.title.getCurrentTitle()
   
   local categories = {}
   
   for key, value in pairs(args) do
       if string.match(key, '^category%d+$') then
           local num = string.match(key, 'category(%d+)')
           categories[tonumber(num)] = {
               name = value,
               subitems = {}
           }
       end
   end
   
   for key, value in pairs(args) do
       if string.match(key, '^subitems%d+$') then
           local num = string.match(key, 'subitems(%d+)')
           num = tonumber(num)
           if categories[num] then
               -- Разделяем подпункты по точке с запятой
               local subitems = mw.text.split(value, ';')
               for _, item in ipairs(subitems) do
                   table.insert(categories[num].subitems, mw.text.trim(item))
               end
           end
       end
   end
   
   local sortedCategories = {}
   for num in pairs(categories) do
       table.insert(sortedCategories, num)
   end
   table.sort(sortedCategories)
   
   local html = {}
   table.insert(html, '<nav class="wiki-nav-menu">')

table.insert(html, '

') table.insert(html, '

')

   table.insert(html, '</nav>')
   
   return table.concat(html, '\n')

end

return p