Hi,
I’m trying to use routing and the virtual page system in order to display a local page with a different template and a different parent if a route match the desired pattern.
So far here is what I in my routes :
[
'pattern' => 'artists/(:any)/highlights/(:all)',
'language' => '*',
'action' => function ($language, $artistId, $pageId) {
$page = page($pageId) ?? null;
if (!$page) {
return site()->visit(site()->errorPage());
}
$pageDatas = $page->toArray();
$pageDatas['parent'] = site()->find("artists/$artist/highlights");
$pageDatas['template'] = 'artist-'.$page->intendedTemplate();
return site()->visit(new Page($pageDatas));
}
],
With this routing, if I have a route like /artists/artist-1/highlights/articles/article-1
, my aim is to transform the exiting page /articles/article-1
into a virtual page, to change its template (from article
to artist-article
) and to change it’s parent so I can use my virtual page to generate a breadcrumb as if it was a descendent of /artists/artist-1/highlights
.
It was working well so far but now I have a local page which has files, and it generates this ErrorException : Illegal string offset 'collection'
which happen when the new Page()
is created. I guess it is related to the fact the virtual page files somehow doesn’t exist but I’m not sure…
Any hints or advices on how to better virtually clone a page from an existing one (which has files) and change its parent and template?
Thanks!