UMIhelp

Разработка сайта на UMI.CMS => Шаблоны XSLT => Тема начата: ragivort от 09 Ноября 2016, 15:20:29

Название: Полная / Мобильная версия заменой мета тега
Отправлено: ragivort от 09 Ноября 2016, 15:20:29
Приветствую,
Сайт на XSLT адаптивная верстка.
Как сделать в мобильной версии кнопку перейти на полную версию.
Полная версия достигается заменой мета тега
 <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1.0,maximum-scale=2.0">
на
<meta name="viewport" content="width=1200">

Спасибо
Название: Re: Полная / Мобильная версия заменой мета тега
Отправлено: aghigay от 09 Ноября 2016, 17:35:57
А замена мета-тега достигается чем?
Название: Re: Полная / Мобильная версия заменой мета тега
Отправлено: ragivort от 09 Ноября 2016, 21:07:10
Не замена, а условие.
Если мобильная версия, то 1 тег, если включаем полную, то другой
На пхп делали так

<?php
session_start();
if($_GET['show_desktop_mode'] == 'true') {
    $_SESSION['desktopmode'] = 'true';
} else {
    $_SESSION['desktopmode'] = 'false';
}
?>


Теги

<?php
if($_SESSION['desktopmode'] == 'true') {
        //DESKTOP MODE, could be any width you want
        ?>
        <meta name="viewport" content="width=1200">
        <?php
    } else {
        // DEFAULT, utilize device width
        ?>
        <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1.0,maximum-scale=2.0">
        <?php
    } ?>


Кнопки

            if($_SESSION['desktopmode'] == 'true') {
               // Checking for desktop mode. If yes, provide device link  ?>
                <p class="view-device"><a href="?show_desktop_mode=false">Мобильная версия</a></p>
            <?php
            } else {
               // // Checking for desktop mode. If yes, provide Desktop link  ?>
            <p class="view-desktop"><a href="?show_desktop_mode=true">Полная версия сайта</a></p> <?php } ?>   

Вот тоже самое надо сделать на XSLT, не вникну как
Название: Re: Полная / Мобильная версия заменой мета тега
Отправлено: aghigay от 10 Ноября 2016, 00:13:22
Параметры прописываются через
<xsl:param name="desktopmode" />
<xsl:param name="show_desktop_mode" />
В данном случае не важно откуда они пришли: get-параметр или coockie
Условие - через
<xsl:if test=""></xsl:if>
Название: Re: Полная / Мобильная версия заменой мета тега
Отправлено: ragivort от 10 Ноября 2016, 11:55:08
Как в условиях присваивать переменным значения, которые до этого были определены
<xsl:param name="desktopmode" />
<xsl:param name="show_desktop_mode" />
Название: Re: Полная / Мобильная версия заменой мета тега
Отправлено: aghigay от 10 Ноября 2016, 11:59:10
<xsl:if test="$desktopmode = 1"></xsl:if>
Название: Re: Полная / Мобильная версия заменой мета тега
Отправлено: aghigay от 10 Ноября 2016, 11:59:45
http://umihelp.ru/forum/index.php?topic=1577.0
Название: Re: Полная / Мобильная версия заменой мета тега
Отправлено: ragivort от 10 Ноября 2016, 12:00:57
Это проверка, если дэсктоп 1
А если он 1, то переменной show_desktop_mode присвоить 0?
Название: Re: Полная / Мобильная версия заменой мета тега
Отправлено: aghigay от 10 Ноября 2016, 12:11:07
<xsl:variable name="vA">
     <xsl:choose>
      <xsl:when test="//B">1</xsl:when>
      <xsl:otherwise>2</xsl:otherwise>
     </xsl:choose>
   </xsl:variable>
Название: Re: Полная / Мобильная версия заменой мета тега
Отправлено: e.ioffe от 10 Ноября 2016, 12:13:01
Это решается не в шаблонизаторе, а на уровне кастомов.

В classes/modules/custom.php

public function checkDesktopMode() {
if($_GET['show_desktop_mode'] == 'true') {
$_SESSION['desktopmode'] = 'true';
} else {
$_SESSION['desktopmode'] = 'false';
}
}

public function getDesktopMode() {
return (int) getSession('desktopmode') == 'true';
}

в шаблоне
<xsl:choose>
<xsl:when test="document('udata://custom/getDesktopMode/')/udata = 1">
</xsl:when>
<xsl:otherwise>
</xsl:otherwise>
</xsl:choose>
Название: Re: Полная / Мобильная версия заменой мета тега
Отправлено: aghigay от 10 Ноября 2016, 12:27:18
Когда Евгений сказал "Это не решается" - он имел в виду сохранение значения в сессии не решается с помощью шаблонов XSLT, а только с помощью кастомов. :-)
Название: Re: Полная / Мобильная версия заменой мета тега
Отправлено: e.ioffe от 10 Ноября 2016, 12:33:57
Цитировать
Когда Евгений сказал "Это не решается" - он имел в виду сохранение значения в сессии не решается с помощью шаблонов XSLT, а только с помощью кастомов. :-)

Задача разбивается на две:
- логика
- отображение

С точки зрения дальнейшей поддержки, логика по максимуму должна быть в кастоме. Поэтому сохранение значений в сессий и проверка их должна быть в кастоме, в шаблоне только разные теги, которые зависят от ответа кастома.

