Как в модуле меню привязать меню к домену — различия между версиями

Материал из Umicms
Перейти к:навигация, поиск
м (переименовал «Как сделать универсальный xsl шаблон меню в мультисайтовости» в «[[Как сделать универсальный xslt шаблон меню в мультисайтов�)
 
(не показано 8 промежуточных версий этого же участника)
Строка 7: Строка 7:
 
[[Файл:2sitein1cms.png]]
 
[[Файл:2sitein1cms.png]]
  
На обоих сайтах используется один и тот же xslt шаблон.
+
На обоих сайтах используется один и тот же шаблон.
  
Вы хотите внедрить модуль меню, но для вызова меню Вам нужно будет подставлять идентификатор меню, а их у Вас создано два.  
+
Вы хотите внедрить модуль меню, но для вызова меню Вам нужно будет подставлять идентификатор меню, а их (меню) у Вас создано два.  
  
 
== Решение ==
 
== Решение ==
Строка 24: Строка 24:
 
<li>В xslt шаблоне текущий домен доступен в result'е:</li>
 
<li>В xslt шаблоне текущий домен доступен в result'е:</li>
 
[[Файл:Result-@domain.png]]
 
[[Файл:Result-@domain.png]]
<li>Поэтому подставить его с помощью xPath функции concat() не составит особого труда</li>
+
 
 +
Поэтому подставить его с помощью xPath функции concat() не составит особого труда:
 +
Например, в demodizzy вызов примет следующий вид:
 +
<source lang="xml">
 +
<xsl:apply-templates select="document(concat('udata://menu/draw/', $domain))/udata" mode="info-pages-head" />
 +
</source>
 +
где $domain это:
 +
<source lang="xml">
 +
<xsl:variable name="domain" select="/result/@domain" />
 +
</source>
 +
<li>В tpl получить текущий домен можно с помощью глобального макроса %domain%, то есть вызов примет вид:
 +
</li>
 +
<source lang="html4strict">
 +
%menu draw(%domain%, 'default')%
 +
</source>
 
</ul>
 
</ul>
  
  [[category:Вопросы и уроки разработки сайтов на UMI.CMS]][[Категория: Верстка в XSLT]]
+
Если же для каждого сайта создано несколько меню, то используйте домен в качестве префикса, то есть
 +
ид меню будет иметь вид "domain1.com_main",  в  tpl вызов примет вид:
 +
 
 +
<source lang="html4strict">
 +
%menu draw(%domain%_main, 'default')%
 +
</source>
 +
 
 +
а в xslt, на примере demodizzy:
 +
 
 +
<source lang="xml">
 +
<xsl:apply-templates select="document(concat('udata://menu/draw/', $domain, '_main'))/udata" mode="info-pages-head" />
 +
</source>
 +
 
 +
  [[category:Вопросы и уроки разработки сайтов на UMI.CMS]]

Текущая версия на 14:47, 5 мая 2014

Актуально для версии 2.9.6

Задача

У Вас есть два сайта на одной лицензии, domain1.com и domain2.com:

2sitein1cms.png

На обоих сайтах используется один и тот же шаблон.

Вы хотите внедрить модуль меню, но для вызова меню Вам нужно будет подставлять идентификатор меню, а их (меню) у Вас создано два.

Решение

Чтобы сохранить универсальность шаблона, необходимо будет динамически подставлять в вызов макроса menu draw() тот или иной идентификатор меню, в зависимости от домена.

Проще всего задачу можно решить следующим образом,

  • У созданных меню укажите в качестве идентификатора домен, к которому они относятся:
  • 2menu1cms.png

  • В xslt шаблоне текущий домен доступен в result'е:
  • Result-@domain.png

    Поэтому подставить его с помощью xPath функции concat() не составит особого труда: Например, в demodizzy вызов примет следующий вид:

    <xsl:apply-templates select="document(concat('udata://menu/draw/', $domain))/udata" mode="info-pages-head" />
    

    где $domain это:

    <xsl:variable name="domain" select="/result/@domain" />
    
  • В tpl получить текущий домен можно с помощью глобального макроса %domain%, то есть вызов примет вид:
  • %menu draw(%domain%, 'default')%
    

Если же для каждого сайта создано несколько меню, то используйте домен в качестве префикса, то есть ид меню будет иметь вид "domain1.com_main", в tpl вызов примет вид:

%menu draw(%domain%_main, 'default')%

а в xslt, на примере demodizzy:

<xsl:apply-templates select="document(concat('udata://menu/draw/', $domain, '_main'))/udata" mode="info-pages-head" />