ClearSilver

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 22:41, 9 января 2019.

ClearSilver – это быстрая, мощная и не зависящая от языка система шаблонов. Она разработана, чтобы упростить создание статических или динамических веб-сайтов с шаблоном.

ClearSilver в первую очередь разработан, чтобы быть чрезвычайно быстрым. Он полностью написан на C и экспортируется на выбранный вами скриптовый язык (т.е. Python, Perl). В результате это заметно быстрее, чем системы шаблонов, написанные на скриптовом языке. При этом такая конструкция имеет дополнительные преимущества. Это также одна из доступных доступных систем шаблонов, которая позволяет легко смешивать и сопоставлять несколько языков программирования с теми же шаблонами, даже на одной странице. Это позволяет оптимизировать ваш сайт, написав C-модули для обработки секций, чувствительных к скорости, в то же время оставляя большую часть вашего сайта в удобном для написания сценарии.

Особенности

  • Быстрая, простая, не зависящая от языка система шаблонов.
  • Модули, доступные в настоящее время для C, Python, Perl.
  • Мощный язык шаблонов поддерживает подстановку переменных, включает шаблоны, условные обозначения, циклы, макросы, рекурсивные макросы, локальные переменные.
  • Полный комплект CGI-обработки с поддержкой CGI/1.1, RFC 2388, автоматическое сжатие gzip и другие стандарты CGI.
  • Модель рендеринга «Pipelined» сохраняет данные рендеринга в промежуточном статическом наборе данных и упрощает отладку.
  • Отделите свое веб-приложение от его внешнего вида.
  • Разрешить не-программистам доступ к редактированию частей внешнего вида сайта.
  • Открытый исходный код и неограничивающая лицензия[Источник 1]

Зачем использовать систему шаблонов?

Существует несколько веских причин использовать систему шаблонов, любую систему шаблонов. Одним из них является возможность быстрого редактирования и изменения кода HTML без хлопот перекомпиляции. Файлы шаблонов часто очень похожи на файлы HTML и могут быть изменены большинством редакторов HTML. Вся страница можно легко найти и отредактировать, в отличие от того, какая часть CGI испускает определенную часть страницы. Использование системы шаблонов также позволяет ускорить редактирование / обновление HTML. Самое главное, что шаблоны предоставляют возможность отделить логику приложения от шаблона презентации.

Применение

Neotonic ClearSilver идет на один шаг впереди, большинства систем шаблонов, таких как JSP, PHP и ASP. Вместо того, чтобы разрешать разделение вида страницы и кода, он активно их объединяет. Не существует подключения к базе данных, доступа к файловой системе или чего-либо подобного. Шаблоны имеют доступ только к статическому набору данных. Строки набора данных содержатся в иерархическом пространстве имен, которое заполняется кодом приложения до этапа рендеринга шаблона.

Обеспечение этого разделения имеет много преимуществ. Отладка упрощена, поскольку она разделена на два разных состояния - отладка логики приложения и отладка шаблона презентации. Веб-сайт может быть построен по-настоящему независимым от языка способом. Логика приложения может быть написана на языке C, Python, Perl или на любом другом языке. Шаблоны - это клей, который объединяет фрагменты с разных языков под одним пользовательским интерфейсом. Фактически, легко создавать отдельные страницы из фрагментов кода, написанных на нескольких языках. Однако наиболее важным преимуществом является то, что изменения, внесенные в шаблоны презентации, не будут приводить к ошибкам в важных частях кода, коде приложения.

Отличие от XSLT

ClearSilver обеспечивает мощь благодаря простоте. Wheras XSLT требует установки нескольких файлов для отображения одной страницы, любой HTML-файл является допустимым шаблоном ClearSilver. Редакторы HTML можно использовать в шаблоне, или файл шаблона можно даже протестировать в браузере без обработки. Преобразование макета HTML в ClearSilver - это простой и инкрементный процесс. Вставьте статический HTML-код и замените статический текст операциями ClearSilver один за другим.

Воодушевление для Neotonic ClearSilver, CS/HDF, использовалось при установке основного веб-приложения с десятками миллионов пользователей и просмотром страниц в день. Этот сайт постоянно переводил код с Python на C без изменений шаблона, прошел три основных изменения презентации с небольшими изменениями в базовом коде приложения, поддерживал более 14 стран и языков и одновременно размещал отдельные пользовательские интерфейсы с одной и той же базы кода ( WAP и две очень разные версии HTML).[Источник 2]

