2015-07-20 16 views
9

Phoenix'te bir alt görünüm/denetleyiciden uygulama şablonunda title etiketini ayarlamak istiyorum.Phoenix'te ana görünümde/şablonda özellikleri ayarlama

title etiketi web/templates/layout/app.html.eex şablonu içinde, ama ben yield aramayı kullanmayı tercih ediyorum Raylar geliyor <%= @inner %> için kılan bir ArticlesController var, ama Phoenix onun karşılığını bulamıyor.

Özelliklerini ana şablonuna/görünümüne çocuğundan iletmenin doğru yolu nedir?

+3

Bu yayın tam olarak aşağıdakileri kapsar: http://sevenseacat.net/2015/06/01/custom_page_titles_in_phoenix.html –

+0

Teşekkürler José! Bu çok yardımcı! –

+0

3 seçenek burada sunulmuştur: http://cloudless.studio/articles/27-implementing-page-specific-titles-in-phoenix –

cevap

8

Burada birkaç seçeneğiniz var. Raylarda content_for gibi bir şey istediğinizi varsayalım.

Seçeneklerden biri bir fiş kullanmak render_existing/3http://hexdocs.pm/phoenix/0.14.0/Phoenix.View.html#render_existing/3

başka esnek yoludur kullanmaktır:

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 

Sonra denetleyicisi size

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 

Ve şablonunda yapabilirsiniz; değeri ayarlı değilse @page_title yükseltmek çünkü

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

Burada assigns yerine @page_title kullanın.

+1

Teşekkürler Gazler! Şablon için önerilerinizi kullanarak bunu çözebiliyordum ve denetleyici eyleminde 'render 'çağrısına' page_title:' başlık ekliyor. –