Brzi početak: prijava prve usluge i njezino dohvaćanje
Najkraći put od „dodatak je instaliran“ do „vlastita usluga stoji u registru i pronalazi se s drugog mjesta“. Tri koraka, otprilike petnaest minuta. Ova je stranica namijenjena programerima vlastitih dodataka.
Preduvjeti
wkcoreje instaliran i uključen u upravitelju proširenja.- Vlastiti dodatak s komponentom radnje (
action.php), ili mjesto na kojem je možete dodati. - PHP 8.2 ili noviji.
- Za korak 3 (provjeru): smijete uređivati
conf/local.php.
Korak 1: prijavite se na događaj registracije
WKCORE_REGISTER_SERVICES jedini je trenutak u kojem registar očekuje upis.
use dokuwiki\Extension\ActionPlugin; use dokuwiki\Extension\Event; use dokuwiki\Extension\EventHandler; class action_plugin_mojdodatak extends ActionPlugin { public function register(EventHandler $controller) { $controller->register_hook('WKCORE_REGISTER_SERVICES', 'BEFORE', $this, 'onRegisterServices'); } public function onRegisterServices(Event $event) { $registry = $event->data; $registry->register('mojdodatak.pozdrav', new Pozdrav()); } }
Odaberite oznaku koja počinje prefiksom vašeg dodatka. Oznake su ravan imenski prostor bez provjere sudara; prefiks je jedino što razdvaja dva dodatka.
Je li usluga skupa za izgradnju ili potrebna rijetko, prijavite umjesto nje tvornicu. Ona se izvodi pri prvom get() i nikada više:
$registry->registerFactory('mojdodatak.izvjestaj', static function () { return new SkupiIzvjestaj(); });
Korak 2: dohvatite je s drugog mjesta
Preko DokuWiki učitavača dodataka — ne uvozom razreda iz wkcore:
$core = plugin_load('helper', 'wkcore'); if (is_object($core) && method_exists($core, 'get')) { $pozdrav = $core->get('mojdodatak.pozdrav'); if ($pozdrav !== null) { echo $pozdrav->reci(); } }
Dvije provjere kućni su običaj i zaslužuju svoje mjesto: vaš se dodatak i dalje učitava kada wkcore nedostaje i i dalje radi kada očekivana usluga nikada nije prijavljena. Nijedan od ta dva slučaja ne opravdava prekid.
Korak 3: pogledajte što je prijavljeno
allowdebug nije uključena — tada javlja samo wkcore diagnostics require $conf['allowdebug'] = 1. Postavite u conf/local.php:$conf['allowdebug'] = 1;
i uklonite redak nakon provjere. Prikaz otkriva unutrašnjost instalacije.
Zatim otvorite /doku.php?do=wkcore_diag.
Provjera rezultata
Prikaz nabraja svaku prijavljenu oznaku, je li vrijednost ili tvornica te je li tvornica u ovom pozivu već razriješena.
mojdodatak.pozdravstoji ondje kao vrijednost.mojdodatak.izvjestajstoji ondje kao još nerazriješena tvornica. Pozoviteget('mojdodatak.izvjestaj')jednom i ponovno učitajte: sada je razriješena.
Upravo je zato prikaz tu. Krivo napisana oznaka nigdje nije pogreška — ona je null iz get(). Ovdje vidite kako se doista zove.