kbee

kbee

Hello community,

I’m new to phoenix and struggling to implement a feature that would allow my users to apply a theme of their choice (e.g. animals, cars, nature).

Each of these themes has its own assets and I’m using put_layout to assign the chosen layout but struggling to render the views according to the chosen theme

My controller looks like this

defmodule Client.PageController do
  use Client, :controller
  
  def index(conn, _params) do
    theme = get_user_theme(conn)

    conn
    |> put_layout(theme)
    |> render('index.html')
  end
end 

My templates directory

templates\
 -> layouts
     - app.html.eex
     - themeA.html.eex
     - themeB.html.eex
 -> pages
     - index.html.eex
 -> themeA
     - index.html.eex
 -> themeB
     - index.html.eex

how do i dynamically choose between themeA/index.html.eex and themeB/index.html.eex without getting a template not found error

Showing Posts 1 to 4

kokolegorille

kokolegorille

Hello and welcome,

I think it should be…

|> put_layout(theme)

as theme is your variable.

kbee

kbee OP

thanks for catching the type @kokolegorille. The layout part works ok. it’s dynamically rendering the template I’m having trouble with. See the example below

defmodule Client.PageController do
  use Client, :controller
  
  def index(conn, _params) do
    theme = get_user_theme(conn)

    conn
    |> put_layout(theme)
    |> render('#{theme}/index.html')
  end
end 
kokolegorille

kokolegorille

If You are using PageController, You are using PageView, which will look into template/page.

Try to put themes folder inside page folder.

kbee

kbee OP

@kokolegorille thanks for your answer. It set me back on track. I was able to get it to to render using by moving and renaming themeA\index.html.eex to page\themeA.index.html.

I wanted to be able to neatly put organise themes in folders and I found this topic https://forum.elixirforum.com/t/how-to-render-a-template-inside-a-web-templates-folder-subfolder/1404/6?u=kbee and changed my view to

defmodule MyApp.PageView do
  use Phoenix.View, root: "lib/myapp/templates", pattern: "**/*"
end

and now I can do

defmodule MyApp.PageController do
  use MyApp, :controller
  
  def index(conn, _params) do
    theme = get_user_theme(conn)

    conn
    |> put_layout(theme)
    |> render('#{theme}/index.html')
  end
end 
— All posts loaded —

Where Next? Top

Trending in Questions Top

RSP87
I’m working on a project that simulates the bumbl example in the programming phoenix book. It acts almost like an email client. We have a...
New
kszambelanczyk
Hello! Could someone please give me a help/sample code, how to delete a file from s3 using waffle/waffle_ecto from Phoenix app. I creat...
New
RemyXRenard
I’m seeing that a list inside a Kino.DataTable will be interpreted as a charlist, even if the Kino.configure() is set to charlists: :as_l...
New
velrest
So my question is quite simple and i have found no conclusive answer on forum, google or AI. Should we use :erlang.float for Integer to ...
New
samoloth
Hi, I’ve just set up an application with ash_authentication. There is only magic link strategy for now, so there is no confirmation add o...
New
FlyingNoodle
If a change or preparation module uses Ash.Changeset.get_argument/2 or Ash.Query.get_argument/2 (or any of the other get_argument functio...
New
ryanwinchester
apply_graft/2 doesn’t rewrite an add_many sub-workflow’s deps on an add step. Grafted jobs cancel with “upstream job was deleted” Version...
New

Other Trending Topics Top

webofbits
Aludel 0.7.0 is released :tada: Since 0.5.0, Aludel has grown into a much more complete LLM evaluation toolkit for Elixir and Phoenix app...
New
mudasobwa
I am happy to introduce the very α version of the new programming language compiled to BEAM. Welcome Cure. It has literally three kille...
New
garrison
Hobbes is a low-level distributed database for the Elixir programming language. Hobbes provides a simple, safe, and scalable storage lay...
New
marciok
Hi there! We created Gust: A task orchestrator inspired by Airflow. For those who have never heard about Aiflow, it’s a Python-based wor...
New
jimsynz
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
Dmk
Xamal is a deployment tool for Elixir apps that deploys native releases to bare metal servers over SSH. It’s a port of GitHub - basecamp/...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews