Я разрабатываю SaaS приложение на Yii разбитое на
frontend и backend и еще несколько частей. Задача использовать на frontend'e Smarty, но сложность вот в чем:
Задача frontend'a — «выдавать» разные темы (themes) в зависимости от HTTP HOST. Каждый такой сайт — это отдельная папка, которая расположена в webroot.themes.http_host
На frontend'e фактически есть только один контроллер, в котором только одно действие, которое рендерит разные представления в зависимости от HTTP HOST и параметров GET
Мне нужно, используя
smarty-renderer рендерить эти самые представления, но необходимо, чтобы структура была такая:
В папке webroot.themes.http_host должен лежать файл «index.tpl» и папка «pages», в которой может находить неограниченное количество файлов.
Проблема в том, что при такой структуре мне приходится прописывать полный путь для файлов представлений в виде алиасов, в том числе, в *.tpl файлах при использовании {include file="..."}
Вопрос: как задать путь по умолчанию и где именно это сделать?
Сейчас в действии контроллера мне приходится прописывать путь вида:
$this->render('webroot.themes.'.Y::param('domain').'.index', array('page' => $page));
Это не критично при использовании в действиях, но при использовании {include file="..."} — проблема.
Я пробовал непосредственно перед вызовом $this->render() изменять значения: Yii::app()->viewPath и Yii::app()->viewRenderer->getSmarty()->setTemplateDir()
Но при этом вылетает Exception о невозможности найти файл представления.
Прошу помощи! Особенно, хотелось бы получить ответ от
samdark
P.S. Прописывать алиасы путей в смарти, в {include file="..."} нельзя потому, что приложение — Saas, и это будут делать конечные пользователи.