Gloobus Опубликовано 21 января, 2017 Жалоба Поделиться Опубликовано 21 января, 2017 (изменено) И так, если кому интересно, легкая доработка для определения в шаблоне витрины типа устройства, с которого заходит покупатель. Используя это, можно "гнуть" шаблон под определенный тип. 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} Изменено 20 марта, 2017 пользователем Gloobus Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 21 января, 2017 Жалоба Поделиться Опубликовано 21 января, 2017 В симпле есть функция определения устройства, смотрите api/Design.php. Цитата Ссылка на сообщение Поделиться на другие сайты
osben Опубликовано 21 января, 2017 Жалоба Поделиться Опубликовано 21 января, 2017 В симпле есть функция определения устройства, смотрите api/Design.php.она старая и ужасна, к тому же функция eregi deprecated в каком то php Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 21 января, 2017 Жалоба Поделиться Опубликовано 21 января, 2017 она старая и ужасна, к тому же функция eregi deprecated в каком то php Как и сама симпла собрана с разных кусков интернетов Цитата Ссылка на сообщение Поделиться на другие сайты
Gloobus Опубликовано 22 января, 2017 Автор Жалоба Поделиться Опубликовано 22 января, 2017 В симпле есть функция определения устройства, смотрите api/Design.php. Используемый мной класс более современен, имеет больше возможностей определения типа мобильного устройства (иос, андроид, и т.п.) что позволит подсунуть ссылку на магазин мобильных приложений. Так же версию браузера и другое.http://mobiledetect.net она старая и ужасна, к тому же функция eregi deprecated в каком то php Эта функция объявлена УСТАРЕВШЕЙ в PHP 5.3.0, и УДАЛЕНА PHP 7.0.0. Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 22 января, 2017 Жалоба Поделиться Опубликовано 22 января, 2017 Используемый мной класс более современен, имеет больше возможностей определения типа мобильного устройства (иос, андроид, и т.п.) что позволит подсунуть ссылку на магазин мобильных приложений. Так же версию браузера и другое.http://mobiledetect.net Эта функция объявлена УСТАРЕВШЕЙ в PHP 5.3.0, и УДАЛЕНА PHP 7.0.0.Ну так не проще обновить функцию чем инклудить еще один лишний класс? Или легких и правильных путей не ищем, а любим все усложнять? Цитата Ссылка на сообщение Поделиться на другие сайты
Gloobus Опубликовано 22 января, 2017 Автор Жалоба Поделиться Опубликовано 22 января, 2017 Ну так не проще обновить функцию чем инклудить еще один лишний класс? Или легких и правильных путей не ищем, а любим все усложнять? Зачем изобретать велосипед, если уже есть готовый класс с необходимым функционалом? Чем плох вариант инклуда дополнительного класса? Цитата Ссылка на сообщение Поделиться на другие сайты
ahmed Опубликовано 22 января, 2017 Жалоба Поделиться Опубликовано 22 января, 2017 Добавлять новый класс или менять существующий - разница не велика.А вот если бы предложенный класс вызвать не всегда, а лишь при первом заходе, а при последующих брать данные браузера из сессии, то было бы более рационально и экономно. Все-таки класс весит 70К и включает немалые текстовые обработки... Цитата Ссылка на сообщение Поделиться на другие сайты
Julius123 Опубликовано 23 января, 2017 Жалоба Поделиться Опубликовано 23 января, 2017 Как выводить сообщение только для пользователей iOS? Цитата Ссылка на сообщение Поделиться на другие сайты
Gloobus Опубликовано 23 января, 2017 Автор Жалоба Поделиться Опубликовано 23 января, 2017 Добавлять новый класс или менять существующий - разница не велика.А вот если бы предложенный класс вызвать не всегда, а лишь при первом заходе, а при последующих брать данные браузера из сессии, то было бы более рационально и экономно. Все-таки класс весит 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 "Вы пользователь Яблока!"; } Цитата Ссылка на сообщение Поделиться на другие сайты
ahmed Опубликовано 24 января, 2017 Жалоба Поделиться Опубликовано 24 января, 2017 Как вариант, замена шага 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'] нигде не задается. Цитата Ссылка на сообщение Поделиться на другие сайты
Gloobus Опубликовано 24 января, 2017 Автор Жалоба Поделиться Опубликовано 24 января, 2017 По-моему, Ваш "как вариант" реально не даст никаких изменений. Ведь $_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']); Цитата Ссылка на сообщение Поделиться на другие сайты
psyh Опубликовано 28 января, 2017 Жалоба Поделиться Опубликовано 28 января, 2017 Можете подсказать как то же самое проделать в версии 1.4?По 1.4 вообще ничего нет. Полдня провел в поисках информации о том как вывести свою переменную в шаблоне. Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 28 января, 2017 Жалоба Поделиться Опубликовано 28 января, 2017 Можете подсказать как то же самое проделать в версии 1.4? По 1.4 вообще ничего нет. Полдня провел в поисках информации о том как вывести свою переменную в шаблоне.Фрилансеров работающих с первой симплой можно на пальцах посчитать, лучше обновитесь. Цитата Ссылка на сообщение Поделиться на другие сайты
psyh Опубликовано 28 января, 2017 Жалоба Поделиться Опубликовано 28 января, 2017 Фрилансеров работающих с первой симплой можно на пальцах посчитать, лучше обновитесь.Для данной задачи это из пушки по воробьям было бы. Тем более, насколько я понимаю нельзя просто обновить движок, многое переписывать придется. Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 28 января, 2017 Жалоба Поделиться Опубликовано 28 января, 2017 Для данной задачи это из пушки по воробьям было бы. Тем более, насколько я понимаю нельзя просто обновить движок, многое переписывать придется.Если чистая симпла то достаточно переменные в шаблоне заменить и переименовать один файл, БД тоже перенести не проблема.Я вам лишь посоветовал как лучше для дальнейшего поступить, а решение принимать вам. Цитата Ссылка на сообщение Поделиться на другие сайты
bananovsv Опубликовано 17 февраля, 2017 Жалоба Поделиться Опубликовано 17 февраля, 2017 Gloobus, сделал всё по инструкции, работает, но значение в сессию не добавляется. У вас точно работает это? Цитата Ссылка на сообщение Поделиться на другие сайты
Furu Опубликовано 17 марта, 2017 Жалоба Поделиться Опубликовано 17 марта, 2017 подскажи пожалуйста ввожу в шаблоне 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 как вывести в шаблоне? Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 17 марта, 2017 Жалоба Поделиться Опубликовано 17 марта, 2017 {/if} Цитата Ссылка на сообщение Поделиться на другие сайты
Zorg Опубликовано 21 декабря, 2018 Жалоба Поделиться Опубликовано 21 декабря, 2018 (изменено) Полезная вещь, спасибо! У меня вопрос только по поду кеша... if вставлен в хеадер index.tpl, в конфиге включен кеш смарти, правильно ли я понимаю, что при заходе с мобилы кешиться будет мобильная версия, а если затем зайти с компьютера, то кеш затрётся версией для ПК? Если да, то есть какая-то возможность разделить эти кеши? Изменено 21 декабря, 2018 пользователем Zorg Цитата Ссылка на сообщение Поделиться на другие сайты
phukortsin Опубликовано 22 декабря, 2018 Жалоба Поделиться Опубликовано 22 декабря, 2018 Нет, неправильно. Файл кеша - ОДИН, но в нем прописаны условия типа {if $device =='tablet'}Поэтому результаты работы шаблона для разных устройств будут разные... Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.