2016-02-26 2 views
2

У меня есть шаблоны (*.tpl) в my-snap-app/snaplets/heist/templates (main.tpl, page1.tpl, page2.tpl, page3.tpl). А вот мой Main.hs:Работа с маршрутами и HTML (Heist) в Привязать

import Snap.Http.Server 
import Snap.Core 
import Snap.Snaplet 
import Snap.Snaplet.Heist 
import Snap.Util.FileServe 
import Snap.Util.GZip 
import Heist.Interpreted 
import Heist 

--....... 

data App = App { _heist :: Snaplet (Heist App) } 
makeLenses ''App 

instance HasHeist App where 
    heistLens = subSnaplet heist 

Как я могу:

а) сделать все шаблоны доступны в моем веб-приложение? Значение, я хочу иметь доступ к page1.tpl, page2.tpl, page3.tpl по адресу localhost://page1, localhost://page2, localhost://page3. Должен ли я обязательно добавить маршрут для каждую страницу или я могу добавить маршрут, чтобы сделать их доступными все сразу?

2) main.tpl является основным шаблоном (макет). Как я могу сделать page[123]main.tpl как шаблон макета макета?

ответ

3

Хейст-фиксатор имеет функцию serveHeist, которая действует как serveDirectory. Это будет обслуживать все шаблоны в шаблонах/на маршрутах. У пиктов есть более подробная информация о, например. скрывая определенные шаблоны, которые не имеют смысла сами по себе.

Для создания разных шаблонов, подумайте о шаблонах, таких как функции - вы можете применить их к другим шаблонам, и результат сам по себе является шаблоном. Все это происходит в самом Хейсте, а не в ладах.

Тег <apply> выполняет функцию приложения. Аргумент содержание внутри <apply>, например, в page1.tpl:

<apply> 
    <h1>I'm a function parameter</h1> 
</apply> 

функция применяется в main.tpl, а параметр <apply-content>:

<html><head></head> 
    <body> 
    <h1>Main template.</h1> 
    <apply-content/> 
    </body> 
</html> 

Использование <apply> и <apply-content> выполнить и вычислить полную страницу, которая будет доступна по маршруту /page1.

В Heist Tutorial есть еще много объяснений. Интересно, полезна ли функция-прикладная аналогия для запоминания большего количества API-интерфейса heist.