public function formatComponentTemplateFiles(Component $component, $renderMode = ITemplateLocator::DEFAULT_COMPONENT_RENDER_MODE) { $presenter = $component->getPresenter(); $name = $presenter->getName(); $_presenter = substr($name, strrpos(':' . $name, ':')); $componentShortName = $component->getReflection()->getShortName(); $variants = $this->getComponentVariants($componentShortName, $renderMode); $dir = dirname($presenter->getReflection()->getFileName()); $dir = is_dir("{$dir}/templates") ? $dir : dirname($dir); $this->appendPrefixed($list, "{$dir}/templates/{$_presenter}/components", $variants); do { $this->appendPrefixed($list, "{$dir}/templates/components", $variants); $dir = dirname($dir); } while ($dir && ($name = substr($name, 0, strrpos($name, ':')))); $dir = dirname($component->getReflection()->getFileName()); $this->appendPrefixed($list, "{$dir}/templates", $variants); $this->appendPrefixed($list, "{$dir}", $variants); return $list; }
/** * @param \Nette\ComponentModel\Component $control * @return string[] */ public function formatTemplateFiles(Component $control) { $list = array(); $name = $control->getName(); if (!$control instanceof Presenter) { $files = $this->formatTemplateFiles($control->presenter); foreach ($files as $file) { if (is_file($file)) { break; } } $layouts = $this->formatLayoutTemplateFiles($control->presenter); foreach ($layouts as $layout) { if (is_file($layout)) { break; } } foreach (array($file, $layout) as $dir) { do { $dir = dirname($dir); $list[] = sprintf('%s/components/%s.latte', $dir, $name); } while ($dir && substr($dir, strrpos($dir, '/') + 1) !== 'templates'); } $list[] = dirname($control->getReflection()->getFileName()) . '/' . $control->getReflection()->getShortName() . '.latte'; return $list; } $presenter = substr($name, strrpos(':' . $name, ':')); $absolutePresenter = str_replace(':', '/', $name); foreach ($this->templateDirs as $dir) { $list[] = sprintf('%s/%s/%s.latte', $dir, $absolutePresenter, $control->view); $list[] = sprintf('%s/%s.%s.latte', $dir, $absolutePresenter, $control->view); } $dir = dirname($control->getReflection()->getFileName()); foreach (array($dir . '/templates') as $dir) { $list[] = sprintf('%s/%s/%s.latte', $dir, $presenter, $control->view); $list[] = sprintf('%s/%s.%s.latte', $dir, $presenter, $control->view); } return $list; }
public function formatComponentTemplateFiles(Component $component, $renderMode = ITemplateLocator::DEFAULT_COMPONENT_RENDER_MODE) { $hash = $component->getPresenter()->getName() . '|' . $component->getReflection()->getShortName() . '|' . $renderMode; if (NULL === $this->componentFilesCache[$hash]) { $templateLocator = $this->templateLocator; $onlyExistingFiles = $this->onlyExistingFiles; return $this->componentFilesCache->save($hash, function () use($component, $renderMode, $templateLocator, $onlyExistingFiles) { $list = $templateLocator->formatComponentTemplateFiles($component, $renderMode); if ($onlyExistingFiles) { $list = array_filter($list, 'is_file'); } return $list; }); } return $this->componentFilesCache[$hash]; }
/** * Note: Component class name suffix Component is stripped. * * Presenter templates are added per module * <directory>/[Name[Module]/][presenters/][<Presenter>/]templates/components/<Name>/<view>.(latte|phtml) * <directory>/[Name[Module]/][presenters/][<Presenter>/]templates/components/<Name>.<view>.(latte|phtml) * <directory>/[Name[Module]/][presenters/][<Presenter>/]templates/components/<Name>/default.(latte|phtml) * <directory>/[Name[Module]/][presenters/][<Presenter>/]templates/components/<Name>.default.(latte|phtml) * <directory>/[Name[Module]/][presenters/][<Presenter>/]templates/components/<Name>.(latte|phtml) * * Last component directory is added * <component directory>/[templates/]<Name>/<view>.(latte|phtml) * <component directory>/[templates/]<Name>.<view>.(latte|phtml) * <component directory>/[templates/]<Name>/default.(latte|phtml) * <component directory>/[templates/]<Name>.default.(latte|phtml) * <component directory>/[templates/]<Name>.(latte|phtml) * * @inherit */ public function formatComponentTemplateFiles(Component $component, $renderMode = ITemplateLocator::DEFAULT_COMPONENT_RENDER_MODE) { $presenter = $component->getPresenter(); /** @var \Nette\Application\UI\Presenter $presenter */ $name = $presenter->getName(); $_presenter = substr($name, strrpos(':' . $name, ':')); $componentShortName = $component->getReflection()->getShortName(); if (substr($componentShortName, -9) === 'Component') { $componentShortName = substr($componentShortName, 0, -9); } $variants = $this->getComponentVariants($componentShortName, $renderMode); $directories = $this->getAdjustedDirectories($presenter, $moduleDepth); $list = array(); foreach ($directories as $dir) { $this->appendPrefixed($list, "{$dir}/presenters/templates/{$_presenter}/components", $variants); $this->appendPrefixed($list, "{$dir}/templates/{$_presenter}/components", $variants); $this->appendPrefixed($list, "{$dir}/presenters/templates/components", $variants); $this->appendPrefixed($list, "{$dir}/templates/components", $variants); } do { foreach ($directories as $dir) { $this->appendPrefixed($list, "{$dir}/templates/components", $variants); if (basename($dir) === 'presenters') { $this->appendPrefixed($list, dirname($dir) . '/templates/components', $variants); } } } while ($moduleDepth-- && ($directories = array_map('dirname', $directories))); $dir = dirname($component->getReflection()->getFileName()); $this->appendPrefixed($list, "{$dir}/templates", $variants); $this->appendPrefixed($list, "{$dir}", $variants); return $list; }