Итерация по файлам с помощью Twig - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть цикл for, написанный на PHP, который для каждого файла .html в папке 'Patterns' захватывает html-информацию и отображает ее, а также помещает html-содержимое на страницу для справки.PHP-код был взят из Styleguide Generator, найденного здесь:

https://github.com/adactio/Pattern-Primer/blob/master/index.php

Как мне взять приведенный ниже код и преобразовать его во что-нибудь, что может использовать движок шаблонов Twig?

<?php
$files = array();
$handle=opendir('patterns');
while (false !== ($file = readdir($handle))):
    if(substr($file, -5) == '.html'):
        $files[] = $file;
    endif;
endwhile;
sort($files);
foreach ($files as $file):
    echo '<div class="pattern">';
    echo '<div class="display">';
    include('patterns/'.$file);
    echo '</div>';
    echo '<div class="source">';
    echo '<textarea rows="6" cols="30">';
    echo htmlspecialchars(file_get_contents('patterns/'.$file));
    echo '</textarea>';
    echo '<p><a href="patterns/'.$file.'">'.$file.'</a></p>';
    echo '</div>';
    echo '</div>';
endforeach;
?>

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

Следующее работает только при использовании FilesystemLoader - код написан для twig 2.x и не тестируется


регистр twig с Filesystemloader

<?php
    require_once '/path/to/vendor/autoload.php';

    $loader = new \Twig\Loader\FilesystemLoader('/path/to/templates');
    $twig = new \Twig\Environment($loader);

    $twig->addFunction(new \Twig\TwigFunction('get_folder', function (\Twig\Environment $twig, $folder) {
            foreach($twig->getLoader()->getPaths() as $view_path) {
                if (is_dir($view_path.'/'.$folder)) {
                    $location = $view_path.'/'.$folder;
                    break;
                }
            }
            if ($location === null) return [];
            $it = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($location, \RecursiveDirectoryIterator::SKIP_DOTS),\RecursiveIteratorIterator::SELF_FIRST);

            $templates = [];
            foreach($it as $path) $templates[] = str_replace($view_path.'/', '', $path);
            return $templates;
    }, ['needs_environment' => true, ]);

Использовать новую функцию внутри twig

{% for template in get_folder('patterns') %}
    {% include template %}
{% endfor %}
0 голосов
/ 26 февраля 2019

Я думаю, что вы ищете, введение / учебник по симфонической ветке: https://symfony.com/doc/current/templating.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...