Рекурсивный поиск файла шаблона ветки в подкаталогах папки шаблона

Я сделал свою собственную библиотеку компонентов (файлы ветки) для древесины. Включить пути в шаблоны веток проблематично, потому что моя библиотека имеет древовидную структуру и растет. Я хочу, чтобы {% include "map-header" %} включал любой файл из дерева файлов, и я не знаю некоторых деревьев, он должен можно отдать приоритет.

Теперь я использую функцию php для поиска файлов веток в подкаталогах и включаю их вот так {% include fn('block','map-header') %}

Моя текущая функция php:

function block($name){

$locations = array(
FRONTPATH.'app/blocks/site.blocks/',
FRONTPATH.'app/blocks/common.blocks/',
FRONTPATH.'app/blocks/ok.blocks/',
FRONTPATH.'app/blocks/base.blocks/'
);

foreach ($locations as $location) {
    $path = realpath($location);

    foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)) as $filename)
    {
        $filename = str_replace(DIRECTORY_SEPARATOR,"/",$filename);

        if(preg_match('/\/'.$name.'.twig/',$filename)){

           return explode('/frontend/', $filename)[1];
        }
    }

}

возврат; }


person ijakparov    schedule 28.08.2017    source источник
comment
Вы уже ознакомились с руководством по расположению шаблонов? Мне кажется, что это именно то, что вы ищете. Или я что-то упускаю?   -  person Gchtr    schedule 30.08.2017
comment
Я знаю об этой возможности, спасибо, но если у меня есть 200-300 разных каталогов с шаблонами, стоит ли использовать расположение шаблонов?   -  person ijakparov    schedule 01.09.2017


Ответы (1)


это мое решение

$root= FRONTPATH.'app/blocks/';
$iter = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($root, RecursiveDirectoryIterator::SKIP_DOTS),
RecursiveIteratorIterator::SELF_FIRST,
RecursiveIteratorIterator::CATCH_GET_CHILD // Ignore "Permission denied"
);

$paths = array($root);
foreach ($iter as $path => $dir) {
 if ($dir->isDir() && strpos( $path, '.git' ) == false) {
    $paths[] = $path;
 }
}

Timber::$locations = $paths;
person ijakparov    schedule 02.09.2017