2017-08-28 20 views
0

私は木材用の独自のライブラリ(小枝ファイル)を作成しました。私のライブラリにツリー構造があり、成長しているので、ツリーテンプレートからパスをインクルードするのは問題です。{%include "map-header"%}ファイルツリーのファイルをすべてインクルードする方法が必要です。優先権を与えることが可能である。テンプレートフォルダのサブディレクトリ内の再帰的な小枝テンプレートファイル

今はsubtirectoriesに小枝ファイルを検索するために、PHPの関数を使用し、そのようにそれらを含める

私の現在のPHP関数{%(「ブロック」、「マップ・ヘッダ」)%をfnを含ま}

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]; 
     } 
    } 

} 

リターン;私の解決策ザッツ }

+0

あなたはすでに[テンプレートの場所](https://timber.github.io/docs/guides/template-locations/)ガイドを試してみましたか?私にとっては、これがまさにあなたが探しているものであるようです。または私は何かを逃していますか? – Gchtr

+0

私はその能力について知っていますが、もしテンプレートが200〜300の異なるディレクトリを持っているのであれば、Template Locationsを使うのはいい考えですか? – 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; 
関連する問題