模板文件夹子目录中的递归树枝模板文件搜索

问题描述:

我已经为木材制作了自己的组件(树枝文件)库。在树枝模板中包含路径是一个问题,因为我的库具有树结构并且增长,我希望包含这种方式{%include“map-header”%}文件树中的任何文件,并且我要树某些树,它应该有可能给予优先权。模板文件夹子目录中的递归树枝模板文件搜索

现在我用PHP函数来搜索subtirectories树枝文件,包括他们一样,{%包括FN( '块', '地图头')%}

我目前的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]; 
     } 
    } 

} 

return; }

+0

你已经尝试了[模板位置(https://timber.github.io/docs/guides/template-locations/)指南?对我来说,这似乎就是你正在寻找的东西。或者我错过了什么? – Gchtr

+0

我知道thanx的这种能力,但是如果我有200-300个带模板的不同目录,使用模板位置是个好主意吗? – ijakparov

那是我的解决方案

$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;