2015-09-24 2 views
7

Если я хочу создать модуль с функциями, к которым можно получить доступ в каждом шаблоне, и в которых я могу использовать все функции представления (создание тегов, использование путей маршрутизатора и т. Д.), Каков наилучший способ достичь этого?Как создать глобальный вид в Phoenix Framework?

Проще говоря, как мне создать глобальный вид?

ответ

15

Вы можете определить модуль (я бы поместить его в каталог хелперов), который имеет свои функции в нем:

defmodule MyApp.SomeHelper do 

    def some_function do 
    #... 
    end 

end 

Вы можете включить его в MyApp.Web под view функции:

def view do 
    quote do 
     use Phoenix.View, root: "web/templates" 

     # Import convenience functions from controllers 
     import Phoenix.Controller, only: [get_csrf_token: 0, get_flash: 2, view_module: 1] 

     # Import URL helpers from the router 
     import MyApp.Router.Helpers 

     # Use all HTML functionality (forms, tags, etc) 
     use Phoenix.HTML 

     # Import custom helpers 
     import MyApp.SomeHelper 
    end 
    end 

Функция some_function теперь будет доступна во всех шаблонах.

+0

Мне бы также пришлось импортировать 'MyApp.Router.Helpers' и использовать' Phoenix.HTML' в этом 'MyApp.SomeHelper', чтобы иметь возможность использовать все функции просмотра, не так ли? – JustMichael

+0

Это действительно зависит от того, как выглядят ваши функции. Если они используют функции из «MyApp.Router.Helpers» и «Phoenix.HTML», то вы это сделаете. Или вы можете использовать длинное имя. Например. 'MyApp.Router.Helpers.user_path (conn,: index)' – Gazler

+0

Я вижу, большое спасибо – JustMichael

Смежные вопросы