Zeile 1: |
Zeile 1: |
| --[[ | | --[[ |
− | Lua Alternative für Vorlage:Liste Basistyp (in der Hoffnung auf bessere Performance) | + | Lua Alternative für Vorlage:Liste Basistyp - bessere Performance in allen Bereichen |
| erwartet ein basistyp als argument und stellt zugehörigen Seiten da. | | erwartet ein basistyp als argument und stellt zugehörigen Seiten da. |
| ]]-- | | ]]-- |
Zeile 8: |
Zeile 8: |
| function p.Liste( frame ) | | function p.Liste( frame ) |
| local returnString = "" | | local returnString = "" |
− | local Basistyp = frame.args['Basistyp'] | + | local Basistyp = frame.args[1] |
| -- test ob Basistyp leer ist wenn ja, beende hier | | -- test ob Basistyp leer ist wenn ja, beende hier |
| if Basistyp == nil then return nil end | | if Basistyp == nil then return nil end |
| -- Todo: test ob argument tatsächlich ein basistyp ist wenn nicht beende hier | | -- Todo: test ob argument tatsächlich ein basistyp ist wenn nicht beende hier |
| + | -- Todo (wichtiger): Hauptkategorien darstellen |
| + | --eigene Darstellung für Ausrüstungskategorien... |
| + | if Basistyp == 'Ausrüstungskategorie' |
| + | then |
| + | local ntitle = mw.title.getCurrentTitle().text |
| + | local queryResult = mw.smw.ask('[[Ausrüstungskategorie::'..ntitle..'|?=#|limit=1999') |
| + | returnString = '<table class="wikitable sortable oben" ><tr><th>Ausrüstung</th><th>Preis</th><th>Last</th><th>Verfügbarkeit</th><th>Komplexität</th><th>Quellen</th></tr>' |
| + | |
| + | local i = 1 |
| + | if queryResult ~= nil then |
| + | while i <= table.getn(queryResult) |
| + | do |
| + | local basistypArtikelinfo = mw.smw.ask('[[' .. queryResult[i][1] ..']]|?Artikelinfo|?Profilbild|?Last|?Preis|?Komplexität|?Verfügbarkeit|?Publikation|mainlabel=-') |
| + | -- Artikelinfo |
| + | if basistypArtikelinfo[1]['Artikelinfo'] ~= nil |
| + | then |
| + | returnString = returnString .. '<tr>' -- neue tabellen reihe |
| + | returnString = returnString ..'<td>[[' .. queryResult[i][1] .. ']] (' .. basistypArtikelinfo[1]['Artikelinfo'] ..')</td>' |
| + | end |
| + | returnString = returnString .. '<td>' |
| + | --Preis |
| + | if basistypArtikelinfo[1]['Preis'] ~= nil |
| + | then |
| + | returnString = returnString .. basistypArtikelinfo[1]['Preis'] ..'</td>' |
| + | end |
| + | --Last |
| + | returnString = returnString .. '<td>' |
| + | if basistypArtikelinfo[1]['Last'] ~= nil |
| + | then |
| + | returnString = returnString .. basistypArtikelinfo[1]['Last'] ..'</td>' |
| + | end |
| + | --Verfügbarkeit |
| + | returnString = returnString .. '<td>' |
| + | if basistypArtikelinfo[1]['Verfügbarkeit'] ~= nil |
| + | then |
| + | returnString = returnString .. basistypArtikelinfo[1]['Verfügbarkeit'] ..'</td>' |
| + | end |
| + | --Komplexität |
| + | returnString = returnString .. '<td>' |
| + | if basistypArtikelinfo[1]['Komplexität'] ~= nil |
| + | then |
| + | returnString = returnString .. basistypArtikelinfo[1]['Komplexität'] ..'</td>' |
| + | end |
| + | --Quellen |
| + | returnString = returnString .. '<td>' |
| + | if basistypArtikelinfo[1]['Publikation'] ~= nil |
| + | then |
| + | if (type(basistypArtikelinfo[1]['Publikation']) == "table") |
| + | then |
| + | n = 1 |
| + | while n <= table.getn(basistypArtikelinfo[1]['Publikation']) |
| + | do |
| + | returnString = returnString .. basistypArtikelinfo[1]['Publikation'][n] |
| + | if n < table.getn(basistypArtikelinfo[1]['Publikation']) |
| + | then |
| + | returnString = returnString ..", " |
| + | end |
| + | n = n + 1 |
| + | end |
| + | else |
| + | returnString = returnString .. basistypArtikelinfo[1]['Publikation'] |
| + | end |
| + | end |
| + | returnString = returnString .. '</td>' |
| + | |
| + | i = i +1 |
| + | end |
| + | --tabelle schließen |
| + | returnString = returnString .. '</table>' |
| + | return returnString |
| + | end |
| + | end |
| + | -- Ausbildung benutzt zwei Vorlagen.. Liste.Ausbildung wird nicht gefunden |
| + | if Basistyp == "Ausbildung" |
| + | then |
| + | returnString = returnString .. mw.getCurrentFrame():expandTemplate{title ="Vorlage:Ausbildung.Listen"} |
| + | return returnString -- kaputte tabelle vermeiden, funktion hier beenden |
| + | end |
| -- Semantische Abfrage nach Seiten mit diesen Basistyp | | -- Semantische Abfrage nach Seiten mit diesen Basistyp |
| local queryResult = mw.smw.ask('[[Basistyp::'..Basistyp .. ']]|?=#|limit=1999') --link=none funktioniert nicht über api abfrage daher ?=# | | local queryResult = mw.smw.ask('[[Basistyp::'..Basistyp .. ']]|?=#|limit=1999') --link=none funktioniert nicht über api abfrage daher ?=# |
− | | + | if queryResult == nil then return nil end -- Wenn query nicht funktionert abbruch: TODO funktionierender alternativer query |
| + | -- tabellen kopf |
| + | returnString = returnString .. '<table class="wikitable sortable oben" ><tr><th>' .. Basistyp ..'</th><th>Gehört zu...</th><th>Quellen</th></tr>' |
| -- loop über query result und erstelle tabelle | | -- loop über query result und erstelle tabelle |
| local i = 1 | | local i = 1 |
| while i <= table.getn(queryResult) | | while i <= table.getn(queryResult) |
| do | | do |
− | local basistypArtikelinfo = mw.smw.ask('[[' .. queryResult[i][1] ..']]|?Artikelinfo|?Profilbild|mainlabel=-') | + | local basistypArtikelinfo = mw.smw.ask('[[' .. queryResult[i][1] ..']]|?Artikelinfo|?Profilbild|?GehörtZu|?Publikation|mainlabel=-') |
− | -- um fehler zu vermeiden auf nil prüfen | + | -- um fehler zu vermeiden,jeweils auf nil prüfen |
| + | -- Artikelinfo |
| if basistypArtikelinfo[1]['Artikelinfo'] ~= nil | | if basistypArtikelinfo[1]['Artikelinfo'] ~= nil |
| then | | then |
− | returnString = returnString ..basistypArtikelinfo[1]['Artikelinfo'] | + | returnString = returnString .. '<tr>' -- neue tabellen reihe |
| + | returnString = returnString ..'<td>[[' .. queryResult[i][1] .. ']] (' .. basistypArtikelinfo[1]['Artikelinfo'] ..')</td>' |
| end | | end |
| + | -- Bild und GehoertZu |
| + | returnString = returnString .. '<td>' |
| + | --Bild |
| if basistypArtikelinfo[1]['Profilbild'] ~= nil | | if basistypArtikelinfo[1]['Profilbild'] ~= nil |
| then | | then |
Zeile 31: |
Zeile 116: |
| returnString = returnString ..'[[Datei:'..basistypArtikelinfo[1]['Profilbild'] .. '|90x90px|verweis='.. queryResult[i][1] ..']]</div>' | | returnString = returnString ..'[[Datei:'..basistypArtikelinfo[1]['Profilbild'] .. '|90x90px|verweis='.. queryResult[i][1] ..']]</div>' |
| end | | end |
| + | --GehoertZu |
| + | if basistypArtikelinfo[1]['GehörtZu'] ~= nil |
| + | then |
| + | --Wenn table loop über die GehörtZu angaben |
| + | if (type(basistypArtikelinfo[1]['GehörtZu']) == "table") |
| + | then |
| + | n = 1 |
| + | while n <= table.getn(basistypArtikelinfo[1]['GehörtZu']) |
| + | do |
| + | returnString = returnString .. basistypArtikelinfo[1]['GehörtZu'][n] |
| + | if n < table.getn(basistypArtikelinfo[1]['GehörtZu']) |
| + | then |
| + | returnString = returnString ..", " |
| + | end |
| + | n = n + 1 |
| + | end |
| + | else -- nur ein GehoertZu und damit keine tabelle sondern ein string |
| + | returnString = returnString .. basistypArtikelinfo[1]['GehörtZu'] |
| + | end |
| + | end |
| + | returnString = returnString .. '</td>' |
| + | --Quellen |
| + | returnString = returnString .. '<td>' |
| + | if basistypArtikelinfo[1]['Publikation'] ~= nil |
| + | then |
| + | if (type(basistypArtikelinfo[1]['Publikation']) == "table") |
| + | then |
| + | n = 1 |
| + | while n <= table.getn(basistypArtikelinfo[1]['Publikation']) |
| + | do |
| + | returnString = returnString .. basistypArtikelinfo[1]['Publikation'][n] |
| + | if n < table.getn(basistypArtikelinfo[1]['Publikation']) |
| + | then |
| + | returnString = returnString ..", " |
| + | end |
| + | n = n + 1 |
| + | end |
| + | else |
| + | returnString = returnString .. basistypArtikelinfo[1]['Publikation'] |
| + | end |
| + | end |
| + | returnString = returnString .. '</td>' |
| i = i + 1 | | i = i + 1 |
− |
| |
| end | | end |
− | | + | --tabelle schließen |
| + | returnString = returnString .. '</table>' |
| return returnString | | return returnString |
| end | | end |
| | | |
| return p | | return p |