Skip to content

Commit 4fba54f

Browse files
committed
Fix Craft element route matching & autoload entry & category
1 parent ad2453a commit 4fba54f

File tree

2 files changed

+30
-11
lines changed

2 files changed

+30
-11
lines changed

src/Plugin.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
use craft\base\Element;
99
use craft\base\Model;
1010
use craft\base\Plugin as BasePlugin;
11+
use craft\elements\Entry;
12+
use craft\elements\Category;
1113
use craft\events\RegisterTemplateRootsEvent;
1214
use craft\events\RegisterUrlRulesEvent;
1315
use craft\events\SetElementRouteEvent;
@@ -203,6 +205,12 @@ function (RegisterTemplateRootsEvent $event) {
203205
Element::class,
204206
Element::EVENT_SET_ROUTE,
205207
function (SetElementRouteEvent $event) {
208+
$element = $event->sender;
209+
if (!$element) return;
210+
211+
$isCraftElement = $element instanceof Entry || $element instanceof Category;
212+
if (!$isCraftElement) return;
213+
206214
$event->route = 'inertia/base/index';
207215

208216
// Explicitly tell the element that a route has been set,

src/controllers/BaseController.php

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
use Craft;
66
use craft\web\UrlManager;
77
use Illuminate\Support\Arr;
8+
use craft\elements\Entry;
9+
use craft\elements\Category;
810
use craft\services\Elements;
911

1012
use yii\web\NotFoundHttpException;
@@ -51,7 +53,11 @@ public function actionIndex(): array|string
5153
// We're probably validating an element in a form
5254
// And need to give to give it the user to get validation errors
5355
$element = Craft::$container->get('currentElement');
54-
$templateVariables['element'] = $element;
56+
if ($element instanceof Entry) {
57+
$templateVariables['entry'] = $element;
58+
} else if ($element instanceof Category) {
59+
$templateVariables['category'] = $element;
60+
}
5561
}
5662

5763
try {
@@ -294,30 +300,35 @@ private function extractUriParameters($uri, $uriFormat)
294300

295301
private function handleElementRequest($element, $uri)
296302
{
297-
$section = $element->getSection();
303+
$sectionOrGroup = $element instanceof Entry ? $element->getSection() : $element->getGroup();
298304

299305
$site = Craft::$app->getSites()->getCurrentSite();
300306
$siteID = $site->id;
301307

302-
/** @var array $sectionSiteSettings */
303-
$sectionSiteSettings = $section->getSiteSettings();
304-
$sectionSiteSetting = null;
305-
foreach ($sectionSiteSettings as $setting) {
308+
/** @var array $siteSettings */
309+
$siteSettings = $sectionOrGroup->getSiteSettings();
310+
$siteSetting = null;
311+
foreach ($siteSettings as $setting) {
306312
if ($setting->siteId === $siteID) {
307-
$sectionSiteSetting = $setting;
313+
$siteSetting = $setting;
308314
break;
309315
}
310316
}
311317

312-
if ($sectionSiteSetting === null) {
318+
if ($siteSetting === null) {
313319
throw new \Exception('No section site setting found for the current site.');
314320
}
315321

316-
$uriFormat = $sectionSiteSetting->uriFormat;
322+
$uriFormat = $siteSetting->uriFormat;
317323

318-
$specifiedTemplate = $sectionSiteSetting->template;
324+
$specifiedTemplate = $siteSetting->template;
319325
$templateVariables = $this->extractUriParameters($uri, $uriFormat);
320-
$templateVariables['element'] = $element;
326+
327+
if ($element instanceof Entry) {
328+
$templateVariables['entry'] = $element;
329+
} elseif ($element instanceof Category) {
330+
$templateVariables['category'] = $element;
331+
}
321332

322333
$matchesTwigTemplate = Craft::$app->getView()->doesTemplateExist($specifiedTemplate);
323334
return [$matchesTwigTemplate, $specifiedTemplate, $templateVariables];

0 commit comments

Comments
 (0)