Сравнение с PHP, ASP, JSP

Код в шаблоне

PHP - лучшие примеры полного кода в системе шаблонов. Он отличается от других систем тем, что между кодом и HTML-шаблонами нет разделения. Когда включается общий библиотечный код, он также находится в шаблонах, которые могут выводить HTML. Это предлагает самый быстрый путь к написанию простой динамической страницы. Программирование может начинаться со статического макета HTML, и части макета могут постепенно заменяться логикой программирования, поиском в базе данных и циклами. Если просто нужна система для быстрого написания нескольких динамических страниц, и нет необходимости менять внешний вид страниц, это правильный тип системы шаблонов для использования. Этот тип системы шаблонов идеально подходит для таких приложений, как небольшие внутренние ИТ-инструменты и небольшие или бесплатные веб-сайты.

Недостаток использования кода в системе шаблонов состоит в том, что код и вывод HTML быстро становятся неразрывно связанными. Это затрудняет изменение внешнего вида страниц. Например, если проверять cookie пользователя и загружаете данные базы данных пользователя в «общий заголовок», перемещение в том месте, где включается этот шаблон, изменится в том месте, где извлекается информация базы данных для пользователя, возможно, нарушая другие части страницы, которые зависят от эти данные.

С помощью PHP или любого другого кода в системе шаблонов можно жестко отделить логику приложения от кода презентации. Для этого вся логика приложения помещается первой в шаблон. Этот код просто заполняет строки глобальных переменных, которые используете позже для визуализации страницы, и не выводит HTML. Этот метод успешно используется в некоторых сценариях PHP, однако PHP не особенно помогает в этом, и системы шаблонов, разработанные специально для этого, имеют дополнительные функции, облегчающие этот тип программирования.

Обратный звонок в шаблоне

