Ugrás a tartalomhoz

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

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


-- Betölti a központi adatmodult, amiben a hierarchia szerepel.
-- Betölti a központi adatmodult, amiben a hierarchia szerepel.
local TaxonData = require('Modul:TaxonData')
local TaxonData = require('Modul:TaxonData')
-- Segédfüggvény: Kinyeri a nemzetség nevét a fajnévből (pl. "Echinocactus grusonii" -> "Echinocactus")
local function extract_genus(full_species_name)
    local genus_name = full_species_name:match("([^%s]+)") -- Kinyeri az első szót (szóközig)
    return genus_name
end


function p.buildTaxobox(frame)
function p.buildTaxobox(frame)
17. sor: 23. sor:
     -- 1. Rekurzív adatgyűjtés a Modul:TaxonData-ból
     -- 1. Rekurzív adatgyűjtés a Modul:TaxonData-ból
     while taxon do
     while taxon do
         local data = TaxonData.getData(taxon) -- Itt történik az adatkiolvasás
         local data = TaxonData.getData(taxon)  
          
          
        -- 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
         if data then
             table.insert(hierarchy, {  
            -- 1a. Talált adatot (Nemzetség, Család, Rend, Alfaj, stb.)
                rank = data.rank,  
             table.insert(hierarchy, { rank = data.rank, name = taxon })
                name = taxon  
             taxon = data.parent -- Áttérés a szülőre
            })
             taxon = data.parent -- Áttérés a szülőre (PARENT_ID)
         else
         else
             -- Ha a legalsó szintnél nincs 'data' (vagy a lánc vége/hiba)
             -- 1b. Nem talált adatot a Modul:TaxonData-ban. Feltételezzük, hogy FAJ.
             -- és van már eleme a hierarchiának, akkor megállunk.
            if taxon == currentTaxon then
            if #hierarchy > 0 then
                -- Csak a legelső elem esetén végezzük el a szétválasztást
                local genus_name = extract_genus(currentTaxon)
               
                -- Hozzáadjuk magát a fajt a hierarchiához (a Nemzetség lesz a szülő)
                table.insert(hierarchy, { rank = "Faj", name = currentTaxon })
                taxon = genus_name -- Áttérünk a Nemzetségre
             else
                -- Nem a legelső elem, és nincs adat (Hiba, vagy elértük a lánc végét a Nemzetség felett)
                 break
                 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
         end
43. sor: 49. sor:
     output = output .. '|+ Rendszertani besorolás\n'
     output = output .. '|+ Rendszertani besorolás\n'
      
      
     -- A hierarchia fordított sorrendben van (fajtól a Doménig). Felülről lefelé haladunk.
     -- A hierarchia fordított sorrendben van. Felülről lefelé haladunk.
     for i = #hierarchy, 1, -1 do
     for i = #hierarchy, 1, -1 do
         local item = hierarchy[i]
         local item = hierarchy[i]
49. sor: 55. sor:
         local name_display = item.name
         local name_display = item.name
         -- Kiemeljük az aktuális cikk tárgyát (ami a hierarchia legalján van)
         -- Kiemeljük az aktuális cikk tárgyát (ami a hierarchia legalján van)
         if i == 1 then
         if item.rank == "Faj" then  
             name_display = "'''" .. name_display .. "'''"
             name_display = "'''" .. name_display .. "'''"
         end
         end

A lap 2025. november 23., 13:33-kori változata

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

-- Modul:SimpleTaxobox (Frissítve: Fajnév automatikus szétválasztása)
local p = {}

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

-- Segédfüggvény: Kinyeri a nemzetség nevét a fajnévből (pl. "Echinocactus grusonii" -> "Echinocactus")
local function extract_genus(full_species_name)
    local genus_name = full_species_name:match("([^%s]+)") -- Kinyeri az első szót (szóközig)
    return genus_name
end

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) 
        
        if data then
            -- 1a. Talált adatot (Nemzetség, Család, Rend, Alfaj, stb.)
            table.insert(hierarchy, { rank = data.rank, name = taxon })
            taxon = data.parent -- Áttérés a szülőre
        else
            -- 1b. Nem talált adatot a Modul:TaxonData-ban. Feltételezzük, hogy FAJ.
            if taxon == currentTaxon then
                -- Csak a legelső elem esetén végezzük el a szétválasztást
                local genus_name = extract_genus(currentTaxon)
                
                -- Hozzáadjuk magát a fajt a hierarchiához (a Nemzetség lesz a szülő)
                table.insert(hierarchy, { rank = "Faj", name = currentTaxon })
                taxon = genus_name -- Áttérünk a Nemzetségre
            else
                -- Nem a legelső elem, és nincs adat (Hiba, vagy elértük a lánc végét a Nemzetség felett)
                break
            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. 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 item.rank == "Faj" 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