2017-08-28 99 views
0

我已經爲木材製作了自己的組件(樹枝文件)庫。在樹枝模板中包含路徑是一個問題,因爲我的庫具有樹結構並且增長,我希望包含這種方式{%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

回答

0

那是我的解決方案

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