Static blog with front page summary
Goal: have a personal blog, and try out another point in the 'modular app design with elixir' space. Designing OTP systems with elixir had some interesting ideas.
This commit is contained in:
@@ -0,0 +1,89 @@
|
||||
defmodule FirehoseWeb.Router do
|
||||
@moduledoc """
|
||||
Example router showing how to integrate Blogex.
|
||||
|
||||
You have two options for mounting blogs:
|
||||
|
||||
## Option A: Plug Router (JSON API / feeds only)
|
||||
|
||||
Uses `Blogex.Router` directly — great for headless / API usage:
|
||||
|
||||
scope "/blog" do
|
||||
pipe_through :browser
|
||||
forward "/engineering", Blogex.Router, blog: Firehose.EngineeringBlog
|
||||
forward "/releases", Blogex.Router, blog: Firehose.ReleaseNotes
|
||||
end
|
||||
|
||||
## Option B: LiveView (full UI, recommended)
|
||||
|
||||
Uses your own LiveViews with Blogex components — full control over layout:
|
||||
|
||||
scope "/blog", MyAppWeb do
|
||||
pipe_through :browser
|
||||
|
||||
live "/engineering", BlogLive.Index, :index,
|
||||
metadata: %{blog: :engineering}
|
||||
|
||||
live "/engineering/:slug", BlogLive.Show, :show,
|
||||
metadata: %{blog: :engineering}
|
||||
|
||||
live "/releases", BlogLive.Index, :index,
|
||||
metadata: %{blog: :release_notes}
|
||||
|
||||
live "/releases/:slug", BlogLive.Show, :show,
|
||||
metadata: %{blog: :release_notes}
|
||||
end
|
||||
|
||||
# Still mount the Plug router for feeds
|
||||
scope "/blog" do
|
||||
forward "/engineering", Blogex.Router, blog: Firehose.EngineeringBlog
|
||||
forward "/releases", Blogex.Router, blog: Firehose.ReleaseNotes
|
||||
end
|
||||
|
||||
## Option C: Mixed
|
||||
|
||||
Use LiveView for the HTML pages but let Blogex.Router handle
|
||||
feeds and the JSON API. Just make sure the LiveView routes are
|
||||
defined first so they take priority.
|
||||
"""
|
||||
|
||||
use Phoenix.Router
|
||||
|
||||
import Phoenix.LiveView.Router
|
||||
|
||||
pipeline :browser do
|
||||
plug :accepts, ["html"]
|
||||
plug :fetch_session
|
||||
plug :fetch_live_flash
|
||||
plug :put_root_layout, html: {FirehoseWeb.Layouts, :root}
|
||||
plug :protect_from_forgery
|
||||
plug :put_secure_browser_headers
|
||||
end
|
||||
|
||||
# -- Option B: LiveView routes (recommended) --
|
||||
|
||||
scope "/blog", MyAppWeb do
|
||||
pipe_through :browser
|
||||
|
||||
# Engineering blog
|
||||
live "/engineering", BlogLive.Index, :index
|
||||
live "/engineering/tag/:tag", BlogLive.Index, :tag
|
||||
live "/engineering/:slug", BlogLive.Show, :show
|
||||
|
||||
# Release notes
|
||||
live "/releases", BlogLive.Index, :index
|
||||
live "/releases/tag/:tag", BlogLive.Index, :tag
|
||||
live "/releases/:slug", BlogLive.Show, :show
|
||||
end
|
||||
|
||||
# Feeds (served by Blogex.Router as Plug)
|
||||
scope "/blog" do
|
||||
forward "/engineering", Blogex.Router, blog: Firehose.EngineeringBlog
|
||||
forward "/releases", Blogex.Router, blog: Firehose.ReleaseNotes
|
||||
end
|
||||
|
||||
# Sitemap
|
||||
scope "/" do
|
||||
get "/sitemap.xml", FirehoseWeb.SitemapController, :index
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user