Выделите активную страницу, когда дети генерируются плагином
Я нахожусь в процессе написания плагина для моего сайта. У него есть файл для файла верхнего уровня, но все дочерние страницы генерируются самим плагином. Это в основном потому, что плагин имеет дело с базой данных.
В настоящее время моя веб-страница настроена как mysite.com/plugin_page
, Эта страница плагина на самом деле имеет связанный .md
файл. Плагин может генерировать дочерние страницы, такие как mysite.com/plugin_page/view/$
а также mysite.com/plugin_page/new
,
Когда я смотрю mysite.com/plugin_page
правильная страница помечается как активная, поэтому она подсвечивается, как и следовало ожидать в панели навигации. Однако после перехода на дочернюю страницу ни одна страница не выделяется.
я хочу mysite.com/plugin_page/view/$
выделить его родительскую страницу, как в записи в блоге blog
выделены в примере темы.
1 ответ
Покопавшись в исходном коде Grav, я нашел решение этой проблемы. Это включает в себя пару шагов.
1. Маршрут должен быть установлен
Если маршрут страницы не установлен, страница никогда не вернет true, когда active()
называется. Поскольку ни одна страница никогда не возвращает true, выделение никогда не появляется.
Пример кода:
$uri = $this->grav['uri'];
$page = $this->grav['page'];
...
$page->route($uri->path());
2. Страница должна быть назначена соответствующей родительской странице
Если сгенерированная страница не является родительской страницей, вам нужно назначить ее соответствующему родителю.
Пример кода:
$pages = $this->grav['pages'];
$parent_route = $this->config->get('plugins.myplugin.parent_route');
$page->parent($pages->find($parent_route));