From 504a29f496263e164d99d88d098abfee752bd302 Mon Sep 17 00:00:00 2001 From: Matias Griese Date: Wed, 23 Dec 2020 14:09:55 +0200 Subject: [PATCH] Added support for relative paths in `PageObject::getLevelListing()` [#3110] --- CHANGELOG.md | 1 + .../Common/Flex/Types/Pages/PageObject.php | 20 ++++++++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 041af2dd8..b84dca835 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ 1. [](#improved) * Make it possible to use an absolute path when loading a blueprint * Make serialize methods final in `ContentBlock`, `AbstractFile`, `FormTrait`, `ObjectCollectionTrait` and `ObjectTrait` + * Added support for relative paths in `PageObject::getLevelListing()` [#3110](https://github.com/getgrav/grav/issues/3110) 1. [](#bugfix) * Fixed port issue with `system.custom_base_url` * Hide errors with `exif_read_data` in `ImageFile` diff --git a/system/src/Grav/Common/Flex/Types/Pages/PageObject.php b/system/src/Grav/Common/Flex/Types/Pages/PageObject.php index 6ad5d3e93..c88eb8f82 100644 --- a/system/src/Grav/Common/Flex/Types/Pages/PageObject.php +++ b/system/src/Grav/Common/Flex/Types/Pages/PageObject.php @@ -439,8 +439,26 @@ class PageObject extends FlexPageObject public function getLevelListing(array $options): array { $index = $this->getFlexDirectory()->getIndex(); + if (!is_callable([$index, 'getLevelListing'])) { + return []; + } - return method_exists($index, 'getLevelListing') ? $index->getLevelListing($options) : []; + // Deal with relative paths. + $initial = $options['initial'] ?? null; + $var = $initial ? 'leaf_route' : 'route'; + $route = $options[$var] ?? ''; + if ($route !== '' && !str_starts_with($route, '/')) { + $filesystem = Filesystem::getInstance(); + + $route = "/{$this->getKey()}/{$route}"; + $route = $filesystem->normalize($route); + + $options[$var] = $route; + } + + [$status, $message, $response,] = $index->getLevelListing($options); + + return [$status, $message, $response, $options[$var] ?? null]; } /**