Can't get draft subpage with findPageOrDraft()

Hi,

I tried to get a subpage with findPageOrDraft() like this:

$site->findPageOrDraft('sydney/proposal-a');

But it return NULL

If I use

$site->draft('sydney/proposal-a');

It works!

findPageOrDraft() is not supposed to return a page or a draft?

Looks like findPageOrDraft only works for the direct children, not with a path.

So if you have a draft with the slug proposal-a in content/_drafts,

dump($site->findPageOrDraft('proposal-a'));

Kirby will find it.

But the doc says findPageOrDraft() takes a “path” in parameter:

$site->findPageOrDraft(string $path)

and to get a direct child there is already the method childrenAndDrafts()

My “proposal-a” subpage is in content/1_sydney/_draft so

$site->findPageOrDraft('proposal-a')

does not works :-/

This is the method:

 public function findPageOrDraft(string $path)
    {
        return $this->children()->find($path) ?? $this->drafts()->find($path);
    }

So it searches in the children, not in the tree.

Ok, thanks @texnixe

Have to agree with @gillesvauvarin though, the docs should not call the argument the path but the uid (?) instead. I was just confused about the same thing, because the docs call it path, when clearly this does not take a full path.

@texnixe this just took me +1h haha. because the docs are not clear here. can confirm it’s only working with direct children. i guess it would be good if they were updated?

:sun_with_face:

Well, but path is correct, because you can pass a path:

$site->findPageOrDraft('notes/exploring-the-universe')

But a complete path still returns NULL if the page is a draft. :confused: Maybe this is a bug? @texnixe

What you can do

  dump($kirby->page('notes/in-the-jungle-of-sumatra'));
1 Like

Some years later and I just wasted quite some time with the latest Kirby release (5.0.4) until I stumbled upon this thread – every attempt to pass a path to $site->findPageOrDraft didn’t work for me…

Yes, I agree, the behavior seems to be inconsistent somehow. If you pass a path to a published page, it works as expected, but not if the page is a draft.

Wondering if this is intended or a bug. It works if you pass a slug to a draft, but not a path.

This is a known issue. $site->findPageOrDraft() does not work for nested drafts · Issue #6339 · getkirby/kirby · GitHub

1 Like