Работа с HTML блоками

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

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

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

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

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

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

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

Использование при меняющейся разметке (когда должна быть задействована хранимая процедура)

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

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

CREATE PROCEDURE [dbo].[block_blogArticles_get]
	@code nvarchar(128),
	@itemID nvarchar(256),
	@parameters ExtendedDictionaryParameter readonly,  -- langID, username...
	@res nvarchar(max) output
AS
BEGIN
	
	-- извлекаем блок по умолчанию
	declare @s  nvarchar(max) = '', @t nvarchar(max)='', @temp nvarchar(max), @langID int, @par nvarchar(max)
    select @langID = isnull(try_cast(Value as int),1) from @parameters where [key] = 'langID'
    SELECT @temp =   STUFF(
                (	-- https://placeimg.com/80/80/nature
                    SELECT  '<article class="bla-item card mb-3">
                           		<a href="/blog/'+isnull(t1.code, '')+'">
                  					<img class="card-img-top" src="'+isnull([dbo].[rs_resourceLink]('articleTitleImage', t1.id, 0), '')+'" alt="">
                  				</a>
            					<div class="card-body">                                       						
              						<div class="bla-title card-title ">
              							<a class="card-link" href="/blog/'+isnull(t1.code, '')+'"><h5>'
                                                +isnull(lang.title, isnull(t1.title,''))+'</h5></a><div class="bl-desc card-text"></div>              							
            						</div>
                           		</div>
          					</article>'
                    FROM  (select * from as_articles art 
                           where id in (select value from dbo.split(@itemID, ','))) t1 
                    left join as_lang_articles lang on lang.articleID = t1.id and lang.langID = @langID
                  	order by ord
                  		
                    FOR XML PATH(''), TYPE 
               ).value('.','varchar(max)') 
               ,1,0, '' 
          )

    if( isnull(@temp, '') !='') begin 
       set @t = iif(isnull(@langID,0) != 1,'<div class="as-blogArticles">' + 
    		 '<h3>Почитать</h3>' + isnull(@temp, '') +              
  		   	 '</div> ','<div class="as-blogArticles">' + 
    		 '<h3>More</h3>' + isnull(@temp, '') +              
  		   	 '</div>') 
    end 
    
    
    
	set @res = @t
END

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

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
 
			  

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

 

Платформа Falcon Space

Это снижение стоимости владения

за счет меньшего количества людей для поддержки

Это быстрое внесение изменений

по ходу эксплуатации программы

Это современный интерфейс

полная адаптация под мобильные устройства

Бесплатное обучение разработке на Falcon Space

Вы можете разрабатывать самостоятельно или сотрудничать с нами в плане веб-разработки на платформе Falcon Space.
Примечание