Color scheme: Dark
You are here: start » sl » Dokumentacija » Razširitve DokuWikija (WvdS) » Core

Core

Core je koren družine paketov WvdS: register storitev nad dogodkovnim vodilom DokuWikija, prek katerega se drugi paketi najdejo med seboj, in skupni razčlenjevalnik za obe obliki zapisa hišnih oznak. Sam nima ne uporabniškega vmesnika ne lastne oznake. Paket je namenjen razvijalcem vtičnikov, ki storitev ponudijo ali uporabijo, in upraviteljem, ki preverjajo, katere storitve na tej namestitvi delujejo.

Prvi koraki

Pogosta opravila

Kaj želite Za koga Kje to naredite Navodilo
preveriti, katere storitve so registrirane upravitelji do=wkcore_diag Diagnostika
poiskati, kateri paket ponuja katero storitev razvijalci – Kdo kaj ponuja
ponuditi lastno storitev razvijalci dogodek WKCORE_REGISTER_SERVICES Register storitev
odzvati se na konec zagona ali razširiti kontekst zahteve razvijalci dogodka WKCORE_READY in WKCORE_CONTEXT_BUILD Trije dogodki
uporabiti storitev, ne da bi jo trdno vezali razvijalci – Register storitev
razlikovati obe obliki zapisa hišnih oznak avtorji – Dve obliki zapisa, en rezultat
spremeniti nastavitev upravitelji Splošne nastavitve Nastavitve

Namen

Koren družine WvdS DW. Vtičnik sam nima uporabniškega vmesnika in nobene sintakse, prinese pa dve stvari, na katerih gradijo vsi drugi:

  • register storitev nad dogodkovnim vodilom DokuWikija – brez razcepa jedra (fork),
  • skupni razčlenjevalnik za obe obliki zapisa naših konstruktov na straneh.

Brez tega vtičnika se drugi vtičniki WvdS DW med seboj ne najdejo; vsak se tedaj po lastni pogodbi vede preprosteje, namesto da bi odpovedal.


Register storitev

Vtičnik svoje storitve vpiše tako, da se prijavi na dogodek WKCORE_REGISTER_SERVICES; $event->data je register. Dogodek se sproži enkrat na zahtevo: pri običajnem ogledu strani takoj po DOKUWIKI_STARTED, na drugih vstopnih točkah (lib/exe/ajax.php, css.php, ukazna vrstica) pa šele ob prvem dostopu do registra.

Klic Pomen
has('name') Ali storitev obstaja? Vedno vprašajte najprej – porabnik nikoli ne sme predpostaviti, da je ponudnik nameščen.
get('name') Pridobi storitev. Če je registrirana tovarna (factory), se ta izvede ob prvem get(), rezultat pa se zapomni.
register('name', $wert) Vpiše pripravljen primerek ali vrednost.
registerFactory('name', $fn) Ustvarjanje odloži, dokler storitev zares ni potrebna.

Prijava ne prepiše. Če dva vtičnika prijavita isto ime, obvelja prvi – namesto da bi eden drugega tiho izrinil. Druga prijava se konča z izjemo RuntimeException, razen če zamenjavo izrecno zahteva ($overwrite = true).

Trije dogodki

Dogodek $event->data Kdaj Čemu služi
WKCORE_REGISTER_SERVICES register (helper_plugin_wkcore) ob zagonu registra vpis storitev
WKCORE_READY register takoj zatem odziv, ko so vse storitve vpisane; storitve in kontekst so zdaj varno uporabni
WKCORE_CONTEXT_BUILD kontekst zahteve (dokuwiki\plugin\wkcore\Context) ob prvem get('core.context') pripenjanje podkontekstov (setExtension()), na primer projektnega konteksta iz wkdocore

Na vse tri se naročite z BEFORE; od 22. 6. 2026 so označeni kot stabilni: vsebina in pogodba se ne spremenita brez napovedanega prehoda. Seznam s pogodbo je v Events.php, diagnostika ga prikaže v živo.

Kdo kaj ponuja

Storitev Ponudnik Vsebina
core.info, core.ready, core.clock, core.context wkcore osnovne storitve
storage.sqlite Storage dostop do SQLite
dwdo.storage, dwdo.repos, dwdo.export Vtičnik DevOps Storage hramba podatkov DWDO
dwdo.context, dwdo.projects, dwdo.permissions, dwdo.hubs, dwdo.nav DevOps Core domena DWDO
source.providers Source Viewer ponudniki virov (page, media, git, ado)
git.runner Git utrjeno izvajanje programa git
ado.client Azure DevOps Connector odjemalec REST za ADO
ui.components, ui.icons, ui.tokens wkfluentui gradniki uporabniškega vmesnika

Dve obliki zapisa, en rezultat

Zgodovinsko so tri notacije rasle druga ob drugi ({{wk:name>…}}, <wk:name …/>, ~~TOKEN~~), in katero je vtičnik uporabljal, je bilo odvisno od tega, kdaj je nastal. Odločitev se glasi: oblika v slogu DokuWikija in oblika v slogu XML sta povsod enakovredni. Pisati je mogoče obe, obe dasta isti rezultat.

To obljubo je mogoče držati samo, če en razčlenjevalnik služi vsem vtičnikom – šest ročno napisanih parov se razide že pri prvem posebnem primeru (navpičnica v narekovajih, prazen atribut, večvrstična vrednost), in »enakovredno« bi tiho postalo »podobno«.

  • Oblika XML: en atribut na parameter. Za vrednost, ki v atributu ni več berljiva, podrejeni element z enakim imenom – podrejeni element ima prednost pred atributom, ker je bolj premišljena navedba.
  • Oblika DokuWiki: {{wk:name>subjekt|kljuc=vrednost|…}}. Prvi del nima ključa, ker je subjekt konstrukta (ID medija, ključ prevoda, ime izseka). Razčlenjevalnik ga vrne pod _; kateri lastni atribut je s tem mišljen, ve samo vtičnik.
Vnos XML je besedilo strani, zato nanj povsod, kjer je wiki mogoče urejati, lahko vpliva napadalec. Razčlenjevalnik vsak vnos z DOCTYPE ali ENTITY brez izjeme zavrne, izklopi dostop do omrežja in nastavi ničelni nalagalnik za zunanje entitete – zunanjih ali napihnjenih entitet tako ni mogoče nikoli razrešiti (XXE, »billion laughs«).
Porabniki dostopajo prek varovala class_exists(). Če wkcore manjka, vtičnik obdrži svojo prvotno notacijo in druge preprosto ne ponudi – druga oblika zapisa je dodatek, nikoli pogoj.

Diagnostika

?do=wkcore_diag prikaže prijavljene storitve in dogodke z njihovo pogodbo. Koristno je predvsem za preverjanje, ali je pričakovani ponudnik sploh registriran – najpogostejši razlog za nepričakovano skromen vmesnik je izklopljen vtičnik ponudnika, ne napaka v porabniku.


Nastavitve

Jih ni. Vtičnik namenoma nima nastavitev: register, ki bi ga bilo mogoče nastavljati, bi bil drugo mesto, na katerem se odloča o vedenju.

Podatki o paketu

Vtičnik: wkcore
Imenski prostor: lib/plugins/wkcore/
Avtor: Wolfgang van der Stille Wolfgang.van.der.Stille@gmail.com (The White Knight Labs)
Licenca: GPL 2

sl/wiki/dwe/wkcore/start.txt · Last modified: by Wolfgang van der Stille