2017-07-12 6 views
1

Ich bin mit zwei Zweig-Vorlage Pfade in dieser Frage gefunden How do I specify two locations for Twig templates?Wie Weg der Zweig-Vorlage erhalten

$template = isset($config->template) ? $config->template : 'default'; 
$templates_dir = $root . 'templates' . DIRECTORY_SEPARATOR; 
if (isset($config->template) && $config->template != 'default') { 
    $template = array($templates_dir . $config->template, $templates_dir . 'default'); 
} else { 
    $template = $templates_dir . 'default'; 
} 

$loader = new Twig_Loader_Filesystem($template); 

und ich habe Code wie folgt:

function render($request, $page, $data = array()) { 
    global $twig, $config; 
    $template = isset($config->template) ? $config->template : 'default'; 
    $base = baseURI($request); 
    return $twig->render($page, array_merge(array(
     "path" => $base . '/templates/' . $template, 
     "root" => $base 
    ), $data)); 
} 

und was ich brauche, ist zu get Pfad der Vorlage, so kann ich es als 'path' Variable verwenden (so kann ich den aktuellen Pfad für Assets wie "{{path}}/img/foo.png" verwenden).

Antwort

1

von Quellcode der Suche fand ich Lösung in einem der Testdatei:

$loader->getSourceContext($page)->getPath(); 

also, wenn Sie haben wollen Apth Sie Template-Namen entfernen müssen:

$page = 'admin.html'; 
$path = $loader->getSourceContext($page)->getPath(); 
$path = preg_replace('%/'.$page.'$%', '', $path); 

und wenn Sie möchten, relativen Pfad erhalten können Sie:

preg_replace("%" . __DIR__ . "%", "", $path); 

Sie dies in einer Funktion wickeln können:

function template_path($page) { 
    global $loader; 
    $path = preg_replace("%" . __DIR__ . "%", "", $loader->getSourceContext($page)->getPath()); 
    return preg_replace('%/'.$page.'$%', '', $path); 
} 
Verwandte Themen