From 50a7b4c7c42cd9d2600682c1051eb0fb65bea9a1 Mon Sep 17 00:00:00 2001 From: Ryan Cramer Date: Thu, 18 Jan 2024 11:24:37 -0500 Subject: [PATCH] Additional update for custom page classes for repeater page items. processwire/processwire-requests#239 --- wire/core/Templates.php | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/wire/core/Templates.php b/wire/core/Templates.php index 443b86e6..fcb90a9c 100644 --- a/wire/core/Templates.php +++ b/wire/core/Templates.php @@ -872,11 +872,24 @@ class Templates extends WireSaveableItems { // determine if custom class available (3.0.152+) if($usePageClasses) { - // generate a CamelCase name + 'Page' from template name, i.e. 'blog-post' => 'BlogPostPage' - $className = ucwords(str_replace(array('-', '_', '.'), ' ', $template->name)); - $className = __NAMESPACE__ . "\\" . str_replace(' ', '', $className) . 'Page'; - if(class_exists($className) && wireInstanceOf($className, $corePageClass)) { - $pageClass = $className; + $customPageClass = ''; + // repeaters support a field-name based name strategy + /** @var RepeaterField $field */ + if(strpos($template->name, 'repeater_') === 0) { + $field = $this->wire()->fields->get(ltrim(strstr($template->name, '_'), '_')); + if($field && wireInstanceOf($field->type, 'FieldtypeRepeater')) { + $customPageClass = $field->type->getCustomPageClass($field); + } + } + if($customPageClass) { + $pageClass = $customPageClass; + } else { + // generate a CamelCase name + 'Page' from template name, i.e. 'blog-post' => 'BlogPostPage' + $className = ucwords(str_replace(array('-', '_', '.'), ' ', $template->name)); + $className = __NAMESPACE__ . "\\" . str_replace(' ', '', $className) . 'Page'; + if(class_exists($className) && wireInstanceOf($className, $corePageClass)) { + $pageClass = $className; + } } } @@ -1155,4 +1168,3 @@ class Templates extends WireSaveableItems { */ } -