Мобильное меню

Материал из Umicms
Перейти к:навигация, поиск

Статья предоставлена партнером UMI.CMS Дмитрием Путилиным

Актуально для версии 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" />