UMIhelp

Разработка сайта на UMI.CMS => JS и AJAX => Тема начата: webtrend от 09 Апреля 2016, 12:35:52

Название: Изменение разрешения экрана в моб. версии сайта
Отправлено: webtrend от 09 Апреля 2016, 12:35:52
Добрый день, как мы все знаем в Юми есть мобильная версия сайта, файлы которой находятся в папке mobile. Так вот данная версия сайта открывается и на планшетах, Задача сделать некую проверку или что то вроде того чтобы моб.версия подхватывалась только на определенных разрешениях экрана. Кто нибудь сталкивался с этим?
Ответ службы заботы Юми
Это можно реализовать. Например, можно делать в клиентской части произвольную проверку на размер экрана/user-agent и т.д. и в зависимости от результата вызывать макрос content getMobileModesList() http://dev.docs.umi-cms.ru/spravochnik_makrosov_umicms/struktura_i_kontent/content_getmobilemodeslist/ (например, через ajax) и переключать режим на мобильный, только если пройдены все проверки.

А как реализовать данный девайс непонятно(
Название: Re: Изменение разрешения экрана в моб. версии сайта
Отправлено: e.ioffe от 09 Апреля 2016, 15:42:24
Работает с последней версией UMI (должно быть доступно событие systemPrepare).

В функции system_is_mobile файла libs/system.php есть проверка, установлена ли cookie 'is_mobile'. Если да - показывать мобильную версию, если нет - обычную.

Добавим свой обработчик события, который проверит тип устройства пользователя. Для этого воспользуемся сторонней библиотекой http://mobiledetect.net/

В папке /classes/modules/content/ext/

Добавляем файл common_content_check_tablet.php с содержанием:

class common_content_check_tablet {
    public function onSystemPrepareCheckTablet(iUmiEventPoint $eventPoint) {
        if($eventPoint->getMode() !== 'before') {
            return false;
        }

        require_once CURRENT_WORKING_DIR . '/libs/vendor/MobileDetect/Mobile_Detect.php'; /*(указываете путь до файла библиотеки)*/
$detect = new Mobile_Detect();

        if($detect->isTablet()) {
            setcookie('is_mobile', false); /*Устанавливаем значение в cookie*/
        }
}
}

В эту же папку добавляем файл events_content_check_tablet.php

new umiEventListener('systemPrepare', 'content', 'onSystemPrepareCheckTablet');

И файл permissions.content_check_tablet.php

$permissions = array(
'content' => array(
'onSystemPrepareCheckTablet',
)
);

Не проверял на боевом сайте - под рукой нет примера - но должно работать.
Название: Re: Изменение разрешения экрана в моб. версии сайта
Отправлено: webtrend от 09 Апреля 2016, 16:11:38
Проверили на боевом сайте, ни каких изменений не произошло, на планшете открывается моб. версия а не десктопная.
Папки /classes/modules/content/ext/ не было в системе создали, тестировали на umi 2.12
Название: Re: Изменение разрешения экрана в моб. версии сайта
Отправлено: aghigay от 10 Апреля 2016, 13:40:12
А сделать адаптивную верстку и убить механизм выдачи на мобильных других шаблонов не вариант?
Название: Re: Изменение разрешения экрана в моб. версии сайта
Отправлено: webtrend от 10 Апреля 2016, 16:30:30
Вариант, на данный момент так и есть, но необходимо именно для моб сделать отдельную легкую версию
Название: Re: Изменение разрешения экрана в моб. версии сайта
Отправлено: e.ioffe от 10 Апреля 2016, 22:17:00
Проверили на боевом сайте, ни каких изменений не произошло, на планшете открывается моб. версия а не десктопная.
Папки /classes/modules/content/ext/ не было в системе создали, тестировали на umi 2.12

Без доступа к сайту сложно сказать, что не так. Отправьте в ЛС - посмотрю на неделе.
Название: Re: Изменение разрешения экрана в моб. версии сайта
Отправлено: aghigay от 21 Апреля 2016, 11:42:33
Решили вопрос с мобильной UMI? Если решили - поделитесь как?
Название: Re: Изменение разрешения экрана в моб. версии сайта
Отправлено: webtrend от 21 Апреля 2016, 11:48:29
Да решили, спасибо e.ioffe
Работает с последней версией UMI (должно быть доступно событие systemPrepare).

В функции system_is_mobile файла libs/system.php есть проверка, установлена ли cookie 'is_mobile'. Если да - показывать мобильную версию, если нет - обычную.

Добавим свой обработчик события, который проверит тип устройства пользователя. Для этого воспользуемся сторонней библиотекой http://mobiledetect.net/

В папке /classes/modules/content/ext/

Добавляем файл common_content_check_tablet.php с содержанием:
<?php
class common_content_check_tablet {
    public function onSystemPrepareCheckTablet(iUmiEventPoint $eventPoint) {
        if($eventPoint->getMode() !== 'before') {
            return false;
        }

        require_once CURRENT_WORKING_DIR . '/libs/vendor/MobileDetect/Mobile_Detect.php'; /*(указываете путь до файла библиотеки)*/
$detect = new Mobile_Detect();

        $isTablet = $detect->isTablet();

        if($isTablet && system_is_mobile()) {
            setcookie("is_mobile", "0", null, "/");
            $this->redirect(getServer('HTTP_REFERER'));
        }
}
}

В эту же папку добавляем файл events_content_check_tablet.php

<?php
new umiEventListener('systemPrepare', 'content', 'onSystemPrepareCheckTablet');

?>

И файл permissions.content_check_tablet.php

<?php
$permissions = array(
'content' => array(
'onSystemPrepareCheckTablet',
)
);
?>

Проверяли на 11 и 12 версии все работает.
Название: Re: Изменение разрешения экрана в моб. версии сайта
Отправлено: crazygeorgio от 23 Апреля 2016, 22:10:29
если не секрет, что за условие && system_is_mobile()? зачем им дополнять?