diff --git a/src/Http/Controllers/Web/RouterController.php b/src/Http/Controllers/Web/RouterController.php index d09389955..079acb5a2 100755 --- a/src/Http/Controllers/Web/RouterController.php +++ b/src/Http/Controllers/Web/RouterController.php @@ -6,6 +6,7 @@ use Fusion\Services\Routers\EntryRouter; use Fusion\Services\Routers\HomepageRouter; use Fusion\Services\Routers\SingleRouter; +use Fusion\Services\Routers\TaxonomyRouter; use Illuminate\Http\Request; class RouterController extends Controller @@ -27,6 +28,7 @@ public function handle(Request $request) HomepageRouter::class, EntryRouter::class, SingleRouter::class, + TaxonomyRouter::class, ]; foreach ($routers as $router) { diff --git a/src/Services/Routers/TaxonomyRouter.php b/src/Services/Routers/TaxonomyRouter.php new file mode 100644 index 000000000..7d43fa182 --- /dev/null +++ b/src/Services/Routers/TaxonomyRouter.php @@ -0,0 +1,57 @@ +', '') + ->where('template', '<>', '') + ->get(); + + foreach ($collections as $taxon) { + $found = $this->matchRoute($taxon->route, $request); + + if ($found === false) { + continue; + } + + // Eager load our relatable fields + $relationships = []; + + foreach ($taxon->blueprint->fields as $field) { + $fieldtype = fieldtypes()->get($field->type); + + if ($fieldtype->hasRelationship()) { + $relationships[] = $field->handle; + } + } + + $model = (new TaxonomyBuilder($taxon->handle))->make(); + $page = $model->with($relationships)->where('slug', $found->parameter('slug'))->first(); + + if (is_null($page)) { + continue; + } + + if (!$page->status) { + if (Gate::denies('access.controlPanel') || !request()->has('preview')) { + continue; + } + } + + $data = $this->bindRouteData($taxon->route, $request, [ + 'taxon' => $taxon, + 'page' => $page, + ]); + + return view($taxon->template, $data); + } + } +}