Ugrás a tartalomhoz

„Modul:SimpleTaxobox” változatai közötti eltérés

Innen: MKOE wiki
Nincs szerkesztési összefoglaló
Címke: Visszaállítva
Nincs szerkesztési összefoglaló
Címkék: Kézi visszaállítás Visszaállítva
1. sor: 1. sor:
-- Modul:SimpleTaxobox
-- Modul:SimpleTaxobox (A logikai motor a Modul:TaxonData használatával)
local p = {}
local p = {}


-- A rangok megjelenítendő nevei.
-- Betölti a központi adatmodult, amiben a hierarchia szerepel.
-- Ez a tábla kezeli a rangok magyar nevét a megjelenítéshez.
local TaxonData = require('Modul:TaxonData')
local RANK_NAMES = {
    ['Domén'] = 'Domén',
    ['Ország'] = 'Ország',
    ['Törzs'] = 'Törzs',
    ['Osztály'] = 'Osztály',
    ['Alosztály'] = 'Alosztály',
    ['Klád'] = 'Klád',
    ['Rend'] = 'Rend',
    ['Család'] = 'Család',
    ['Nemzetség'] = 'Nemzetség',
    ['Alnemzetség'] = 'Alnemzetség',
    ['Szekció'] = 'Szekció',
    ['Faj'] = 'Faj',
    -- További rangok ide
}


-- [[Modul:TaxonData]] betöltése és biztonságos elérése.
function p.buildTaxobox(frame)
local function getData(frame)
     local args = frame:getParent().args
     local success, data = pcall(require, 'Modul:TaxonData')
    local currentTaxon = args.taxon
     if not success then
    local hierarchy = {}
         return nil, "Hiba: A Modul:TaxonData nem tölthető be: " .. data
    local taxon = currentTaxon
 
     if not currentTaxon then
         return "'''Taxobox Hiba:''' Hiányzó taxon paraméter."
     end
     end
    -- Feltételezzük, hogy a Modul:TaxonData visszaad egy 'p' táblát, amiben van egy 'getData' függvény.
    if type(data.getData) ~= 'function' then
        return nil, "Hiba: A Modul:TaxonData nem tartalmazza a 'getData' függvényt."
    end
    return data, nil
end
-- Meghatározza a teljes taxonómiai hierarchiát a megadott taxontól a gyökérig.
-- Visszaad egy táblát: { {id=ID, rank=RANK}, ... } a gyökértől a kiinduló taxonig.
local function determineHierarchy(startTaxonID, data)
    local hierarchy = {}
    local currentID = startTaxonID
    local path = {}
      
      
     -- Végigmegyünk a szülőkön, amíg el nem érjük a gyökért (parent=nil).
     -- 1. Rekurzív adatgyűjtés a Modul:TaxonData-ból
     while currentID do
     while taxon do
         local taxonData = data.getData(currentID)
         local data = TaxonData.getData(taxon) -- Itt történik az adatkiolvasás
         if not taxonData then
          
            -- Ha hiányzik az adat, akkor a hierarchia megszakad.
        -- A legalsó szint (faj) esetén a szülő adatot először nem a táblából olvassuk ki,
             table.insert(path, 1, { id = currentID, rank = "HIÁNYZÓ ADAT" })
        -- hanem a 'data' változó tartalmazza a rangot és a szülőt a rekurzióhoz.
             break  
        if data then
             table.insert(hierarchy, {  
                rank = data.rank,  
                name = taxon
            })
             taxon = data.parent -- Áttérés a szülőre (PARENT_ID)
        else
            -- Ha a legalsó szintnél nincs 'data' (vagy a lánc vége/hiba)
            -- és van már eleme a hierarchiának, akkor megállunk.
            if #hierarchy > 0 then
                break
            else
                -- Ha a legelső elemre sincs adat, hiba.
                return 'Taxobox Hiba: Nem található adat a "' .. currentTaxon .. '" taxonhoz a Modul:TaxonData-ban.'
            end
         end
         end
       
        table.insert(path, 1, { id = currentID, rank = taxonData.rank })
        currentID = taxonData.parent
     end
     end
      
      
     return path
     -- 2. Wikitext Taxobox táblázat felépítése
end
     local output = '{| class="infobox biota" style="text-align: left; width: 20em;"\n'
 
     output = output .. '|+ Rendszertani besorolás\n'
