addPath($custom); } $default = Path::join($themesPath, $code, 'html'); if (is_dir($default)) { $this->addPath($default); } } // Package-shared fallback tier, lowest priority (matching production // TwigLoader's ordering) - renders whatever `default/shared/html` // provides for either area's templates that don't override it. $shared = Path::join($themesPath, 'default', 'shared', 'html'); if (is_dir($shared)) { $this->addPath($shared); } $finder = new Finder(); $finder->directories()->in(PATH_MODS)->depth('== 2')->ignoreDotFiles(true)->name(['admin', 'client', 'email']); foreach ($finder as $dir) { $parent = Path::getDirectory($dir->getPathName()); if (basename($parent) === 'templates') { $grandparent = Path::getDirectory($parent); $module = basename($grandparent); $area = basename($dir->getPathName()); // FilesystemLoader namespaces can't contain '/' (Twig splits // `@ns/template` on the first '/'). Use an underscore join. $this->addPath($dir->getPathName(), $module . '_' . $area); } } } }