Ok, I've been looking at how the Data Manager plugin does this, and the Plugin Tutorial, but I still end up at a 404 when accessing the route within the admin. I have a pluginname/blueprints/pluginname.yaml, as well as a pluginname/blueprints/pluginname.html.twig, and run the following in pluginname/pluginname.php:
<?php
namespace Grav\Plugin;
use Grav\Common\Data;
use Grav\Common\Plugin;
use Grav\Common\Grav;
use Grav\Common\Uri;
use Grav\Common\Taxonomy;
use Grav\Common\Page\Page;
use RocketTheme\Toolbox\Event\Event;
class PluginNamePlugin extends Plugin {
protected $route = 'pluginname';
public static function getSubscribedEvents() {
return [
'onPageInitialized' => ['onPageInitialized', 0],
'onGetPageTemplates' => ['onGetPageTemplates', 0],
'onAdminMenu' => ['onAdminMenu', 0],
'onTwigTemplatePaths' => ['onTwigTemplatePaths', 0]
];
}
public function onPageInitialized(Event $event) {
if ($this->isAdmin()) {
$assets = $this->grav['assets'];
$pluginsobject = (array) $this->config->get('plugins');
if (isset($pluginsobject['pluginname'])) {
if ($pluginsobject['pluginname']['enabled'] && $pluginsobject['pluginname']['current']) {
$assets->addCss('plugin://pluginname/styles/' . $pluginsobject['pluginname']['current'] . '.css', 1);
$assets->addCss('plugin://pluginname/styles/radioimage.css', 1);
}
}
}
}
public function onTwigTemplatePaths() {
if ($this->isAdmin()) {
$this->grav['twig']->twig_paths[] = __DIR__ . '/templates';
}
}
public function onGetPageTemplates($event) {
if ($this->isAdmin()) {
$types = $event->types;
$locator = Grav::instance()['locator'];
$types->scanBlueprints($locator->findResources('plugin://' . $this->name . '/blueprints'));
$types->scanTemplates($locator->findResources('plugin://' . $this->name . '/templates'));
}
}
public function onAdminMenu() {
if ($this->isAdmin()) {
$this->grav['twig']->plugins_hooked_nav['pluginname'] = ['route' => $this->route, 'icon' => 'fa-database'];
}
}
}
To my eyes this should load any blueprints and templates, as well as create the menu-icon and route for /admin/pluginname/. Am I missing some integral part that registers the route?