# Phoenix 1.6 Page Title

I made a custom `awesome_title_tag` view helper function because I wanted to support both controller views and live views.

## View

In `lib/mnishiguchi_web/views/layout_view.ex`

```elixir
defmodule MnishiguchiWeb.LayoutView do
  use MnishiguchiWeb, :view

  @site_name "Mnishiguchi"
  def site_name(), do: @site_name

  def awesome_title_tag(conn, assigns) do
    live_title_tag(page_title(conn, assigns) || @site_name, suffix: " · #{@site_name}")
  end

  # live view
  defp page_title(_conn, %{page_title: page_title} = _assigns) do
    page_title
  end

  # controller view
  defp page_title(conn, assigns) do
    if function_exported?(view_module(conn), :page_title, 2) do
      view_module(conn).page_title(view_template(conn), assigns)
    else
      @site_name
    end
  end
end
```

## Template

In `/lib/mnishiguchi_web/templates/layout/root.html.leex`

```diff
   <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
   <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
   <%= csrf_meta_tag() %>
-  <%= live_title_tag assigns[:page_title] || "Home", suffix: " · Masatoshi Nishiguchi" %>
+  <%= awesome_title_tag(@conn, assigns) %>
```

## Resources

Because of breaking changes between Phoenix 1.4 and 1.5, many examples out there did not work with Phoenix 1.5.

Here are some resources I referenced:

  - [Page title via live view route that’s compatible with existing code in regular views?](https://elixirforum.com/t/page-title-via-live-view-route-that-s-compatible-with-existing-code-in-regular-views/21559/6?u=mnishiguchi)
  - [@view_template meaning changed in phoenix 1.5](https://elixirforum.com/t/view-template-meaning-changed-in-phoenix-1-5/31087/5?u=mnishiguchi)
  - [Phoenix Live View 0.10.0 Backwards incompatible changes](https://github.com/phoenixframework/phoenix_live_view/blob/master/CHANGELOG.md#backwards-incompatible-changes-6)

That's it.



