===[ Программизм ]=== #post-id: 5473-14-59 #original-date: 21.07.2015 Tue #original-time: 2:59 PM #original-day: 5473 #original-host: WinXP Prof SP3 (Build 2600) Оторвавшись от DOS баталий, я решила побаловаться HAML и Ruby в деле шаблонизации снова. Пока что пришла вот к чему. Есть такой test2.haml: > !!! Strict > %html{ :lang => "ru"} > %head > %meta{ "http-equiv" => "Content-Type", :content => "text/html; charset=UTF-8" } > %body{ :style => "font:" + $global_styles["font-size"] + " " + $global_styles["font-name"] + ";" } Есть такой test2.rb: > #!/usr/bin/ruby > # encoding: utf-8 > > $global_styles = { "font-name" => "'Times New Roman',sans-serif", > "font-size" => "16pt" } Всё это мы парсим как-то так: > @echo off > setlocal > > set PATH=C:\Utils\Ruby\bin\;%PATH% > set PARAMS=--format html4 --double-quote-attributes > > call haml %PARAMS% --require "C:\test\test2.rb" test2.haml test2.htm В результате получается HTML файл, где переменные из руби файла вставлены в сгенерированный хамлом код. В общем, красиво так получается. И всёже меня беспокоит одна вещь. Всё тоже самое можно делать и VBScript'ом. Просто договориться о том, как переменные обозначать в шаблонах. Да даже XSL можно заюзать для этого дела - благо поддерживаются вложения XSL файлов и вроде как можно даже переменные там использовать. В смысле, стоит ли оно того? Кстати, сейчас у меня на сайте используются переменные, но без шаблонов. В HTML и XSL файлах есть "маркеры", состоящие из двух частей: образца текста с переменной и второй части, которая генерируется из образца и значения переменной, которое паресер берёт из внешнего файла. Иными словами, каждый раз при парсинге парсер берёт файл, ищет в нём маркер, если находит - применяет переменную, если изменился текст - пишет обратно на диск. Маркер выглядит как-то так: > /@ font:%main_font%; @/ font:12pt Tahoma; /@/ А файл с переменными - так: > main_font 12pt Tahoma > special_font 11pt Consolas > frame_color red У этого метода только один недостаток: описания переменных статичны. Хотя я могла бы сделать такую бяку: заюзать Script Control, файлы с переменными реализовать в ивде VBS файлов, а потом, при каждом применении просто выполнять этот скрипт и значения переменных брать уже по завершению. Например, файл с переменными может выглядеть так: > Option Explicit > > Dim main_font > Dim special_font > Dim frame_color > > main_font = "12pt Tahoma" > > If SiteVersion() > 3 Then > special_font = "11pt Consolas" > Else > special_font = "10pt ""Courier New""" > End If > > If SiteDomain() = "www.lindachan.net" Then > frame_color = "green" > Else > frame_color = "red" > End If > > Private Function SiteVersion() > '... > End Function > > Private Function SiteDomain() > '... > End Function Гибко и красиво. Только нужно подумать, как узнать список переменных. Вроде Script Control позволял это дело получить. Как-то так. Единственное что, HAML уже есть, а мой вариант нужно допиливать.