Jump to content

Module:PopularArticles: Difference between revisions

From Iskomunidad
Created page with "local p = {} -- Get total views for a page local function getViews(pageName) local data = mw.ext.analytics.getViewsData({ page = pageName }) if not data then return 0 end local total = 0 for _, views in pairs(data) do total = total + tonumber(views) or 0 end return total end -- Get pages in a category local function getCategoryPages(categoryName) local category = mw.title.new("Category:" .. categoryName)..."
 
No edit summary
 
(3 intermediate revisions by the same user not shown)
Line 1: Line 1:
local p = {}
local p = {}
-- Get total views for a page
local function getViews(pageName)
    local data = mw.ext.analytics.getViewsData({
        page = pageName
    })
    if not data then
        return 0
    end
    local total = 0
    for _, views in pairs(data) do
        total = total + tonumber(views) or 0
    end
    return total
end
-- Get pages in a category
local function getCategoryPages(categoryName)
    local category = mw.title.new("Category:" .. categoryName)
    if not category then
        return {}
    end
    local pages = {}
    -- Get category members
    for page in mw.site.categories.getMembers(categoryName) do
        if page.ns == 0 then
            table.insert(pages, page)
        end
    end
    return pages
end


function p.main(frame)
function p.main(frame)


     local args = frame.args
     local pages = mw.ext.dpl.getPages{
 
        category = "Theses",
    local category = args.category or "Theses"
         ordermethod = "counter",
    local limit = tonumber(args.limit) or 10
         order = "descending",
 
        count = 1
    local pages = getCategoryPages(category)
    }
    local results = {}
 
    -- Get views for every page
    for _, page in ipairs(pages) do
 
         local views = getViews(page.prefixedText)
 
         table.insert(results, {
            title = page.prefixedText,
            displayTitle = page.subpageText or page.text,
            views = views,
            url = page.fullUrl()
        })


    if not pages or #pages == 0 then
        return "No pages found."
     end
     end


    -- Sort highest views first
    table.sort(results, function(a, b)
        return a.views > b.views
    end)
    -- Limit results
     local output = {}
     local output = {}


     table.insert(output, '<div class="popular-articles">')
     for i, page in ipairs(pages) do
    table.insert(output, '<h2>🔥 Popular Articles</h2>')
    table.insert(output, '<ol>')


    local count = math.min(limit, #results)
        local title = page.prefixedText or page.title or "Unknown page"
 
         local counter = page.counter or 0
    for i = 1, count do
 
         local item = results[i]


         table.insert(
         table.insert(
             output,
             output,
             string.format(
             string.format(
                 '<li><a href="%s">%s</a> <span class="popular-views">(%d views)</span></li>',
                 "%d. [[%s]] — %s views",
                 item.url,
                 i,
                 mw.text.encode(item.displayTitle),
                title,
                item.views
                 mw.language.getContentLanguage():formatNum(counter)
             )
             )
         )
         )


     end
     end
    table.insert(output, '</ol>')
    table.insert(output, '</div>')


     return table.concat(output, "\n")
     return table.concat(output, "\n")

Latest revision as of 06:36, 2 October 2026

Documentation for this module may be created at Module:PopularArticles/doc

local p = {}

function p.main(frame)

    local pages = mw.ext.dpl.getPages{
        category = "Theses",
        ordermethod = "counter",
        order = "descending",
        count = 1
    }

    if not pages or #pages == 0 then
        return "No pages found."
    end

    local output = {}

    for i, page in ipairs(pages) do

        local title = page.prefixedText or page.title or "Unknown page"
        local counter = page.counter or 0

        table.insert(
            output,
            string.format(
                "%d. [[%s]] — %s views",
                i,
                title,
                mw.language.getContentLanguage():formatNum(counter)
            )
        )

    end

    return table.concat(output, "\n")
end

return p