Шаблон Twig не включая блок?

Я надеюсь начать работу с Twig, но у меня настоящая головная боль, заставляющая {% block %} работать вообще - я чувствую, что должно быть что-то очень очевидное, чего мне не хватает.

Мой загрузчик index.php выглядит следующим образом:

<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);

require_once( "Twig/Autoloader.inc.php" );

Twig_Autoloader::register();

$twig = new Twig_Environment( new Twig_Loader_Filesystem("templates"));

$vars = array (
    "user" => array(
        "name" => "Joe Bloggs"
        ),
    "title" => "My website"
);

$tpl = $twig->loadTemplate("index.html");
echo $tpl->render($vars);

?>

Упрощенная версия index.html в /templates выглядит так:

<!doctype html>
<html>
<body>
Hello World!
{% block navigation %}Test{% endblock %}
</body>
</html>

И навигация.html в /templates выглядит примерно так:

{% extends "index.html" %}
{% block navigation %}
<!-- Navigation -->
<nav>
    Some navigation
</nav>
{% endblock %}

Насколько я понял, это должен быть базовый рабочий пример функции блоков. Другие аспекты Twig, кажется, работают нормально, и об ошибках не сообщается. Действительно, на странице успешно печатается "Тест".

Должен ли я где-то явно указывать на файл navigation.html или Twig автоматически загружает все файлы в /templates папка?

1 ответ

Решение

Ошибка: вы отображаете свой индексный шаблон вместо навигационного.

В шаблоне индекса блок навигации содержит "Тест", поэтому ваш вывод правильный. Если вы создадите файл navigation.html, вы получите HTML-контент из index.html, а блок навигации - из шаблона навигации (единственное, что он переопределяет).

Вам всегда нужно визуализировать шаблон, который вы хотите вывести. Один может быть расширен многими (например, ваш макет может быть расширен всеми шаблонами ваших действий).

Другие вопросы по тегам