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
Hitri začetek: prijava prve storitve in njena uporaba – najkrajša pot do prvega rezultata, v treh korakih.
Oglejte si delujoče storitve → Poiščite ponudnika → Registrirajte lastno storitev
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.
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«).
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