Перейти к содержанию
Официальный форум поддержки Simpla

Определение в шаблоне типа устройства


Рекомендуемые сообщения

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

 

1. Добавляем в API новый класс, файл MobileDetect.php помещаем в папку /api

Скачать класс https://cloud.mail.ru/public/LDag/eUPi9nMx6

 

2. Открываем /api/Simpla.php и добавляем в массив $classes новый элемент 'mobiledetect' => 'MobileDetect':

private $classes = array(
	'config'     => 'Config',
	... тут еще куча классов ...
	'mobiledetect'   => 'MobileDetect'
);

3. В файл /view/View.php находим пару строк:

$this->design->assign('config',		$this->config);
$this->design->assign('settings',	$this->settings);

и сразу ПОСЛЕ них добавляем:

 

// Определяем устройство с которого открывают сайт
if (!isset($_SESSION['device']) || empty($_SESSION['device']))
	$_SESSION['device'] = ($this->mobiledetect->isMobile() ? ($this->mobiledetect->isTablet() ? 'tablet' : 'phone') : 'computer');
$this->design->assign('device',	$_SESSION['device']);

 

4. PROFIT!!!

 

Готово, теперь в шблоне можно юзать переменную {$device} которая будет возвращать следующие значения:

phone - мобильник

tablet - планшет

computer - компьютер

 

Пример использования:

{if $device == 'tablet'}
	<b>Вы зашли с планшета</b>
{/if}
Изменено пользователем Gloobus
Ссылка на сообщение
Поделиться на другие сайты

В симпле есть функция определения устройства, смотрите api/Design.php.

она старая и ужасна, к тому же функция eregi deprecated в каком то php  :)

Ссылка на сообщение
Поделиться на другие сайты

она старая и ужасна, к тому же функция eregi deprecated в каком то php  :)

Как и сама симпла собрана с разных кусков интернетов :D
Ссылка на сообщение
Поделиться на другие сайты

В симпле есть функция определения устройства, смотрите api/Design.php.

 

Используемый мной класс более современен, имеет больше возможностей определения типа мобильного устройства (иос, андроид, и т.п.) что позволит подсунуть ссылку на магазин мобильных приложений. Так же версию браузера и другое.

http://mobiledetect.net

 

она старая и ужасна, к тому же функция eregi deprecated в каком то php  :)

 

Эта функция объявлена УСТАРЕВШЕЙ в PHP 5.3.0, и УДАЛЕНА PHP 7.0.0.

Ссылка на сообщение
Поделиться на другие сайты

Используемый мной класс более современен, имеет больше возможностей определения типа мобильного устройства (иос, андроид, и т.п.) что позволит подсунуть ссылку на магазин мобильных приложений. Так же версию браузера и другое.

http://mobiledetect.net

 

 

Эта функция объявлена УСТАРЕВШЕЙ в PHP 5.3.0, и УДАЛЕНА PHP 7.0.0.

Ну так не проще обновить функцию чем инклудить еще один лишний класс? Или легких и правильных путей не ищем, а любим все усложнять?
Ссылка на сообщение
Поделиться на другие сайты

Ну так не проще обновить функцию чем инклудить еще один лишний класс? Или легких и правильных путей не ищем, а любим все усложнять?

 

Зачем изобретать велосипед, если уже есть готовый класс с необходимым функционалом? Чем плох вариант инклуда дополнительного класса?

Ссылка на сообщение
Поделиться на другие сайты

Добавлять новый класс или менять существующий - разница не велика.

А вот если бы предложенный класс вызвать не всегда, а лишь при первом заходе, а при последующих брать данные браузера из сессии, то было бы более рационально и экономно. Все-таки класс весит 70К и включает немалые текстовые обработки...

Ссылка на сообщение
Поделиться на другие сайты

Добавлять новый класс или менять существующий - разница не велика.