ASP (VB/C# встроенный в HTML) и JSP (Java встроенный в HTML) являются обратными вызовами в системах шаблонов. Это связано с тем, что они поддерживают двухуровневую модель, в которой код приложения пишется отдельно, а шаблон вызывает код вашего приложения. Преимущество этого заключается в том, что логика вашего приложения в значительной степени отделена в отдельном месте, а страница в основном просто запускает различные действия и действия отображения.

Тем не менее, поскольку эти системы используют модель обратного вызова, они имеют менее надежные возможности рендеринга шаблонов. Часто страницы ASP и JSP вызывают обратный вызов для «рендеринга фрагмента html». Чаще всего это происходит потому, что циклическая функциональность в этих типах системы шаблонов недостаточно надежна, чтобы легко перебирать коллекцию элементов и получать доступ к под-данным этих элементов. Это создает трудно поддерживаемую логику отображения, которая разбита между вашими обратными вызовами и вашим шаблоном, что затрудняет изменение внешнего вида ваших страниц без нарушения их функции. Это также делает настройку представления страниц доступной только «настоящим программистам», которые очень хорошо знакомы с кодом.

Стоит отметить, что PHP можно также использовать в качестве обратного вызова в системе шаблонов, написав основную часть логики приложения на C (или отдельных шаблонах PHP) и экспортировав эти библиотечные функции в PHP. Однако PHP чаще всего является комбинацией стилей «код в шаблоне» и «обратный вызов в шаблоне», а не одним или другим.

Шаблон, управляемый набором данных

Шаблоны на основе наборов данных - это новый стиль веб-программирования, который набирает популярность. Этот тип системы шаблонов предназначен для обеспечения разделения представления HTML и логики приложения. Как и обратный вызов в системах шаблонов, логика вашего приложения разделена на отдельную библиотеку кода на выбранном вами языке. Как и код в системах шаблонов, для создания вашего внешнего вида предусмотрены надежные циклы и макрофункция. Во многих отношениях эти системы предлагают лучшее из обоих миров, быструю и легкую разработку веб-страниц и гибкость в изменении внешнего вида вашего сайта. В отличие от любого другого стиля, в шаблоне нет логики приложения, только код представления. Это разделение создается путем разделения рендеринга страницы на два отдельных этапа. На первом шаге логика вашего приложения запускается и выводит свои данные в статический набор данных. Если вы знакомы с оболочками командной строки в UNIX и Windows, вам будет легко понять это по аналогии. Этот статический набор данных очень похож на переменные среды вашей оболочки. Они представляют собой набор отношений имя / значение, которые являются просто статическими строками. Если ваше веб-приложение имеет концепцию вошедшего в систему пользователя, тогда набор данных может содержать данные «user = david».

На втором этапе запускается код шаблона вашей презентации. Он имеет доступ только к этому статическому набору данных, чтобы выполнить свою работу, и вся работа по чтению и записи в файлы или вашу базу данных уже завершена. Использование подхода, при котором шаблоны не могут выполнять какую-либо реальную работу, гарантирует, что порядок вывода HTML на страницу не имеет значения. Если вы хотите, чтобы информация о пользователе была вверху, вы просто ссылаетесь на t данные в верхней части шаблона, если вы хотите, чтобы они были внизу, вы ссылаетесь на них внизу.

Эта модель предлагает много преимуществ по сравнению с другими моделями шаблонов. Вот несколько из них:

  • Меньший код приложения - вы всегда можете поместить больше данных в набор данных, чем вам нужно, и игнорировать их на уровне шаблона. Это означает, что можно легко сделать несколько общих «экспортных» функций для передачи данных в набор данных для ваших обычно используемых элементов или объектов базы данных. Вы можете выборочно использовать любые данные в шаблоне, который вам нравится. Поскольку загрузка всей записи из базы данных обычно такая же, как и при загрузке любой части записи из базы данных, это практически не влияет на производительность.
  • Избегайте частично визуализированных страниц. Одна из распространенных проблем с другими типами систем шаблонов заключается в том, что если ошибка происходит на полпути через страницу, часть HTML уже визуализируется, и невозможно корректно прервать рендеринг страницы. Это приводит к таким ошибкам, как ошибки PHP «ошибка доступа к базе данных», которые случайно попадают в структуру HTML при возникновении ошибок. В шаблонах, управляемых набором данных, вся логика приложения уже запущена, когда наступит время для выполнения вашего шаблона. Если возникает ошибка, вы можете решить, что именно вы хотели бы представить пользователю.
  • Возможен анализ производительности - при использовании других типов систем шаблонов невозможно получить точные данные о том, сколько времени занимает выполнение ваших страниц, поскольку выполнение вашего кода чередуется с отправкой данных конечному пользователю. Используя шаблоны на основе набора данных, выполнение логики приложения выполняется без блокирования вывода данных, что позволяет получить точные показатели производительности выполнения страницы. Кроме того, транзакции с базой данных и другие операции, которые происходят, когда страницы отображаются очень быстро, вместо того, чтобы их можно было перетаскивать, когда данные отправляются пользователю на другом конце медленной ссылки на полпути по всему миру.
  • Оптимизация производительности проще - поскольку ваши шаблоны просто просматривают статический набор данных, не имеет значения, откуда взялся этот набор данных. Если вам нужно изменить порядок загрузки данных в набор данных, ваши шаблоны презентации останутся без изменений. Если вам необходимо кэшировать данные и извлекать их из файла или файла cookie, а не из базы данных, ваши шаблоны снова остаются неизменными.
  • Отладка проще - часто при работе с другими системами шаблонов ошибки в вашем коде приводят к повреждению HTML. Этот вывод очень трудно просеять, чтобы обнаружить проблему. В шаблонах, управляемых набором данных, вы всегда можете независимо наблюдать за выводом самого набора данных. Это позволяет вам отделить отладку логики вашего приложения от шаблона презентации. Кроме того, нарушенная логика приложения, как правило, не приводит к нарушению HTML, поскольку логика шаблона по-прежнему корректно работает с предоставленными ему данными.[Источник 3]

Основы шаблонов

Процесс рендеринга Neotonic ClearSilver имеет две части: набор данных и файлы шаблонов ClearSilver (CS). Набор данных представляет собой иерархическое пространство имен строк, которые содержат ссылки в шаблоне CS. Шаблон CS содержит смешанные выражения HTML и CS. Вместе они определяют вывод данной страницы.

Рисунок 1 - Представление HDF.

Разделение между логикой приложений и шаблоном

В сочетании с языком программирования, таким как C, Python или Java, статический набор данных HDF создает слой разделения между реализацией логики приложения и отображением выходного шаблона. Логика приложения может быть переделана и переписана по мере необходимости, если она создает один и тот же статический набор данных. Аналогично, шаблон можно переписать и отладить отдельно, поскольку его единственными исходными данными являются статические данные HDF.

Встроенные функции

Clearsilver имеет встроенные функции для выражений. Эти функции позволяют получить доступ и манипулировать аргументами выражения. В настоящее время все функции возвращают строковые или числовые значения. Функции могут использоваться в выражениях везде, где может использоваться переменная.[Источник 4]

Функция Аргументы Описание
subcount(var) Переменная HDF Возвращает количество дочерних узлов для переменной HDF
name(local) Локальная переменная Возвращает имя переменной HDF для псевдонима локальной переменной
first(local) Локальная переменная Возвращает true, если локальная переменная является первой в цикле или каждой
last(local) Локальная переменная Возвращает true, если локальная переменная является последней в цикле или каждой
abs(expr) Числовое выражение Возвращает абсолютное значение числовых выражений
max(expr, expr) Два числовых выражения Возвращает большее из двух числовых выражений
min(expr, expr) Два числовых выражения Возвращает меньшее из двух числовых выражений
string.slice(expr, start, end) Строковое выражение и два числовых выражения Возвращает срез строки, начиная с начала и конца в конце, подобно оператору среза Python
string.find(string, substr) Два строковых выражения Возвращает числовую позицию подстроки в строке (если найдено), в противном случае возвращает -1, аналогично методу string.find в Python
string.length(expr) Строковое выражение Возвращает длину выражения строки
_(expr) Строковое выражение Доступно только при компиляции с поддержкой gettext, возвращает переведенную версию выражения строки, возвращенную gettext()

Шаблонные фильтры

API Clearsilver позволяет пользователю добавлять функции манипуляции строками во встроенные функции. Эти функции могут принимать только один строковый аргумент и возвращать строку. У Clearsilver CGI Kit есть несколько фильтров, специфичных для Web, которые добавляются к Clearsilver. Эти фильтры могут быть добавлены в C через функцию cgi_register_strfuncs() и по умолчанию включены в CS-слой большинства языковых оболочек.

url_escape Этот URL-адрес кодирует строку. Это преобразует символы, такие как ?, &, И = в их безопасные эквиваленты URL, используя синтаксис %hh.
html_escape Этот HTML-код избегает строки. Это преобразует символы, такие как >, <, и & в их безопасные эквиваленты HTML, такие как >, & lt;, и &.
js_escape Этот JavaScript избегает строки, поэтому он будет действительными данными для размещения в строке Javascript. Это преобразует символы, такие как «,» и «\» в их безопасные эквивалентные строки Javascript \», \' и \\.
text_html Этот форматирует обычный текст в фрагмент HTML, пытаясь обнаружить границы абзаца и позволяя ему обертывать разумно.
html_strip Удаляет все теги HTML, а затем преобразует любые экранированные данные HTML в обычный текст. Объединяется с html_escape(), если нужно удалить теги HTML из текста и отобразить результат в безопасном HTML-виде.
url_validate Функция для проверки URL-адреса для защиты от XSS. Обеспечивает, что URL-адрес является относительным URL-адресом или абсолютным URL-адресом с безопасной схемой (в настоящее время http, https, ftp или mailto). Это делается для того, чтобы избежать опасных схем, таких как javascript. Затем HTML ускоряет URL. Небезопасный URL-адрес заменяется на «#».
css_url_validate Аналогично url_validate исключает URL-адрес для использования в CSS.
null_escape Эта функция escape только выводит заданную строку как есть. Система автоматического спуска предполагает, что все явно экранированное экранировано.

Набор CGI

Существует два уровня, на которых можно использовать ClearSilver. Можно использовать систему шаблонов самостоятельно, в сочетании с некоторыми другими наборами CGI, такими как cgi.py или CGI.pm, в Java-сервлете или даже в не-CGI-контекстах, таких как расширение файлов конфигурации, генерация кода , документацию, сообщения электронной почты и т. д. Или, когда это доступно, можно использовать систему шаблонов ClearSilver через набор ClearSilver CGI.

Набор ClearSilver CGI предоставляет интерфейс для общего CGI, который интегрируется с языком шаблонов ClearSilver. Он предварительно загружает информацию CGI в набор данных ClearSilver, делая эту информацию доступной в стандартном расположении в наборе данных HDF. Набор CGI ClearSilver также поддерживает загрузку файлов RFC 2388 через HTTP, и это один из единственных интерфейсов, который позволяет пользовательскому CGI извлекать информацию о состоянии через обратный вызов.

Предварительно загруженные данные HDF

Несколько различных типов данных предварительно загружаются в набор данных HDF набором Clearsilver CGI. Это обеспечивает прямой доступ шаблону кода Clearars к информации, такой как parmaters запросов и Cookies. Это также упрощает для кода приложения получение этих данных с одного места (контекст HDF) с помощью одного API. Поскольку это очень полезная утилита, окружающая среда, которая работает без комплекта Clearsilver CGI, может пожелать подражать этому поведению. К примеру, есть класс сервлета Java, который будет заполнять соответствующие элементы HDF из API-интерфейса Java-сервлета.

Переменные формы HTML

HTML-формы GET или POST-переменные предварительно заполняются в наборе данных HDF в Query.*. Если параметр задан несколько раз, то элемент будет иметь подэлементы, включая различные значения. Базовая переменная сохранит последнее предоставленное значение. Вот пример .*дерева запросов HDF, Которое может возникнуть из формы HTML:

Query.name = David

Query.email = david@neotonic.com

Query.multSelect = третье значение

Query.multSelect.0 = первое значение

Query.multSelect.1 = второе значение

Query.multSelect.2 = третье значение

Cookies

Данные HTTP Cookie предоставляются вместе с расшифрованными версиями отдельных файлов cookie. Ниже приведен пример .*дерева cookie HDF:

Cookie = help_pos_x = 461; help_pos_y = 206; Е = V = 1 & е = 305,1,303;

Cookie.help_pos_x = 461

Cookie.help_pos_y = 206

Cookie.E = v = 1 & e = 305,1,303

Заголовки HTTP

Следующие заголовки HTTP отображаются в HDF:

HTTP.Accept = image / gif, image / x-xbitmap, image / jpeg, image / pjpeg

HTTP.AcceptEncoding = gzip, deflate

HTTP.AcceptLanguage = ru-us

HTTP.Cookie = help_pos_x = 461; help_pos_y = 206; Е = V = 1 & е = 305,1,303;

HTTP.Host = jeske-dev.trakken.com

HTTP.UserAgent = Mozilla / 4.0 (совместимо; MSIE 6.0;)

HTTP.Referer = http://www.clearsilver.net/cgi-bin/test.py

Окружающая среда Apache

CGI.DocumentRoot = / home / jeske / htdocs

CGI.GatewayInterface = CGI / 1.1

CGI.QueryString = done = 1

CGI.RemoteAddress = 216.103.193.234

CGI.RemotePort = 1870

CGI.RequestMethod = GET

CGI.RequestURI = /cgi-bin/test.py?done=1

CGI.ScriptFilename = /home/jeske/htdocs/cgi-bin/test.py

CGI.ScriptName = /cgi-bin/test.py

CGI.ServerAddress = 64.167.132.245

CGI.ServerAdmin = webmaster@neotonic.com

CGI.ServerName = www.clearsilver.net

CGI.ServerPort = 80

CGI.ServerProtocol = HTTP / 1.1

CGI.ServerSoftware = Apache / 1.3.26 (Unix)

Загрузка HTTP

Набор CGI также предоставляет средство для анализа данных HTTP POST, включая многофазную загрузку файлов. Он имеет уникальный интерфейс обратного вызова, который позволяет получать постоянную информацию о состоянии текущей загрузки. Обработка данных POST происходит, когда вызывается cgi_parse().

После завершения синтаксиса значение Query.* HDF для параметра INPUT TYPE = FILE будет содержать имя файла загруженного файла. Затем указывается имя своего значения для функции cgi_filehandle(), чтобы получается FILE* для загруженного файла.[Источник 5]

Источники

  1. Overview // clearsilver [2018]. Дата изменения: 01.01.2017. URL: http://www.clearsilver.net/docs/ (Дата обращения: 18.11.2018).
  2. Why use a templating system? // clearsilver [2018]. Дата изменения: 01.01.2017. URL: http://www.clearsilver.net/docs/manual.hdf (Дата обращения: 18.11.2018).
  3. Clearsilver Compared: vs. PHP, ASP, JSP // clearsilver [2019]. Дата изменения: 01.01.2017. URL: http://www.clearsilver.net/docs/apples_to_oranges.hdf (Дата обращения: 09.01.2019).
  4. Expression Functions // clearsilver [2018]. Дата изменения: 01.01.2017. URL: http://www.clearsilver.net/docs/man_filters.hdf (Дата обращения: 18.11.2018).
  5. CGI Kit // clearsilver [2018]. Дата изменения: 11.01.2018. URL: http://www.clearsilver.net/docs/man_filters.hdf (Дата обращения: 18.11.2018).