jstone
Hello, Im having issue, having multiple layouts.
- Layouts for Admin (System Access / Portal / Data Management)
- Layouts for Login / Register
I create new plug for router just to handle different layouts for login
pipeline :browser do
plug :accepts, ["html"]
plug :fetch_session
plug :fetch_live_flash
plug :put_root_layout, html: {WebApp.Layouts, :root}
plug :protect_from_forgery
plug :put_secure_browser_headers
plug :fetch_current_user
end
pipeline :login_page do
plug :accepts, ["html"]
plug :fetch_session
plug :fetch_live_flash
plug :put_root_layout, html: {WebApp.AuthenticationLayouts, :root}
plug :protect_from_forgery
plug :put_secure_browser_headers
plug :fetch_current_user
end
And I copy the original layouts and make the layouts components as below :
This will make whenever I visit link /users/log_in (Using Original Phx Auth) it will render root file from folder components auth_layouts.
However when I use code <%= @inner_content %> inside root file auth_layouts/root.html.heex it will render page from file layouts/app.html.heex instead of auth_layouts/app.html.heex. Please suggest/assist where can I change to make it render auth_layouts/app.html.heex. Thanks. Any response is highly appreciated
side note : Sorry if the question kinda noob, this is my first project using Phx Framework. Excited but can’t find the solution.
Trending in Questions
Other Trending Topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #blog-post
- #phoenix_html
- #iex
- #graphql
- #ai
- #genstage
- #elixirconf-us
- #websockets
- #supervisor
- #advent-of-code
- #distillery
- #processes
- #api
- #forms
- #metaprogramming
- #security
- #hex











First 10 of 17 Posts
sbuttgereit
I’m not the best person to answer this, but one thing that immediately comes to mind is have you checked your
web_app.exfile (making assumptions about your naming based on what I see in your code example) and what it may/may not do with layouts? By default there’s some layout assignment happening there and my recollection was that it could interfere with the plug based stuff.I use different layouts as well and rather than trying to control layouts via plugs, I created entries in my equivalent to
web_app.exto deal with the layouts and other kinds of setup as appropriate to the type of form.Again… I could be way off-base and there are others here that can probably be more helpful…
jstone
Hello,
Yes I already tried that solution, however this only applicable for 1 layouts, I’m not sure how to register multiple layouts. Here what I do
Change to
This will successfully render
auth_layouts/app.html.heex. However what If I wanna use the original layouts?sodapopcan
Ya, this is what I do.
I don’t have multiple directories for layouts since there is only one layout per different section but I have;
Then:
You can do the same with the
controllerhelper.I’m sure you can make this work with directories if you use a string instead of an atom.
sbuttgereit
[I had posted my code, but @sodapopcan did so before me and mine had nothing new to offer on that response… can’t delete my comment so… clearing it.]
sodapopcan
Ha, sorry, didn’t realize you were replying!!
LostKobrakai
You can return a layout from
mount/3like so:{:ok, socket, layout: {module, atom}}. You can also uselive_sessionto change the layout for a bunch of liveviews. No need to drop down to the macros to do that.jstone
Thanks @sodapopcan This give me the idea. I can create a custom function, and on a specific / any live view that I need to be different layouts, I can use that custom function. Thanks.
Below are my solution. Create new custom function on
web_app.exand on LiveView use
use WebApp, :live_view_logininstead of using useWebApp, :live_view_login(the original)Thanks guys @sodapopcan @sbuttgereit @LostKobrakai , Really appreciate the help. Resolved my issue.
sodapopcan
Ya, I remember I was doing with this then switched to the macro helper version, I can’t remember quite why. I do add some extra helpers in the
adminroutethough those could probably be moved to hooks← nm, that doesn’t make any sense, lol. Ya, I think it was just because I had additional helpers but that was so long ago now that it is something I just do. I could re-evaluate.sodapopcan
I’d give heed to @LostKobrakai’s answer, though: you can also pass a layout to live_session.
jstone
Thanks, This also will allow to override the layouts