Мобильное меню
Статья предоставлена партнером UMI.CMS Дмитрием Путилиным [1]
Актуально для версии 2.18.
Мы будем делать мобильное меню на основе menu draw.
Для этого нам понадобится следующее – небольшой файл с кодом вызова меню, стиль меню.
Важно! Меню будет вызываться из отдельного файла по причине возможности существования 2х и более шаблонов для страниц сайта.
Порядок работы.
Создадим меню в модуле Меню (для примера идентификатор меню выбран как verxm).
Напишем отдельный xsl файл для обработки меню. Назовем его mobmenu.xsl (файл создается в папке \templates\имя шаблона\xslt\layouts).
Содержимое файла будет следующим:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xsl:stylesheet SYSTEM "ulang://i18n/constants.dtd:file">
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template name="mmenu1">
<nav>
<input type="checkbox" id="btn-menu" />
<label for="btn-menu"> Меню</label>
<ul class="list-menu">
<xsl:apply-templates select="document('udata://menu/draw/verxm')/udata" mode="info-pages-head" />
</ul>
</nav>
</xsl:template>
</xsl:stylesheet>
Далее в файле стилей нашего сайта пропишем стиль меню:
/* mobile menu */
.list-menu{
display: flex;
list-style: none;
}
.list-menu > li > a{
color: #000;
display: block;
padding: 5px 15px;
}
.list-menu > li > a:hover{
background: #fff;
}
#btn-menu{
display: none;
}
#btn-menu + label{
display: none;
position: relative;
color: #000;
height: 20px;
z-index: 1;
cursor: pointer;
}
#btn-menu + label:before{
content: '\f0c9';
display: inline-block;
font-family:'FontAwesome';
font-size: 22px;
}
#btn-menu:checked + label:before{
content: '\f00d';
color: #f00;
}
@media screen and (max-width: 800px) {
input.button.search {left: 5px;
position: absolute;
margin-top: -27px;}
#btn-menu + label{
display: inline-block;
font-weight: 600;
font-size: 21px;
}
#btn-menu + label + .list-menu{
display: none;
}
#btn-menu:checked + label + .list-menu{
display: block;
margin-top: 20px;
}
nav{
background: #fcd62d;
padding: 15px;
display:block!important;
position: relative;
top: 0;
width: 100%;
z-index: 99;
}
ul.list-menu li a {
padding: 10 20;
color: black;
text-decoration: none;
font-weight: 600;
width: 100%;
display: block;
text-transform: uppercase;
}
ul.list-menu li a:hover {color: white}
ul.list-menu li:hover {background: #0f55aa;}
}
nav {display:none}
После чего мы можем воспользоваться вызовом нашего меню в том месте шаблона, где нам требуется:
<xsl:call-template name="mmenu1" />
Заметка. Вызов меню можно заключить в div для использования дополнительных действий, к примеру, абсолютного или фиксированного позиционирования.
Важно! Не забываем подключить созданный файл в наш шаблон:
<xsl:include href="layouts/mobmenu.xsl" />
ВАЖНО! Данная сборка делалась на основе demodizzy (стандартного демо-шаблона), если у вас отсутствует этот шаблон, было проведено обновление системы с версии Lite или у вас собственный шаблон то убедитесь, что содержимое файла \templates\ваш шаблон\xslt\modules\menu\common.xsl соответствует указанному:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xsl:stylesheet SYSTEM "ulang://mobile/i18n/constants.dtd:file">
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:umi="http://www.umi-cms.ru/TR/umi">
<!-- Header menu -->
<xsl:template match="udata[@module = 'menu']" mode="info-pages-head">
<ul>
<xsl:apply-templates select="item" mode="info-pages-head" />
</ul>
</xsl:template>
<xsl:template match="udata[@module = 'menu']/item" mode="info-pages-head">
<li>
<a href="{@link}">
<xsl:value-of select="node()" />
</a>
</li>
</xsl:template>
</xsl:stylesheet>
И что данный файл подключен в основном шаблоне:
<xsl:include href="modules/menu/common.xsl" />