-- A fő függvény, ami a taxoboxot építi.
function p.buildTaxobox(frame)
     local args = frame.args
     local startTaxonID = args.taxon
      
      
    if not startTaxonID or startTaxonID == '' then
     -- A hierarchia fordított sorrendben van (fajtól a Doménig). Felülről lefelé haladunk.
        return '<div style="color:red;">Hiba: Hiányzik a <code>|taxon=</code> paraméter.</div>'
     for i = #hierarchy, 1, -1 do
    end
         local item = hierarchy[i]
 
    local data, errorMsg = getData(frame)
    if errorMsg then
        return '<div style="color:red;">' .. errorMsg .. '</div>'
    end
   
    local hierarchy = determineHierarchy(startTaxonID, data)
    local taxoboxLines = {}
   
     -- [[Taxobox fejléc]]
    table.insert(taxoboxLines, '{| class="biota" style="text-align:left; width:200px;"')
   
    -- Taxonómiai cím
    table.insert(taxoboxLines, '|-')
    table.insert(taxoboxLines, '| colspan="2" style="text-align:center; font-size:1.25em; padding:0.1em; line-height:1.2em;" | ' .. startTaxonID)
   
    -- Hierarchia soronkénti megjelenítése
     for i, taxonInfo in ipairs(hierarchy) do
        local taxonID = taxonInfo.id
        local rank = taxonInfo.rank
        local isTerminalTaxon = (i == #hierarchy) -- Az utolsó elem a bemeneti taxon
         local displayName = taxonID
          
          
         -- 1. Rang neve: A rang magyar nevét vesszük alapul a RANK_NAMES táblából
         local name_display = item.name
         local rankName = RANK_NAMES[rank] or rank -- Ha nincs benne, az eredeti rangot használjuk
         -- Kiemeljük az aktuális cikk tárgyát (ami a hierarchia legalján van)
 
         if i == 1 then
        -- 2. Display Name (Taxon Név) formázása
             name_display = "'''" .. name_display .. "'''"
        -- Fajok és Nemzetségek esetén dőlt betű
         if rank == 'Faj' or rank == 'Nemzetség' or rank == 'Alnemzetség' or rank == 'Szekció' then
             displayName = "''" .. displayName .. "''"
        end
 
        -- A bemeneti taxon (Speciesbox-nál a Faj) neve vastag betűvel jelenik meg
        if isTerminalTaxon then
            displayName = "'''" .. displayName .. "'''"
            rankName = '' -- A legalsó taxon neve előtt nem kell a rang megnevezése
        end
       
        -- Csatolás (linkelés)
        -- A taxont a megfelelő (azonos nevű) cikkre linkeljük.
        if not isTerminalTaxon then
            displayName = '[[' .. taxonID .. '|' .. displayName .. ']]'
        end
 
        -- 3. Taxobox sor generálása
        local taxoLine = '|- style="vertical-align:top;"\n'
       
        if rankName ~= '' then
            taxoLine = taxoLine .. '| ' .. rankName .. ':\n'
            taxoLine = taxoLine .. '| ' .. displayName
        else
            -- Ha a rangnév üres (a terminális taxonnál), akkor a taxon neve két oszlopban jelenik meg.
            taxoLine = taxoLine .. '| colspan="2" style="text-align:center;" | ' .. displayName
         end
         end
          
          
         table.insert(taxoboxLines, taxoLine)
         output = output .. '|-\n'
        output = output .. '| style="text-align: right;" | ' .. item.rank .. '\n'
        output = output .. '| ' .. name_display .. '\n'
     end
     end
      
      
     -- [[Taxobox lábléc]]
     output = output .. '|}\n'
    table.insert(taxoboxLines, '|}')
      
      
     return table.concat(taxoboxLines, '\n')
     return output
end
end


return p
return p

A lap 2025. november 23., 12:53-kori változata

A modult a Modul:SimpleTaxobox/doc lapon tudod dokumentálni

-- Modul:SimpleTaxobox (A logikai motor a Modul:TaxonData használatával)
local p = {}

-- Betölti a központi adatmodult, amiben a hierarchia szerepel.
local TaxonData = require('Modul:TaxonData')

function p.buildTaxobox(frame)
    local args = frame:getParent().args
    local currentTaxon = args.taxon 
    local hierarchy = {}
    local taxon = currentTaxon

    if not currentTaxon then
        return "'''Taxobox Hiba:''' Hiányzó taxon paraméter."
    end
    
    -- 1. Rekurzív adatgyűjtés a Modul:TaxonData-ból
    while taxon do
        local data = TaxonData.getData(taxon) -- Itt történik az adatkiolvasás
        
        -- A legalsó szint (faj) esetén a szülő adatot először nem a táblából olvassuk ki,
        -- hanem a 'data' változó tartalmazza a rangot és a szülőt a rekurzióhoz.
        if data then
            table.insert(hierarchy, { 
                rank = data.rank, 
                name = taxon 
            })
            taxon = data.parent -- Áttérés a szülőre (PARENT_ID)
        else
            -- Ha a legalsó szintnél nincs 'data' (vagy a lánc vége/hiba)
            -- és van már eleme a hierarchiának, akkor megállunk.
            if #hierarchy > 0 then
                break
            else
                -- Ha a legelső elemre sincs adat, hiba.
                return 'Taxobox Hiba: Nem található adat a "' .. currentTaxon .. '" taxonhoz a Modul:TaxonData-ban.'
            end
        end
    end
    
    -- 2. Wikitext Taxobox táblázat felépítése
    local output = '{| class="infobox biota" style="text-align: left; width: 20em;"\n'
    output = output .. '|+ Rendszertani besorolás\n'
    
    -- A hierarchia fordított sorrendben van (fajtól a Doménig). Felülről lefelé haladunk.
    for i = #hierarchy, 1, -1 do
        local item = hierarchy[i]
        
        local name_display = item.name
        -- Kiemeljük az aktuális cikk tárgyát (ami a hierarchia legalján van)
        if i == 1 then
            name_display = "'''" .. name_display .. "'''"
        end
        
        output = output .. '|-\n'
        output = output .. '| style="text-align: right;" | ' .. item.rank .. '\n'
        output = output .. '| ' .. name_display .. '\n'
    end
    
    output = output .. '|}\n'
    
    return output
end

return p