2017-08-28 2 views
0

Ich habe meine eigene Bibliothek von Komponenten (Zweig-Dateien) für Holz. Es ist ein Problem, Pfade in Zweigvorlagen einzubinden, weil meine Bibliothek eine Baumstruktur hat und wächst. Ich möchte die Art und Weise, wie diese Datei enthält, in die Dateistruktur aufnehmen möglich sein, eine Priorität zu geben.Rekursive Zweig Vorlage Datei suchen in Unterverzeichnissen der Vorlage Ordner

Jetzt benutze ich PHP-Funktion Zweig Dateien in subtirectories zu suchen und zu schließen, dass sie wie {% fn include ('block', 'map-Header')%}

Meine aktuelle PHP-Funktion:

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

} 

Rückkehr; }

+0

Haben Sie schon die [Template Standorte] (https://timber.github.io/docs/guides/template-locations/) Führungs ausprobieren? Für mich scheint es genau das zu sein, wonach Sie suchen. Oder fehlt mir etwas? – Gchtr

+0

Ich weiß über diese Fähigkeit danke, aber wenn ich 200-300 verschiedene Verzeichnisse mit Vorlagen habe, ist es eine gute Idee, Vorlage Standorte zu verwenden? – ijakparov

Antwort

0

Das ist meine Lösung

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