Работа с HTML блоками. Создание модулей верстки

Часто возникают задачи использовать повторяющуюся верстку. 

Для этого можно использовать HTML блоки - куски некой разметки, которую можно вставить по именному коду.

Как использовать HTML блоки: 

  1. Создаем блок в разделе HTML блоки (/htmlblocks). 
  2. Указываем поле HTML. 
  3. Если блок будет динамический (что-то выводить в цикле или иметь меняющиеся параметры), то указываем хранимую процедуру генерации разметки (get). 
  4. Используем блок по коду в местах генерации разметки

Простое использование (для статичных элементов)

select dbo.as_htmlBlock(@code, @langID)  -- (без использования таблицы локализации as_lang_htmlBlocks)
select dbo.as_htmlBlockLang(@code, @langID) -- с учетом локализации (должна быть таблица as_lang_htmlBlocks)

В функцию передается код блока и язык. В итоге получаем статичную верстку. Эта функция неприменима, когда мы генерируем HTML блок через хранимую процедуру. 

Использование при сложной динамической разметке

Разметка HTML блока при этом строится через хранимую процедуру. Процедура задается в колонке SQL на странице /htmlblocks

Примеры процедуры для HTML блока, где выводится несколько элементов и на входе есть некие параметры: https://pastebin.com/quPkHDYX

На входе: 

На выходе: 
 
Выходных SELECT нет, дожно быт занесено значение в @res. 

Вызов процедуры осуществляется через подобный код: 

declare @res nvarchar(max)
declare @p ExtendedDictionaryParameter  -- передаем параметры в HTML Block

insert into @p ([key], value, value2)
values ('langID', @langID, @langID)

exec [dbo].[as_block]    -- данная процедура вызовет внутри хранимую процедуру блока. 
	@code ='blogArticles',
	@itemID =12,
	@parameters = @p,   -- ExtendedDictionaryParameter (langID, username и т.д.)
	@res =@res OUTPUT
select @res

ВАЖНО! Динамический HTML блок надо получать именно через ХП as_block, а не другими способами (функция as_htmlBlockLang и т.д. - они получают чисто статичную часть HTML блока).

Мы можем передать в процедуру некий itemID, а также указать любые дополнительные параметры в @parameters. Выходная разметка будет сгенерирована через хранимую процедуру блока и возвращена в @res.

К примеру на страницу приходит itemID - /page1/x123

Добавляем itemID к @p этот параметр и вызываем процедуру as_block:

declare @res nvarchar(max)
declare @p ExtendedDictionaryParameter  -- передаем параметры в HTML Block

insert into @p ([key], value, value2)
values ('urlItemID', @itemID, @itemID)

exec [dbo].[as_block]    -- данная процедура вызовет внутри хранимую процедуру блока. 
	@code ='blogArticles',
	@itemID =0,
	@parameters = @p,   -- ExtendedDictionaryParameter (langID, username и т.д.)
	@res =@res OUTPUT
select @res

В процедуре html блока мы извлекаем параметр urlItemID из @parameters

Страница-источник на сайте falconspace.ru