Резервный формат в рельсах - PullRequest
1 голос
/ 02 февраля 2010

для моих CM я хочу иметь возможность легко добавлять новые темы, моя идея состояла в том, чтобы просто добавить mime-тип для новой темы (чтобы app.theme1.erb работал).

но для 99% тем я не собираюсь менять взгляды, ну не все из них.

есть ли способ вернуть рельсы на html, если тематического представления нет?

Ответы [ 3 ]

0 голосов
/ 03 февраля 2010

Это зависит от того, сколько макетов вы хотите изменить с темами. Если вы правильно построите свой HTML, большинство вещей можно сделать с помощью CSS. (смена шрифтов, цветов, где появляются вещи)

Тогда достаточно просто добавить параметр темы для стилизации.

Если вы не хотите этого делать, вы всегда можете создать для него отдельный макет и назначить его в зависимости от переданных параметров (или даже установить его как переменную сеанса, чтобы его не было в URL).

В основном, для темы по умолчанию вы придерживаетесь layouts/application.erb, затем вы говорите layouts/theme1.erb, который вы затем назначаете методом

class ApplicationController 
   layout :decide_layout


  def decide_layout
    @session[:layout] || 'application'
  end
end

Настройка представлений возможна, просто выполнив что-то подобное в своих действиях:

def my_action
  render "my_action_#{@session[:layout]}" if @session[:layout]
end

Если @session[:layout] не задано, будет отображаться значение по умолчанию, в противном случае будет отображаться ваш тематический вид.

Конечно, если вы устанавливаете макет в зависимости от пользовательского ввода, обязательно выполните очистку и проверьте параметр макета перед этим.

0 голосов
/ 19 января 2011

У меня только что была такая же проблема с mobile_fu, который устанавливает формат на :mobile для мобильных запросов.

Оказывается, что если шаблон :action.:format.erb недоступен, Rails будет служить :action.rhtml заменой в любом формате.

Я не могу сказать, будет ли это работать для макетов, но, безусловно, работает для действий

0 голосов
/ 02 февраля 2010

Я довольно новичок в Rails, так что это может быть не идеальный ответ:

вы можете попробовать использовать параметры строки запроса как часть маршрута, как описано здесь: http://guides.rubyonrails.org/routing.html#querystring-parameters

так что в конечном итоге что-то вроде этого будет работать

map.connect ':theme/:controller/:action/:id' 

Насколько я понимаю, тема будет доступна как params [: theme] в контроллере. Если тема не указана, вам, вероятно, придется добавить другой маршрут, например

map.connect '/:controller/:action/:id' 

чтобы разобраться с этим делом.

В руководстве по i18n для локалей описано нечто подобное: http://guides.rubyonrails.org/i18n.html#setting-the-locale-from-the-url-params

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...