Packages
phoenix_kit
1.7.18
1.7.209
1.7.208
1.7.207
1.7.206
1.7.205
1.7.204
1.7.203
1.7.202
1.7.201
1.7.200
1.7.199
1.7.198
1.7.197
1.7.196
1.7.194
1.7.193
1.7.192
1.7.191
1.7.190
1.7.189
1.7.187
1.7.186
1.7.185
1.7.184
1.7.183
1.7.182
1.7.181
1.7.180
1.7.179
1.7.178
1.7.177
1.7.176
1.7.175
1.7.174
1.7.173
1.7.172
1.7.171
1.7.170
1.7.169
1.7.168
1.7.167
1.7.166
1.7.165
1.7.164
1.7.162
1.7.161
1.7.160
1.7.159
1.7.157
1.7.156
1.7.155
1.7.154
1.7.153
1.7.152
1.7.151
1.7.150
1.7.149
1.7.146
1.7.145
1.7.144
1.7.143
1.7.138
1.7.133
1.7.132
1.7.131
1.7.130
1.7.128
1.7.126
1.7.125
1.7.121
1.7.120
1.7.119
1.7.118
1.7.117
1.7.116
1.7.115
1.7.114
1.7.113
1.7.112
1.7.111
1.7.110
1.7.109
1.7.108
1.7.107
1.7.106
1.7.105
1.7.104
1.7.103
1.7.102
1.7.101
1.7.100
1.7.99
1.7.98
1.7.97
1.7.96
1.7.95
1.7.94
1.7.93
1.7.92
1.7.91
1.7.90
1.7.89
1.7.88
1.7.87
1.7.86
1.7.85
1.7.84
1.7.83
1.7.82
1.7.81
1.7.80
1.7.79
1.7.78
1.7.77
1.7.76
1.7.75
1.7.74
1.7.71
1.7.70
1.7.69
1.7.66
1.7.65
1.7.64
1.7.63
1.7.62
1.7.61
1.7.59
1.7.58
1.7.57
1.7.56
1.7.55
1.7.54
1.7.53
1.7.52
1.7.51
1.7.49
1.7.44
1.7.43
1.7.42
1.7.41
1.7.39
1.7.38
1.7.37
1.7.36
1.7.34
1.7.33
1.7.31
1.7.30
1.7.29
1.7.28
1.7.27
1.7.26
1.7.25
1.7.24
1.7.23
1.7.22
1.7.21
1.7.20
1.7.19
1.7.18
1.7.17
1.7.16
1.7.15
1.7.14
1.7.13
1.7.12
1.7.11
1.7.10
1.7.9
1.7.8
1.7.7
1.7.6
1.7.5
1.7.4
1.7.3
1.7.2
1.7.1
1.7.0
1.6.20
1.6.19
1.6.18
1.6.17
1.6.16
1.6.15
1.6.14
1.6.13
1.6.12
1.6.11
1.6.10
1.6.9
1.6.8
1.6.7
1.6.6
1.6.5
1.6.4
1.6.3
1.5.2
1.5.1
1.5.0
1.4.9
1.4.8
1.4.7
1.4.6
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.2
1.3.1
1.3.0
1.2.10
1.2.9
1.2.8
1.2.7
1.2.5
1.2.4
1.2.2
1.2.1
1.2.0
1.1.0
1.0.0
A foundation for building Elixir Phoenix apps — SaaS, social networks, ERP systems, marketplaces, and more
Current section
Files
Jump to
Current section
Files
lib/phoenix_kit_web/live/modules/pages/settings.html.heex
<PhoenixKitWeb.Components.LayoutWrapper.app_layout
flash={@flash}
phoenix_kit_current_scope={assigns[:phoenix_kit_current_scope]}
page_title={@page_title}
current_path={@current_path}
project_title={@project_title}
current_locale={@current_locale}
>
<div class="container mx-auto px-4 py-6 space-y-6">
<div class="flex items-center justify-between">
<.link
navigate={PhoenixKit.Utils.Routes.path("/admin/settings", locale: @current_locale)}
class="btn btn-outline btn-sm"
>
<.icon name="hero-arrow-left" class="w-4 h-4 mr-1" />
{gettext("Back to Settings")}
</.link>
<div class="text-right">
<p class="text-sm text-base-content/70">{gettext("Project")}</p>
<p class="text-lg font-semibold">{@project_title}</p>
</div>
</div>
<header class="text-center space-y-2">
<p class="text-sm uppercase tracking-wide text-base-content/60">
{gettext("Pages Module")}
</p>
<h1 class="text-4xl font-bold text-base-content">{gettext("Pages Settings")}</h1>
<p class="text-base text-base-content/70 max-w-2xl mx-auto">
{gettext(
"Control how unpublished routes are handled and manage the markdown file used for the public-facing 404 page."
)}
</p>
</header>
<div class="grid gap-6 lg:grid-cols-3">
<div class="card bg-base-100 shadow-xl border border-base-200 lg:col-span-2">
<div class="card-body space-y-6">
<div class="flex flex-col md:flex-row md:items-center md:justify-between gap-4">
<div>
<h2 class="text-2xl font-semibold text-base-content">
{gettext("Custom 404 Handling")}
</h2>
<p class="text-sm text-base-content/70">
{gettext(
"Enable this to intercept unknown routes and render a published markdown file from the Pages module."
)}
</p>
<%= unless @pages_enabled do %>
<p class="text-warning text-sm flex items-center gap-2 mt-2">
<.icon name="hero-exclamation-circle" class="w-4 h-4" />
{gettext("Enable the Pages module in Modules > Pages to activate this feature.")}
</p>
<% end %>
</div>
<button
type="button"
class={[
"btn btn-sm",
if(@pages_handle_not_found and @pages_enabled,
do: "btn-outline",
else: "btn-primary"
),
unless(@pages_enabled, do: "btn-disabled")
]}
phx-click="toggle_pages_handle_404"
disabled={!@pages_enabled}
>
<.icon
name={if(@pages_handle_not_found, do: "hero-pause", else: "hero-play")}
class="w-4 h-4 mr-1"
/>
{if @pages_handle_not_found,
do: gettext("Disable Pages 404"),
else: gettext("Enable Pages 404")}
</button>
</div>
<div class="grid md:grid-cols-2 gap-6">
<div class="space-y-3">
<div class="flex flex-wrap items-center gap-2">
<span class={[
"badge",
if(@pages_handle_not_found, do: "badge-success", else: "badge-neutral")
]}>
{if @pages_handle_not_found,
do: gettext("Pages 404 Active"),
else: gettext("Pages 404 Disabled")}
</span>
<span class={[
"badge",
if(@pages_not_found_file_exists, do: "badge-info", else: "badge-warning")
]}>
{if @pages_not_found_file_exists,
do: gettext("File Found"),
else: gettext("File Missing")}
</span>
</div>
<div class="bg-base-200 rounded-lg p-4 text-sm text-base-content/80">
<p class="font-semibold text-base-content/90">{gettext("Current file")}</p>
<code class="font-mono text-xs break-all">{@pages_not_found_file_path}</code>
</div>
<div class="flex flex-wrap gap-2">
<button
type="button"
class="btn btn-sm btn-outline"
phx-click="pages_create_default_404"
>
<.icon name="hero-arrow-path" class="w-4 h-4 mr-1" /> {gettext(
"Generate Default File"
)}
</button>
<%= if @pages_not_found_file_exists do %>
<.link
navigate={
PhoenixKit.Utils.Routes.path(
"/admin/pages/edit?path=#{URI.encode_www_form(@pages_not_found_file_path)}",
locale: @current_locale
)
}
class="btn btn-sm btn-secondary"
>
<.icon name="hero-pencil-square" class="w-4 h-4 mr-1" /> {gettext("Edit File")}
</.link>
<% end %>
</div>
</div>
<div>
<.form for={@pages_form} id="pages-404-form" phx-submit="save_pages_not_found">
<.input
field={@pages_form[:not_found_slug]}
type="text"
label={gettext("404 Page Path")}
placeholder="/404"
/>
<p class="text-xs text-base-content/70 mt-1">
{gettext(
"Enter the slug without the .md extension. Files are stored under priv/static/pages."
)}
</p>
<div class="flex gap-2 mt-4">
<button class="btn btn-primary btn-sm">
<.icon name="hero-check" class="w-4 h-4 mr-1" /> {gettext("Save Path")}
</button>
</div>
</.form>
</div>
</div>
</div>
</div>
<aside class="card bg-base-100 shadow-xl border border-base-200">
<div class="card-body space-y-4">
<h3 class="text-xl font-semibold text-base-content">{gettext("Quick Actions")}</h3>
<ul class="text-sm text-base-content/70 space-y-3">
<li>
• {gettext("Duplicate the 404 file from the Pages list for testing variations.")}
</li>
<li>• {gettext("Link to your help center so visitors can find assistance fast.")}</li>
<li>• {gettext("Use metadata fields on the 404 page to track content changes.")}</li>
<li>
• {gettext("Update the slug when launching new marketing campaigns or funnels.")}
</li>
</ul>
</div>
</aside>
</div>
</div>
</PhoenixKitWeb.Components.LayoutWrapper.app_layout>