1.В модуле Структура создаются страницы (НЕ отображать в меню, запретить индексацию поисковиками, меню всегда развёрнуто, НЕ страница по умолчанию, показывать подменю, исключить из поиска), названия этим страницам присваивать латинские (меньше будет путаницы у модератора), ссылка может быть любой, даже автогенерируемой - блоки однозначно определяются по имени. В дальнейшем модератор может перемещать блоки между страницами, создавать новые, вносить изменения в имеющиеся, создавать различные наборы блоков вёрстки для любой страницы сайта...

2.Подстраницами этих страниц создаются обычные страницы, которые будут составными частями блоков вёрстки на страницах

3.Обработка любого (!) количества блоков вёрстки (даже не показываемых в меню страниц ИЛИ рубрик новостей) реализована через протокол usel. Файл выборки блоков вёрстки blocks.xml

<?xml version="1.0" encoding="utf-8"?>
<selection>
    <target expected-result="pages count">
        <type module="content" method="page"/>
<type module="news" method="rubric"/>
        <category>{1}</category>
    </target>
</selection>

В контенте страницы запускается выборка блоков вёрстки (из файла blocks.xml). Выборку и обработку блоков лучше разместить в обработке контента content/content.xsl

<xsl:apply-templates select="document(concat('usel://blocks/', $pageId))/udata" mode="blocks" />

Обработка блоков вёрстки:

     <xsl:template match="udata" mode="blocks"> 
        <xsl:apply-templates select="page" mode="blocks"/>
    </xsl:template>
     <xsl:template match="page[.//property[@name='h1']/value = 'Welcome']" mode="blocks">
        <div class="thumb-box">
            <div class="container">
                <strong><xsl:value-of select=".//property[@name = 'title']/value"/></strong>
                <xsl:value-of select=".//property[@name = 'content']/value" disable-output-escaping="yes"/>
            </div>
        </div>        
    </xsl:template>
    <xsl:template match="page" mode="blocks"/>

Если в блоке надо сделать распределение блоков по столбцам (в примере столбцов 3), запускается выборка блоков вёрстки (подстраниц блоков, включенных в страницу с именем 3 в админке), только с текущей страницы:

    <xsl:template match="page[.//property[@name='h1']/value = '3']" mode="blocks">
        <xsl:apply-templates select="document(concat('usel://blocks/', @id))/udata" mode="blocks" />
    </xsl:template>

Если блок вёрстки составной (из нескольких составных частей), то он обрабатывается через обработку меню:

    <xsl:template match="page[.//property[@name='h1']/value = 'Slider']" mode="blocks">
        <xsl:apply-templates select="document(concat('udata://content/menu//1/', @id,'?extProps=h1,poleoutlink,menu_pic_ua,content'))/udata" mode="slider" />
    </xsl:template>

Если блок - лента новостей, то он обрабатывается как лента новостей:

    <xsl:template match="page[.//property[@name='h1']/value = 'Calendar']" mode="blocks">
        <xsl:apply-templates select="document(concat('udata://news/lastlist/', @id,'//6/0'))/udata" />
    </xsl:template>

Обработка собственно меню (причём свойство title берётся из страницы блока!!!):

    
    <xsl:template match="udata[@module = 'content'][@method = 'menu']" mode="slider1">
    </xsl:template>    
    <xsl:template match="udata[@module = 'content'][@method = 'menu'][items]" mode="slider1">
        <div class="list_carousel1 responsive clearfix">
<h3><xsl:value-of select="document(concat('upage://', document(concat('upage://', //@id))//@parentId))//property[@name = 'title']/value"/></h3>
            <ul id="foo1">
                <xsl:apply-templates select="items/item" mode="slider1"/>
            </ul>
        </div>
    </xsl:template>        
    <xsl:template match="udata[@module = 'content' and @method = 'menu']//item" mode="slider1">
        <li>
            <strong><xsl:value-of select="./extended//property[@name='h1']/value"/></strong>
            <xsl:value-of select="./extended//property[@name='content']/value" disable-output-escaping="yes"/>
            <p class="name"><xsl:value-of select="./extended//property[@name='meta_descriptions']/value"/></p>
        </li>        
    </xsl:template>