Как мне предоставить отдельные макеты для разных типов пользователей в шаблонах NVelocity?

Я переделываю шаблоны для нашего интернет-магазина (используя Castle Monorail с движком представления NVelocity), но хочу предоставить некоторым пользователям старый макет.

Я начал с добавления переменной в PropertyBag, которая определяет версию, которую должен получить пользователь, и установил макет на BaseLayout.vm, который выглядит следующим образом:

#if($StoreVersion == 2)
    #parse("VersionTwo/DefaultLayout.vm")
#else
    #parse('VersionOne/DefaultLayout.vm')
#end

Это нормально работает для макета, и я технически могу использовать этот подход в каждом файле шаблона, но это кажется немного затянутым. Есть ли лучший способ механизировать это?


person Septih    schedule 28.11.2011    source источник
comment
Это все содержимое BaseLayout.vm или только его часть?   -  person Mauricio Scheffer    schedule 28.11.2011
comment
Это весь файл. Идея заключалась бы в том, чтобы файл, представляющий действие, просто перенаправлял на шаблон конкретной версии. Мне просто любопытно, есть ли лучший способ перенаправить на шаблон для конкретной версии, чем этот.   -  person Septih    schedule 28.11.2011
comment
Почему бы просто не установить свойство LayoutName в контроллере?   -  person Mauricio Scheffer    schedule 29.11.2011
comment
Я думал, что искал это раньше, но, должно быть, пропустил. Я могу использовать это и переопределить PreSendView в абстрактном контроллере, и это выполнит свою работу. Спасибо.   -  person Septih    schedule 30.11.2011


Ответы (2)


Вместо того, чтобы иметь макет, который условно «пересылает» на другие макеты, вы можете поместить условие в код и установить свойство LayoutName в контроллере.

person Mauricio Scheffer    schedule 30.11.2011
comment
Для всех, кто заинтересован, я сделал вышеупомянутое для макетов и переопределил метод Process на контроллере, чтобы изменить SelectedViewName для действий. - person Septih; 30.11.2011

Я бы создал фильтр контроллера и переопределил бы отображаемое имя макета в соответствии с вашей логикой.

person theBOSS    schedule 12.12.2011