Gloobus Posted January 21, 2017 Report Share Posted January 21, 2017 (edited) И так, если кому интересно, легкая доработка для определения в шаблоне витрины типа устройства, с которого заходит покупатель. Используя это, можно "гнуть" шаблон под определенный тип. 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 March 20, 2017 by Gloobus Quote Link to post Share on other sites
Noxter Posted January 21, 2017 Report Share Posted January 21, 2017 В симпле есть функция определения устройства, смотрите api/Design.php. Quote Link to post Share on other sites
osben Posted January 21, 2017 Report Share Posted January 21, 2017 В симпле есть функция определения устройства, смотрите api/Design.php.она старая и ужасна, к тому же функция eregi deprecated в каком то php Quote Link to post Share on other sites
Noxter Posted January 21, 2017 Report Share Posted January 21, 2017 она старая и ужасна, к тому же функция eregi deprecated в каком то php Как и сама симпла собрана с разных кусков интернетов Quote Link to post Share on other sites
Gloobus Posted January 22, 2017 Author Report Share Posted January 22, 2017 В симпле есть функция определения устройства, смотрите api/Design.php. Используемый мной класс более современен, имеет больше возможностей определения типа мобильного устройства (иос, андроид, и т.п.) что позволит подсунуть ссылку на магазин мобильных приложений. Так же версию браузера и другое.http://mobiledetect.net она старая и ужасна, к тому же функция eregi deprecated в каком то php Эта функция объявлена УСТАРЕВШЕЙ в PHP 5.3.0, и УДАЛЕНА PHP 7.0.0. Quote Link to post Share on other sites
Noxter Posted January 22, 2017 Report Share Posted January 22, 2017 Используемый мной класс более современен, имеет больше возможностей определения типа мобильного устройства (иос, андроид, и т.п.) что позволит подсунуть ссылку на магазин мобильных приложений. Так же версию браузера и другое.http://mobiledetect.net Эта функция объявлена УСТАРЕВШЕЙ в PHP 5.3.0, и УДАЛЕНА PHP 7.0.0.Ну так не проще обновить функцию чем инклудить еще один лишний класс? Или легких и правильных путей не ищем, а любим все усложнять? Quote Link to post Share on other sites
Gloobus Posted January 22, 2017 Author Report Share Posted January 22, 2017 Ну так не проще обновить функцию чем инклудить еще один лишний класс? Или легких и правильных путей не ищем, а любим все усложнять? Зачем изобретать велосипед, если уже есть готовый класс с необходимым функционалом? Чем плох вариант инклуда дополнительного класса? Quote Link to post Share on other sites
ahmed Posted January 22, 2017 Report Share Posted January 22, 2017 Добавлять новый класс или менять существующий - разница не велика.А вот если бы предложенный класс вызвать не всегда, а лишь при первом заходе, а при последующих брать данные браузера из сессии, то было бы более рационально и экономно. Все-таки класс весит 70К и включает немалые текстовые обработки... Quote Link to post Share on other sites
Julius123 Posted January 23, 2017 Report Share Posted January 23, 2017 Как выводить сообщение только для пользователей iOS? Quote Link to post Share on other sites
Gloobus Posted January 23, 2017 Author Report Share Posted January 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 "Вы пользователь Яблока!"; } Quote Link to post Share on other sites
ahmed Posted January 24, 2017 Report Share Posted January 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'] нигде не задается. Quote Link to post Share on other sites
Gloobus Posted January 24, 2017 Author Report Share Posted January 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']); Quote Link to post Share on other sites
psyh Posted January 28, 2017 Report Share Posted January 28, 2017 Можете подсказать как то же самое проделать в версии 1.4?По 1.4 вообще ничего нет. Полдня провел в поисках информации о том как вывести свою переменную в шаблоне. Quote Link to post Share on other sites
Noxter Posted January 28, 2017 Report Share Posted January 28, 2017 Можете подсказать как то же самое проделать в версии 1.4? По 1.4 вообще ничего нет. Полдня провел в поисках информации о том как вывести свою переменную в шаблоне.Фрилансеров работающих с первой симплой можно на пальцах посчитать, лучше обновитесь. Quote Link to post Share on other sites
psyh Posted January 28, 2017 Report Share Posted January 28, 2017 Фрилансеров работающих с первой симплой можно на пальцах посчитать, лучше обновитесь.Для данной задачи это из пушки по воробьям было бы. Тем более, насколько я понимаю нельзя просто обновить движок, многое переписывать придется. Quote Link to post Share on other sites
Noxter Posted January 28, 2017 Report Share Posted January 28, 2017 Для данной задачи это из пушки по воробьям было бы. Тем более, насколько я понимаю нельзя просто обновить движок, многое переписывать придется.Если чистая симпла то достаточно переменные в шаблоне заменить и переименовать один файл, БД тоже перенести не проблема.Я вам лишь посоветовал как лучше для дальнейшего поступить, а решение принимать вам. Quote Link to post Share on other sites
bananovsv Posted February 17, 2017 Report Share Posted February 17, 2017 Gloobus, сделал всё по инструкции, работает, но значение в сессию не добавляется. У вас точно работает это? Quote Link to post Share on other sites
Furu Posted March 17, 2017 Report Share Posted March 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 как вывести в шаблоне? Quote Link to post Share on other sites
Noxter Posted March 17, 2017 Report Share Posted March 17, 2017 {/if} Quote Link to post Share on other sites
Zorg Posted December 21, 2018 Report Share Posted December 21, 2018 (edited) Полезная вещь, спасибо! У меня вопрос только по поду кеша... if вставлен в хеадер index.tpl, в конфиге включен кеш смарти, правильно ли я понимаю, что при заходе с мобилы кешиться будет мобильная версия, а если затем зайти с компьютера, то кеш затрётся версией для ПК? Если да, то есть какая-то возможность разделить эти кеши? Edited December 21, 2018 by Zorg Quote Link to post Share on other sites
phukortsin Posted December 22, 2018 Report Share Posted December 22, 2018 Нет, неправильно. Файл кеша - ОДИН, но в нем прописаны условия типа {if $device =='tablet'}Поэтому результаты работы шаблона для разных устройств будут разные... Quote Link to post Share on other sites
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.