Часто возникают задачи использовать повторяющуюся верстку.
Для этого можно использовать HTML блоки - куски некой разметки, которую можно вставить по именному коду.
Как использовать HTML блоки:
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
На входе:
Вызов процедуры осуществляется через подобный код:
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