Подход / шаблон Phalcon Design

Привет всем и спасибо, что нашли время, чтобы прочитать это.

Я уже давно использую 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-документ без возможности добавления блоков в основной шаблон.


person Shadows Voices    schedule 15.04.2014    source источник


Ответы (2)


Видимо такой функции напрямую нет.

Однако вы можете использовать массив и перебирать эту область в конце основного шаблона и динамически включать любой переданный туда файл.

person Shadows Voices    schedule 17.04.2014