Skip to Content

Extending

Add new items, commands, groups, or actions.

Add Command

Create class in classes/local/wayfinder/commands/. Extend items\command:

namespace local_wayfinder\local\wayfinder\commands\myfeature; use local_wayfinder\local\wayfinder\items\command; use local_wayfinder\local\wayfinder\actions\redirect; class mycommand extends command { public function __construct(renderer $renderer) { parent::__construct($renderer, 'My Command', 'Does something cool'); $this->set_keywords(['cool', 'thing']); $this->set_action(new redirect('https://moodle.local/my/cool/page.php')); } public function check_access(): bool { return has_capability('some/capability', $this->get_context()); } }

Register in renderer.php render_root().

Add Group

Create class in classes/local/wayfinder/groups/. Extend items\group:

namespace local_wayfinder\local\wayfinder\groups\mygroup; use local_wayfinder\local\wayfinder\items\group; class mygroup extends group { public function __construct(renderer $renderer) { $items = []; // Build items from some data source. $items[] = new \local_wayfinder\local\wayfinder\commands\myfeature\mycommand($renderer); parent::__construct($renderer, 'My Group', $items); } }

Add Action

Create class in classes/local/wayfinder/actions/. Extend action:

namespace local_wayfinder\local\wayfinder\actions\myaction; use local_wayfinder\local\wayfinder\action; class myaction extends action { public function __construct( private readonly string $url, ) {} protected static function get_id(): string { return 'myaction'; } public function jsonSerialize(): array { return parent::jsonSerialize() + ['url' => $this->url]; } }

Then handle in React onCommandSelected in root.tsx.

Item Types Reference

ClassExtendsUse when
commanditemSingle selectable action
pagecommandCommand with sub-items (drill-down)
groupitemNamed section of items
linkcommandQuick link to URL
navnodecommandWrap Moodle navigation_node
separatoritemVisual divider