А вот если бы предложенный класс вызвать не всегда, а лишь при первом заходе, а при последующих брать данные браузера из сессии, то было бы более рационально и экономно. Все-таки класс весит 70К и включает немалые текстовые обработки...

 

Как вариант, замена шага 3:

if (isset($_SESSION['device']))
	$deviceType = $_SESSION['device'];
else
	$deviceType = ($this->mobiledetect->isMobile() ? ($this->mobiledetect->isTablet() ? 'tablet' : 'phone') : 'computer');
$this->design->assign('device',	$deviceType);

 

Как выводить сообщение только для пользователей iOS?

 

Пример:

if ($this->mobiledetect->isiOS()) {
    echo "Вы пользователь Яблока!";
}
Ссылка на сообщение
Поделиться на другие сайты

 

Как вариант, замена шага 3:

if (isset($_SESSION['device']))
	$deviceType = $_SESSION['device'];
else
	$deviceType = ($this->mobiledetect->isMobile() ? ($this->mobiledetect->isTablet() ? 'tablet' : 'phone') : 'computer');
$this->design->assign('device',	$deviceType);

 

По-моему, Ваш "как вариант" реально не даст никаких изменений. Ведь $_SESSION['device'] нигде не задается.

Ссылка на сообщение
Поделиться на другие сайты

По-моему, Ваш "как вариант" реально не даст никаких изменений. Ведь $_SESSION['device'] нигде не задается.

 

Жестоко затупил :)

 

if (!isset($_SESSION['device']) || empty($_SESSION['device']))
	$_SESSION['device'] = ($this->mobiledetect->isMobile() ? ($this->mobiledetect->isTablet() ? 'tablet' : 'phone') : 'computer');
$this->design->assign('device',	$_SESSION['device']);

Ссылка на сообщение
Поделиться на другие сайты

Можете подсказать как то же самое проделать в версии 1.4?

По 1.4 вообще ничего нет. Полдня провел в поисках информации о том как вывести свою переменную в шаблоне.

Ссылка на сообщение
Поделиться на другие сайты

Можете подсказать как то же самое проделать в версии 1.4?

По 1.4 вообще ничего нет. Полдня провел в поисках информации о том как вывести свою переменную в шаблоне.

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

Фрилансеров работающих с первой симплой можно на пальцах посчитать, лучше обновитесь.

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

Ссылка на сообщение
Поделиться на другие сайты

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

Если чистая симпла то достаточно переменные в шаблоне заменить и переименовать один файл, БД тоже перенести не проблема.

Я вам лишь посоветовал как лучше для дальнейшего поступить, а решение принимать вам.

Ссылка на сообщение
Поделиться на другие сайты
  • 3 недели спустя...
  • 1 месяц спустя...

подскажи пожалуйста ввожу в шаблоне index.tpl

{if $device == 'tablet'}
    <b>Вы зашли с планшета</b>
{if}

у меня ошибка выходит 

 

 

Fatal error: Uncaught --> Smarty Compiler: Syntax error in template "/var/www/u0315571/data/www/xx.ru/design/bexam_default/html/sidebar.tpl" on line 120 "{if}" missing if condition <-- thrown in /var/www/u0315571/data/www/xx.ru/Smarty/libs/sysplugins/smarty_internal_templatecompilerbase.php on line 120
 

как вывести в шаблоне?

Ссылка на сообщение
Поделиться на другие сайты
  • 1 год спустя...

Полезная вещь, спасибо! У меня вопрос только по поду кеша... if вставлен в хеадер index.tpl, в конфиге включен кеш смарти, правильно ли я понимаю, что при заходе с мобилы кешиться будет мобильная версия, а если затем зайти с компьютера, то кеш затрётся версией для ПК? Если да, то есть какая-то возможность разделить эти кеши?

Изменено пользователем Zorg
Ссылка на сообщение
Поделиться на другие сайты

Нет, неправильно. Файл кеша - ОДИН, но в нем прописаны условия типа  {if $device =='tablet'}
Поэтому результаты работы шаблона для разных устройств будут разные...

Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...