Модуль:RandomPageFromCategory

Материал из Поле цифровой дидактики
Версия от 08:29, 23 апреля 2026; Patarakin (обсуждение | вклад) (Новая страница: «-- Module:RandomPageFromCategory local p = {} -- Вспомогательная функция: случайный элемент таблицы local function random_item(t) if not t or #t == 0 then return nil end -- math.random(1, #t) даёт целое число от 1 до #t включительно local i = math.random(1, #t) return t[i] end -- Основная функция: вернуть ссылку на случайную ст...»)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)

-- Module:RandomPageFromCategory
local p = {}

-- Вспомогательная функция: случайный элемент таблицы
local function random_item(t)
  if not t or #t == 0 then
    return nil
  end
  -- math.random(1, #t) даёт целое число от 1 до #t включительно
  local i = math.random(1, #t)
  return t[i]
end

-- Основная функция: вернуть ссылку на случайную страницу из категории
function p.fromCategory(frame)
  -- 1‑й параметр: имя категории без префикса "Category:"
  local cat = frame.args[1] or "Book"

  -- Запрос SMW: все страницы в указанной категории
  local query = string.format("[[Category:%s]]|limit=500", cat)
  local res = mw.smw and mw.smw.ask and mw.smw.ask(query) or nil

  if not res or #res == 0 then
    return string.format("Нет страниц в категории \"%s\".", cat)
  end

  -- Выбираем случайную страницу из результата
  local row = random_item(res)
  local title = row.fulltext or row["fulltext"] or row[1]

  if not title then
    return "Не удалось получить заголовок страницы."
  end

  -- Возвращаем обычную вики‑ссылку
  return string.format("[[%s]]", title)
end

return p