2015-07-20 8 views
9

Chciałbym ustawić znacznik title w szablonie aplikacji, z widoku/kontrolki potomnej w Phoenix.Ustawianie właściwości w widoku/szablonie nadrzędnym w Phoenix

Znacznik title jest wewnątrz szablonu web/templates/layout/app.html.eex, ale mam ArticlesController który renderuje do <%= @inner %> Jadąc z Rails użyję połączenia yield, ale nie można znaleźć jego odpowiednik w Phoenix.

Jaki jest właściwy sposób przekazywania właściwości do nadrzędnego szablonu/widoku z jego potomka?

+3

Ten post obejmuje dokładnie to: http://sevenseacat.net/2015/06/01/custom_page_titles_in_phoenix.html –

+0

Dzięki José! To jest bardzo pomocne! –

+0

3 opcje przedstawione tutaj: http://cloudless.studio/articles/27-implementing-page-specific-titles-in-phoenix –

Odpowiedz

8

Masz kilka opcji tutaj. Zakładam, że chcesz mieć coś w rodzaju szyn w rozmiarze content_for.

Jedną z opcji jest użycie render_existing/3http://hexdocs.pm/phoenix/0.14.0/Phoenix.View.html#render_existing/3

Innym elastycznym sposobem jest użycie wtyczki:

defmodule MyApp.Plug.PageTitle do 

    def init(default), do: default 

    def call(conn, opts) do 
    assign(conn, :page_title, Keyword.get(opts, :title) 
    end 

end 

Następnie w kontrolerze można zrobić

defmodule FooController do 
    use MyApp.Web, :model 
    plug MyApp.Plug.PageTitle, title: "Foo Title" 
end 

defmodule BarController do 
    use MyApp.Web, :controller 
    plug MyApp.Plug.PageTitle, title: "Bar Title" 
end 

A w szablonie;

<head> 
    <title><%= assigns[:page_title] || "Default Title" %></title> 
</head> 

Tutaj używamy assigns zamiast @page_title ponieważ @page_title podniesie, jeśli wartość nie jest ustawiona.

+1

Dzięki Gazler! Udało mi się rozwiązać to za pomocą rekomendacji do szablonu i dodając 'page_title:" tytuł "' do wywołania 'render' w akcji kontrolera. –

Powiązane problemy