Модуль:CategoryMenu: различия между версиями

Материал из Space Station 14 Вики
мНет описания правки
мНет описания правки
Строка 7: Строка 7:
     end
     end


     -- Обработка до 5 категорий и до 8 пунктов в каждой категории
     -- Обработка неограниченного количества категорий
     local categories = {}
     local categories = {}
     for i = 1, 5 do
     local i = 1
 
    while true do
         local categoryName = getArg("category" .. i)
         local categoryName = getArg("category" .. i)
       
        -- Если категория не задана, пропускаем ее
        if categoryName then
            local category = {
                name = categoryName,
                paragraphs = {},
                contents = {}
            }


             -- Для каждой категории обрабатываем до 8 пунктов
        -- Если категория не задана, выходим из цикла
            for j = 1, 8 do
        if not categoryName then
                local paragraph = getArg("category" .. i .. "-paragraph" .. j)
             break
                local content = getArg("category" .. i .. "-paragraph" .. j .. "-content")
        end
 
        local category = {
            name = categoryName,
            paragraphs = {},
            contents = {}
        }
 
        -- Обработка неограниченного количества пунктов для каждой категории
        local j = 1
        while true do
            local paragraph = getArg("category" .. i .. "-paragraph" .. j)
            local content = getArg("category" .. i .. "-paragraph" .. j .. "-content")


                -- Добавляем только те пункты и контент, которые заданы
            -- Если пункт или контент не заданы, выходим из цикла
                if paragraph and content then
            if not paragraph or not content then
                    table.insert(category.paragraphs, paragraph)
                 break
                    table.insert(category.contents, content)
                 end
             end
             end


             table.insert(categories, category)
             table.insert(category.paragraphs, paragraph)
            table.insert(category.contents, content)
 
            j = j + 1
         end
         end
        table.insert(categories, category)
        i = i + 1
     end
     end



Версия от 18:29, 23 сентября 2024

Для документации этого модуля может быть создана страница Модуль:CategoryMenu/doc

local p = {}

function p.main(frame)
    -- Функция для получения аргумента или значения по умолчанию
    local function getArg(name)
        return frame.args[name] or nil
    end

    -- Обработка неограниченного количества категорий
    local categories = {}
    local i = 1

    while true do
        local categoryName = getArg("category" .. i)

        -- Если категория не задана, выходим из цикла
        if not categoryName then
            break
        end

        local category = {
            name = categoryName,
            paragraphs = {},
            contents = {}
        }

        -- Обработка неограниченного количества пунктов для каждой категории
        local j = 1
        while true do
            local paragraph = getArg("category" .. i .. "-paragraph" .. j)
            local content = getArg("category" .. i .. "-paragraph" .. j .. "-content")

            -- Если пункт или контент не заданы, выходим из цикла
            if not paragraph or not content then
                break
            end

            table.insert(category.paragraphs, paragraph)
            table.insert(category.contents, content)

            j = j + 1
        end

        table.insert(categories, category)
        i = i + 1
    end

    -- Формирование HTML
    local result = ""

    result = result .. '<div class="category-menu">\n'

    -- Категории
    if #categories > 0 then
        result = result .. '<div class="categories">\n'
        for i, category in ipairs(categories) do
            result = result .. '<div class="category' .. i .. '">' .. category.name .. '</div>\n'
        end
        result = result .. '</div>\n'
    end

    -- Основной контейнер с меню и контентом
    result = result .. '<div class="main-container">\n'

    -- Меню
    if #categories > 0 then
        result = result .. '<div class="menu-container">\n'
        for i, category in ipairs(categories) do
            if #category.paragraphs > 0 then
                result = result .. '<div class="menu category' .. i .. '-menu">\n'
                for j, paragraph in ipairs(category.paragraphs) do
                    result = result .. '<div class="category' .. i .. '-paragraph' .. j .. '">' .. paragraph .. '</div>\n'
                end
                result = result .. '</div>\n'
            end
        end
        result = result .. '</div>\n'
    end

    -- Контент
    if #categories > 0 then
        result = result .. '<div class="content">\n'
        for i, category in ipairs(categories) do
            if #category.contents > 0 then
                for j, content in ipairs(category.contents) do
                    result = result .. '<div class="category' .. i .. '-paragraph' .. j .. '-content">' .. content .. '</div>\n'
                end
            end
        end
        result = result .. '</div>\n'
    end

    result = result .. '</div>\n' -- Закрытие main-container

    -- Закрытие category-menu
    result = result .. '</div>\n'

    return result
end

return p