Jump to content

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


Recommended Posts

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

 

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}
Edited by Gloobus
Link to post
Share on other sites

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

 

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

http://mobiledetect.net

 

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

 

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

Link to post
Share on other sites

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

http://mobiledetect.net

 

 

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

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

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

 

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

Link to post
Share on other sites

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

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

Link to post
Share on other sites

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

А вот если бы предложенный класс вызвать не всегда, а лишь при первом заходе, а при последующих брать данные браузера из сессии, то было бы более рационально и экономно. Все-таки класс весит 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 "Вы пользователь Яблока!";
}
Link to post
Share on other sites

 

Как вариант, замена шага 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'] нигде не задается.

Link to post
Share on other sites

По-моему, Ваш "как вариант" реально не даст никаких изменений. Ведь $_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']);

Link to post
Share on other sites

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

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

Link to post
Share on other sites

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

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

Фрилансеров работающих с первой симплой можно на пальцах посчитать, лучше обновитесь.
Link to post
Share on other sites

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

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

Link to post
Share on other sites

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

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

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

Link to post
Share on other sites
  • 3 weeks later...
  • 1 month later...

подскажи пожалуйста ввожу в шаблоне 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
 

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

Link to post
Share on other sites
  • 1 year later...

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

Edited by Zorg
Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...