Привет всем и спасибо, что нашли время, чтобы прочитать это.
Я уже давно использую Phalcon для высокопроизводительного JSON/XML API. Серверная часть, управляющая этим приложением, была/все еще управляется устаревшей версией symfony, но она будет заменена Phalcon и механизмом шаблонов Volt.
Теперь моя проблема заключается в следующем:
Представьте себе базовое приложение и базовый шаблон, а приложение имеет модульную структуру. Большинство модулей будут разрабатываться разными командами, но все они должны быть хорошо интегрированы, что с точки зрения логики программы не является проблемой.
Но представьте себе следующее: у вас есть простая страница, какие-то формы, заголовок, навигация и т. д. Теперь кто-то хочет добавить модуль, который вставляет блок шаблона в нижний колонтитул для какой-либо цели. Например, добавление TagCloud (в целях SEO) в нижний колонтитул.
Идея здесь в том, что у плагина есть возможность редактировать любые файлы шаблонов, кроме тех, которые он приносит сам.
Как этого добиться, не меняя базовые шаблоны после первоначальной разработки?
Идея состоит в том, чтобы подключиться к событию, для простоты назовем его TEMPLATE_RENDER. TEMPLATE_RENDER запущен, каждый слушатель, зарегистрированный для него, теперь имеет возможность добавлять в шаблон такие вещи, как дополнительные блоки и т. д. И все это без необходимости вручную изменять основные шаблоны.
Было бы достаточно, если бы был способ просто добавить кучу файлов шаблонов вместе в Volt и вывести скомпилированный результат.
РЕДАКТИРОВАТЬ:
Хорошо, после некоторых размышлений, что я ищу в Volt, так это:
Compiler#compileMultipleFiles(String... files);
Таким образом, его можно использовать следующим образом:
$compiler->compileMultipleFiles('/path/to/template1','/path/to/template2', ...);
Теоретически это не сделает ничего другого, кроме как взять все в файле1, файле2,..., файлеN и поместить его в один большой файл, а затем скомпилировать его как единый шаблон. Если это пока невозможно, я мог бы эмулировать эту функцию, просто объединив содержимое каждого файла в один файл или переменную кеша и используя compileString(), но это нарушит любые относительные пути в шаблоне, что будет проблемой.
Я также мог бы скомпилировать каждый шаблон вручную, но тогда я бы получил чистый html-документ без возможности добавления блоков в основной шаблон.