Речь пойдет о StringTemplate 3.1 для C#, который я использовал для генерации веб страниц. Вообще, этот движок шаблонизации используется для разных целей — например, для генерации кода или SQL. Основным достоинством считается то, что библиотека переписана на разных языках — C#, Java, Python и т.д. Хоть о StringTemplate написано несколько больших страниц, документации все еще недостаточно. По этому, я решил сделать меленькое вступление и описать несколько граблей, встретившийся на моем пути.
Данное описание является чистым опытом автора и не может быть рассмотрено как пособие для обучения или перевод документации.
Простые переменные и вызов шаблонов
Я не стану описывать синтаксис переменных (все переменные находсятся между знаком «$») и возможность его переключения на теги (в зависимости от выбора TemplateLexer), все это собрано на одной CheatSheet странице. Перейдем сразу к примеру, содержание файла baseHtml.st в папке templates/super:
<html> <head> <title>MySite- $title$</title> </head> <body> <div> $menuTop()$ $body$ $menuBottom()$ </div> </body> </html>
Тут, вместо $body$, будет подставлено значение этой переменной. В случае объекта, можно получать параметры через точку. $menuBottom()$ — это вызов шаблона с одноименным названием. При этом, можно передавать именные параметры. В случае анонимной передачи параметра ($menuBottom($param$)$) — внутри шаблон к нему можно получить доступ с помощью ключевого слова $it$.
Наследование — аналог MasterPage
Для наследования я использую вспомогательный файл (templates/super/tplPost.st):
$htmlBase( title={ $page.title$ } ,body={ $htmlPage()$ } )$
Таким образом вызывается шаблон htmlBase с содержанием результата работы шаблона htmlPage вместо параметра body. И да, переменные можно объявлять в шаблоне. htmlPage — уж додумайте сами — главное тут помнить, что все переменные — глобальные, а значит $page$ доступен во всех шаблонах.
Создание файла на основе шаблона
И так, настало время все это запустить из C#. Думаю, вы уже скачали «StringTemplate.dll» и добавили его в зависимости проекта. Код следующий:
var skinGroup = new StringTemplateGroup(skin, TEMPLATES_URL); var page = skinGroup.GetInstanceOf("tplPast.st"); page.SetAttribute("page", page); //предпологаем, что page это объект, как минимум с параметром - <strong>title</strong> var file = File.CreateText(Path.Combine(outputFolder, name)); try { file.Write(page); } catch (Exception ex) { throw ex; } finally { file.Close(); }
Во второй части посмотрим на код C# внимательней.
Метки:C#, OpenSource, Template
Похожие статьи
- 19 сентября 2010 -- StringTemplate на C# (Часть 2) (0)
- 19 сентября 2010 -- StringTemplate на C# (Часть 3) (0)
- 30 декабря 2008 -- Создаем ASHX хендлер в ASP.NET (1)
- 20 апреля 2012 -- Разработка модулей для Orchard CMS с поддержкой SVN (1)
- 8 июля 2008 -- Исправляем HTML для чтения как XML. (5)