add published custom pages to sitemap
All checks were successful
deploy / deploy (push) Successful in 1m20s
All checks were successful
deploy / deploy (push) Successful in 1m20s
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
3a243151af
commit
22d7b0e92b
@ -146,7 +146,7 @@ Plans: [admin-redesign.md](docs/plans/admin-redesign.md) | [admin-font-loading.m
|
|||||||
| ~~97~~ | ~~Stage 1: data model + context — schema fields, split changeset, CRUD functions, cache~~ | — | 1.5h | done |
|
| ~~97~~ | ~~Stage 1: data model + context — schema fields, split changeset, CRUD functions, cache~~ | — | 1.5h | done |
|
||||||
| ~~98~~ | ~~Stage 2: routing + LiveView — `Shop.CustomPage`, catch-all route, 404 handling~~ | 97 | 1h | done |
|
| ~~98~~ | ~~Stage 2: routing + LiveView — `Shop.CustomPage`, catch-all route, 404 handling~~ | 97 | 1h | done |
|
||||||
| ~~99~~ | ~~Stage 3: admin CRUD — create/edit/delete pages, page settings, admin index~~ | 98 | 2.5h | done |
|
| ~~99~~ | ~~Stage 3: admin CRUD — create/edit/delete pages, page settings, admin index~~ | 98 | 2.5h | done |
|
||||||
| 100 | Stage 4: navigation management — data-driven nav, settings storage, admin editor | 99 | 3h | planned |
|
| ~~100~~ | ~~Stage 4: navigation management — data-driven nav, settings storage, admin editor~~ | 99 | 3h | done |
|
||||||
| 101 | Stage 5: SEO + redirects — sitemap, auto-redirect on slug change, draft/published | 100 | 1h | planned |
|
| 101 | Stage 5: SEO + redirects — sitemap, auto-redirect on slug change, draft/published | 100 | 1h | planned |
|
||||||
| 102 | Stage 6: polish — page templates, new block types, bulk ops | 101 | 3-4h | deferred |
|
| 102 | Stage 6: polish — page templates, new block types, bulk ops | 101 | 3-4h | deferred |
|
||||||
| | **Platform site** | | | |
|
| | **Platform site** | | | |
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
defmodule BerrypodWeb.SeoController do
|
defmodule BerrypodWeb.SeoController do
|
||||||
use BerrypodWeb, :controller
|
use BerrypodWeb, :controller
|
||||||
|
|
||||||
alias Berrypod.Products
|
alias Berrypod.{Pages, Products}
|
||||||
|
|
||||||
def robots(conn, _params) do
|
def robots(conn, _params) do
|
||||||
base = BerrypodWeb.Endpoint.url()
|
base = BerrypodWeb.Endpoint.url()
|
||||||
@ -48,7 +48,12 @@ defmodule BerrypodWeb.SeoController do
|
|||||||
{"/products/#{product.slug}", "weekly", "0.9"}
|
{"/products/#{product.slug}", "weekly", "0.9"}
|
||||||
end)
|
end)
|
||||||
|
|
||||||
all_pages = static_pages ++ category_pages ++ product_pages
|
custom_pages =
|
||||||
|
Pages.list_custom_pages()
|
||||||
|
|> Enum.filter(& &1.published)
|
||||||
|
|> Enum.map(fn page -> {"/#{page.slug}", "weekly", "0.6"} end)
|
||||||
|
|
||||||
|
all_pages = static_pages ++ category_pages ++ product_pages ++ custom_pages
|
||||||
|
|
||||||
entries =
|
entries =
|
||||||
Enum.map_join(all_pages, "\n", fn {path, changefreq, priority} ->
|
Enum.map_join(all_pages, "\n", fn {path, changefreq, priority} ->
|
||||||
|
|||||||
@ -4,7 +4,11 @@ defmodule BerrypodWeb.SeoControllerTest do
|
|||||||
import Berrypod.AccountsFixtures
|
import Berrypod.AccountsFixtures
|
||||||
import Berrypod.ProductsFixtures
|
import Berrypod.ProductsFixtures
|
||||||
|
|
||||||
|
alias Berrypod.Pages
|
||||||
|
alias Berrypod.Pages.PageCache
|
||||||
|
|
||||||
setup do
|
setup do
|
||||||
|
PageCache.invalidate_all()
|
||||||
user_fixture()
|
user_fixture()
|
||||||
{:ok, _} = Berrypod.Settings.set_site_live(true)
|
{:ok, _} = Berrypod.Settings.set_site_live(true)
|
||||||
:ok
|
:ok
|
||||||
@ -64,5 +68,19 @@ defmodule BerrypodWeb.SeoControllerTest do
|
|||||||
assert body =~ "<urlset"
|
assert body =~ "<urlset"
|
||||||
assert body =~ "</urlset>"
|
assert body =~ "</urlset>"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "includes published custom pages", %{conn: conn} do
|
||||||
|
{:ok, _} = Pages.create_custom_page(%{slug: "faq", title: "FAQ", published: true})
|
||||||
|
|
||||||
|
body = get(conn, "/sitemap.xml") |> response(200)
|
||||||
|
assert body =~ "/faq"
|
||||||
|
end
|
||||||
|
|
||||||
|
test "excludes unpublished custom pages", %{conn: conn} do
|
||||||
|
{:ok, _} = Pages.create_custom_page(%{slug: "draft", title: "Draft", published: false})
|
||||||
|
|
||||||
|
body = get(conn, "/sitemap.xml") |> response(200)
|
||||||
|
refute body =~ "/draft"
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user