Разрешение пользователям выбрать пользовательскую тему в направляющих

Я хочу дать моим пользователям способность выбрать, как их общедоступная страница отображена от 5 различных разметок. Я предполагаю, что буду нуждаться в 5 различных файлах CSS согласно расположению и затем должен передать это в stylesheet_link_tag

Я знаю только, как сделать это использование если затем операторы. Я не предполагаю, что это - лучший способ. Какая-либо справка... также это могло быть сделано?

Спасибо

6
задан sent-hil 6 March 2010 в 08:14
поделиться

2 ответа

Вы должны сохранить макет, выбранный пользователем, в переменной сеанса (самый простой, но теряется, когда пользователь очищает файлы cookie или использует другой компьютер), или в вашей базе данных.

Допустим, у таблиц стилей пять имен, каждое из которых соответствует цвету:

blue_stylesheet.css
green_stylesheet.css
red_stylesheet.css
orange_stylesheet.css
white_stylesheet.css

Поместите эти файлы в public / stylesheets.

Сохраните выбранную пользователем таблицу стилей в переменной session [: style] следующим образом:

session[:style] = 'green'

Это значение будет сохраняться до тех пор, пока пользователь не очистит свои файлы cookie.

Создайте файл application.erb в ваших макетах, если он еще не существует.Код в этом файле будет отображаться для каждого шаблона на вашем сайте. Он должен содержать строку вида <% = yield%> . В этот файл поместите следующее:

<% = stylesheet_link_tag session [: style] + '_ stylesheet'%>

Вот и все!

Удачи!

11
ответ дан 8 December 2019 в 16:01
поделиться

Сначала попробуйте добавить поле «тема» в модель пользователя (используя миграции).

Затем добавьте несколько ссылок в представление (настройки пользователя):

link_to 'Изменить на зеленую тему',: controller => "user",: action => "set_theme",: id => "green"

Контроллер:

def set_theme
  # don't forget to check, is there a theme with such params
  current_user.update_attributes :theme => params[:id]
end

Контроллер общедоступного профиля:

def public_profile
  @theme = 'default'
  user = User.find(params[:user_id]) # profile's owner
  @theme ||= user.theme # overriding default theme to custom one
end

макет:

<%=stylesheet_link_tag @theme %>
4
ответ дан 8 December 2019 в 16:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: