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

Модуль:RandomInProject

Материал из Викиучебника — открытых книг для открытого мира

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

local p = {}

-- Функция перемешивания массива (Fisher-Yates shuffle)
local function shuffle(tbl)
    math.randomseed(os.time()) -- Инициализация генератора случайных чисел
    for i = #tbl, 2, -1 do
        local j = math.random(i)
        tbl[i], tbl[j] = tbl[j], tbl[i] -- Меняем местами элементы
    end
end

function p.getRandomArticle(frame)
   -- Получаем аргументы
    local args = require('Модуль:Arguments').getArgs(frame)
    local page = args.page

    if not page then
        return "Ошибка: не указана страница."
    end

    -- Загружаем содержимое указанной страницы
    local content = frame:expandTemplate{ title = page }
    if not content or content == "" then
        return "Ошибка: не удалось получить содержимое страницы '" .. page .. "'."
    end

    -- Разделяем содержимое на секции по тегу <hr/>
    local sections = mw.text.split(content, '<hr%s*/?>')

    -- Проверяем, есть ли секции для выбора
    if #sections == 0 then
        return "Ошибка: на странице '" .. page .. "' не найдено разделов."
    end

    -- Перемешиваем список секций
    shuffle(sections)

    -- Выбираем первую секцию после перемешивания
    local selectedSection = mw.text.trim(sections[1])

    -- Возвращаем выбранную секцию
    return selectedSection
end

return p