Как в модуле меню привязать меню к домену — различия между версиями
Mad grant (обсуждение | вклад) м (переименовал «Как сделать универсальный xsl шаблон меню в мультисайтовости» в «[[Как сделать универсальный xslt шаблон меню в мультисайтов�) |
Mad grant (обсуждение | вклад) |
||
(не показано 8 промежуточных версий этого же участника) | |||
Строка 7: | Строка 7: | ||
[[Файл:2sitein1cms.png]] | [[Файл:2sitein1cms.png]] | ||
− | На обоих сайтах используется один и тот же | + | На обоих сайтах используется один и тот же шаблон. |
− | Вы хотите внедрить модуль меню, но для вызова меню Вам нужно будет подставлять идентификатор меню, а их у Вас создано два. | + | Вы хотите внедрить модуль меню, но для вызова меню Вам нужно будет подставлять идентификатор меню, а их (меню) у Вас создано два. |
== Решение == | == Решение == | ||
Строка 24: | Строка 24: | ||
<li>В xslt шаблоне текущий домен доступен в result'е:</li> | <li>В xslt шаблоне текущий домен доступен в result'е:</li> | ||
[[Файл:Result-@domain.png]] | [[Файл:Result-@domain.png]] | ||
− | + | ||
+ | Поэтому подставить его с помощью 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 | + | Если же для каждого сайта создано несколько меню, то используйте домен в качестве префикса, то есть |
+ | ид меню будет иметь вид "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:
На обоих сайтах используется один и тот же шаблон.
Вы хотите внедрить модуль меню, но для вызова меню Вам нужно будет подставлять идентификатор меню, а их (меню) у Вас создано два.
Решение
Чтобы сохранить универсальность шаблона, необходимо будет динамически подставлять в вызов макроса menu draw() тот или иной идентификатор меню, в зависимости от домена.
Проще всего задачу можно решить следующим образом,
- У созданных меню укажите в качестве идентификатора домен, к которому они относятся:
- В xslt шаблоне текущий домен доступен в result'е:
- В tpl получить текущий домен можно с помощью глобального макроса %domain%, то есть вызов примет вид:
Поэтому подставить его с помощью 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" />
%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" />