Следующее работает только при использовании FilesystemLoader
- код написан для twig 2.x
и не тестируется
регистр twig
с Filesystemloader
<?php
require_once '/path/to/vendor/autoload.php';
$loader = new \Twig\Loader\FilesystemLoader('/path/to/templates');
$twig = new \Twig\Environment($loader);
$twig->addFunction(new \Twig\TwigFunction('get_folder', function (\Twig\Environment $twig, $folder) {
foreach($twig->getLoader()->getPaths() as $view_path) {
if (is_dir($view_path.'/'.$folder)) {
$location = $view_path.'/'.$folder;
break;
}
}
if ($location === null) return [];
$it = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($location, \RecursiveDirectoryIterator::SKIP_DOTS),\RecursiveIteratorIterator::SELF_FIRST);
$templates = [];
foreach($it as $path) $templates[] = str_replace($view_path.'/', '', $path);
return $templates;
}, ['needs_environment' => true, ]);
Использовать новую функцию внутри twig
{% for template in get_folder('patterns') %}
{% include template %}
{% endfor %}