* * @noinspection PhpUnused, * PhpMissingParamTypeInspection, PhpMissingReturnTypeInspection */ // must be run within Dokuwiki use dokuwiki\File\PageResolver; if(!defined('DOKU_INC')) { die(); } class syntax_plugin_breadcrumbdeluxe extends DokuWiki_Syntax_Plugin { final public function getType(): string { return 'substition'; } final public function getPType(): string { return 'normal'; } final public function getSort(): string { return 1; } final public function handle($match, $state, $pos, Doku_Handler $handler): bool { return true; } final public function render($format, Doku_Renderer $renderer, $data): void { } /** * Hierarchical breadcrumbs (Deluxe)) {copied from original dokuwiki and modified} * * This code was suggested as replacement for the usual breadcrumbs. * It only makes sense with a deep site structure. * * @param ?string $separator Separator between entries * @param bool $return return or print * @return bool|string */ final public function tpl_youarehere(?string $separator = null, bool $return = false) { global $conf; global $ID; global $lang; // check if enabled if ($this->isBreadcrumbDisabled()) { return false; } // set default if ($separator === null) { $separator = ' ยป '; } $out = ''; $parts = explode(':', $ID); $count = count($parts); // display label (you are here) for breadcrumb $out .= '' . $lang['youarehere'] . ' '; // always print the startpage $out .= '' . tpl_pagelink(':' . ucfirst($conf['start']), null, true) . ''; // print intermediate namespace links $part = ''; for ($i = 0; $i < $count - 1; $i++) { $part .= $parts[$i] . ':'; $page = $part; if ($page == $conf['start']) continue; // Skip startpage // output $out .= $separator . tpl_pagelink($page, p_get_first_heading($parts[$i]), true); } // print current page, skipping start page, skipping for namespace index if (isset($page)) { $page = (new PageResolver('root'))->resolveId($page); if ($page == $part . $parts[$i]) { if ($return) return $out; echo $out; return true; } } $page = $part . $parts[$i]; if ($page == $conf['start']) { if ($return) return $out; echo $out; return true; } $out .= $separator; $out .= tpl_pagelink($page, p_get_first_heading($page), true); if ($return) { return $out; } echo $out; return (bool)$out; } private function isBreadcrumbDisabled(): bool { global $conf; return (bool) !$conf['youarehere']; } }