Можно извращаться и делать все в шаблоне, но поддерживать такой код занятие неприятное и дорогое.
Название: Re: Полная / Мобильная версия заменой мета тега
Отправлено: ragivort от 11 Ноября 2016, 14:02:30
Когда в шаблон вставляю
<xsl:choose>
   <xsl:when test="document('udata://custom/getDesktopMode/')/udata = 1">
   </xsl:when>
   <xsl:otherwise>
   </xsl:otherwise>
</xsl:choose>

Белый экран
Название: Re: Полная / Мобильная версия заменой мета тега
Отправлено: aghigay от 11 Ноября 2016, 16:10:54
Включайте отладку и смотрите что за проблема
http://dev.docs.umi-cms.ru/nastrojka_sistemy/dostupnye_sekcii/sekciya_debug/#sel=5:1,6:3
Название: Re: Полная / Мобильная версия заменой мета тега
Отправлено: ragivort от 11 Ноября 2016, 16:32:41
Ошибку поправил

Сделал так

   <xsl:choose>
   <xsl:when test="document('udata://custom/getDesktopMode/')/udata = 1">
        
         <meta name="viewport" content="width=1200"/>
   </xsl:when>
   <xsl:otherwise>        
        <meta name="viewport" content="width=device-width, initial-scale=1"/>
   </xsl:otherwise>
   </xsl:choose>


Кнопки

   <xsl:choose>
   <xsl:when test="document('udata://custom/getDesktopMode/')/udata = 1">
          
          <p class="view-device"><a href="?show_desktop_mode=false">Мобильная версия</a></p>

   </xsl:when>
   <xsl:otherwise>
         <p class="view-desktop"><a href="?show_desktop_mode=true">Полная версия сайта</a></p>
   </xsl:otherwise>
   </xsl:choose>


При нажатии на полную версию, добавляется в адрес ?show_desktop_mode=true

Но ничего не происходит
Название: Re: Полная / Мобильная версия заменой мета тега
Отправлено: aghigay от 12 Ноября 2016, 02:03:30
А переменную show_desktop_mode в xsl:param в самом начале работы шаблонизатора объявили? Смотрите на аналогичную глобальную переменную <xsl:param name="p" />
Название: Re: Полная / Мобильная версия заменой мета тега
Отправлено: e.ioffe от 12 Ноября 2016, 17:21:46
Цитировать
Но ничего не происходит

Добавьте в начало шаблона <xsl:variable name="desktopMode" select="document('udata://custom/setDesktopMode/')/udata" />
Название: Re: Полная / Мобильная версия заменой мета тега
Отправлено: ragivort от 14 Ноября 2016, 11:26:17
А переменную show_desktop_mode в xsl:param в самом начале работы шаблонизатора объявили? Смотрите на аналогичную глобальную переменную <xsl:param name="p" />

Объявил

Цитировать
Но ничего не происходит

Добавьте в начало шаблона <xsl:variable name="desktopMode" select="document('udata://custom/setDesktopMode/')/udata" />

У меня в custom вот такие функции

   public function checkDesktopMode() {
   if($_GET['show_desktop_mode'] == 'true') {
      $_SESSION['desktopmode'] = 'true';
   } else {
      $_SESSION['desktopmode'] = 'false';
   }
}

public function getDesktopMode() {
   return (int) getSession('desktopmode') == 'true';
}


Какую переменную все-таки надо объявлять?

Сейчас на мобильных показывает полную версию. внизу кнопка мобильная версия, при нажатии добавляется
?show_desktop_mode=false
И ничего не происходит.

Мета теги:

   <xsl:choose>
   <xsl:when test="document('udata://custom/getDesktopMode/')/udata = 1">
        
                <meta name="viewport" content="width=1200"/>
   </xsl:when>
   <xsl:otherwise>
        
        <meta name="viewport" content="width=device-width, initial-scale=1"/>
   </xsl:otherwise>
   </xsl:choose>


Кнопки

   <xsl:choose>
   <xsl:when test="document('udata://custom/getDesktopMode/')/udata = 1">
                  <p class="view-device"><a href="?show_desktop_mode=false">Мобильная версия</a></p>


   </xsl:when>
   <xsl:otherwise>
             <p class="view-desktop"><a href="?show_desktop_mode=true">Полная версия сайта</a></p>

   </xsl:otherwise>
   </xsl:choose>
Название: Re: Полная / Мобильная версия заменой мета тега
Отправлено: ragivort от 15 Ноября 2016, 10:42:28
В custom.php оставил только

   public function checkDesktopMode() {
   if($_GET['show_desktop_mode'] == 'true') {
      $_SESSION['desktopmode'] = 'true';
   } else {
      $_SESSION['desktopmode'] = 'false';
   }
      return  $_SESSION['desktopmode'];
}


В шаблоне

Теги
   <xsl:choose>
   <xsl:when test="document('udata://custom/checkDesktopMode/')/udata = 'true'">
        
                <meta name="viewport" content="width=1200"/>
   </xsl:when>
   <xsl:otherwise>
        
        <meta name="viewport" content="width=device-width, initial-scale=1"/>
   </xsl:otherwise>
   </xsl:choose>

Кнопки:
   <xsl:choose>
   <xsl:when test="document('udata://custom/checkDesktopMode/')/udata = 'true'">
                  <p class="view-device"><a href="?show_desktop_mode=false">Мобильная версия</a></p>


   </xsl:when>
   <xsl:otherwise>
             <p class="view-desktop"><a href="?show_desktop_mode=true">Полная версия сайта</a></p>

   </xsl:otherwise>
   </xsl:choose>

Работает. Убрать в стилях только кнопки на десктопе