Решение: Laravel @ в зависимости от девайса выводить контент

Тема в разделе "PHP", создана пользователем sturmwaggen, 18 янв 2018.

Модераторы: latteo
  1. sturmwaggen

    sturmwaggen Постоялец

    Регистр.:
    22 ноя 2016
    Сообщения:
    61
    Симпатии:
    30
    Привет !
    В общем, сделал большую ошибку, не начал писать стили для моб.девайсов, в результате потратил кучу времени, определение через media screen не всегда работало и стал гуглить.

    Нашел отличное решение, для тех кто пишт под Laravel.
    Работает так
    Код:
    @if ($agent->isMobile())
    мобилко
    @else
    вебко
    @endif
    
    Можно проверять и девайсы и версии и тд и тп.
    Код:
    $agent->is('Windows');
    $agent->is('Firefox');
    $agent->is('iPhone');
    $agent->is('OS X');
    
    $agent->isAndroidOS();
    $agent->isNexus();
    $agent->isSafari();
    
    $agent->isMobile();
    $agent->isTablet();
    
    разработчик: https://github.com/jenssegers/agent

    Работает на ура.

    Как установить:
    1. composer require jenssegers/agent
    2. php artisan make:provider AgentServiceProvider
    3. В config/app.php ->
    Код:
    App\Providers\AgentServiceProvider::class,
    
    4. В app/providers/AgentServiceProvider.php
    Код:
    <?php namespace App\Providers; use View; use Jenssegers\Agent\Agent; use Illuminate\Support\ServiceProvider; class AgentServiceProvider extends ServiceProvider { public function boot() { $agent = new Agent(); View::share('agent', $agent); } public function register() { // } }
    
    5. В нужном месте шаблона
    Код:
    @if ($agent->isMobile()) Show mobile stuff... @endif
    
     
  2. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.609
    Симпатии:
    1.538
    10-15 лет назад это имело смысл. Современный CSS позволяет делать очень крутые вещи и если есть необходимость верстать под разные устройства лучше делать всё таки на CSS.

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

    Загонять в один шаблон кучу if очень плохая идея с точки зрения поддержки кода. Уже через месяц обрастёте кучей if и работать с таким шаблоном будет всё сложнее и сложнее.
     
    Nei нравится это.
  3. sturmwaggen

    sturmwaggen Постоялец

    Регистр.:
    22 ноя 2016
    Сообщения:
    61
    Симпатии:
    30
    Я с Вами согласен, но дело в том, что нет времени переписывать все CSS стили под мобилки :) Точнее сайт написал 50% на 50%, 50% это новый CSS, который писал студент, без учета media screen, а у меня нет времени :(
    Поэтому нашел такое решение, темболее меня больше заинтересовало наличие
    Код:
    $agent->is('Windows');
    $agent->is('Firefox');
    $agent->is('iPhone');
    $agent->is('OS X');
    
    $agent->isAndroidOS();
    $agent->isNexus();
    $agent->isSafari();
    
    $agent->isMobile();
    $agent->isTablet();
    
    У меня сайт специфический поэтому "играться" и выдавать под разные ОС свой контент очень важно :)
     
  4. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.609
    Симпатии:
    1.538
    Для контента это замечательное решение. К примеру, если это раздача софта с разными версиями под разные ОС или расширения браузеров.
    Для более точного таргетинга рекламы еще можно использовать.
    Для вирусни...

    А вот разделение CSS приведёт к экономии времени сейчас и гораздо большему времени потом. Я с таким кодом как-то имел дело - логику запили за 15 минут, а вывод через шаблонизатор пилил 2 часа, потому как там было несколько десятков if и большую часть из них надо было менять и тестировать. Такой подход допустим только в случае прототипа, там действительно чем быстрее тем лучше. Если же стоит задача делать сайт, который будет поддерживаться и дополняться, то это явный технический долг, который выплачивать надо будет с процентами.
     
  5. sturmwaggen

    sturmwaggen Постоялец

    Регистр.:
    22 ноя 2016
    Сообщения:
    61
    Симпатии:
    30
    offtopic: куда ж без него :)))) на основной работе, после рефакторинга там tech debt на год наверное.
    поддерживаю.
    После вчерашнего Вашего комментария, решил все таки переделать все под CSS, придется пожертвовать спринтом :(

    Но отказываться от этого решения я не могу, ибо так идеальная поддержка
    Код:
    $agent->is('Windows');
    $agent->is('iPhone');
    
    для меня это архи важно.

    offtopic: latteo, вы ведь гуру php? Подскажите..куда копать
    Есть Input field и кнопка "создать", которая ведет на создание заказа. (*.com/task/add)

    Задача:
    Человек вводит в Input field "требуется создать макет сайта" и нажимает "создать", сл-но то открывается через POST страница добавления заказа, и что было вписано в Input field-е, должно автоматически добавиться в input field на странице task/add


    UPD2: пытался как-то запомнить содержимое первого Input Field, и потом его передать его на страницу формирования заказа.
    Думал как-то через variables передать, но судя по всему не правильное решение.
     
    Последнее редактирование: 19 янв 2018
  6. funnywheel

    funnywheel WordPress developer

    Регистр.:
    6 авг 2010
    Сообщения:
    255
    Симпатии:
    209
    Кнопка создать - это что? Ссылка (<a href="/task/add"></a>)?

    Передалайте на форму с сабмитом.

    <form action="/task/add" method="post">
    input[type='text] + input[type='submit']
    </form>

    а в контроллере, который у вас отрабатывает на /task/add ловите $_POST и подставляете в value инпута уже на этой странице
     
    sturmwaggen нравится это.
  7. mSnus

    mSnus Постоялец

    Регистр.:
    4 дек 2015
    Сообщения:
    76
    Симпатии:
    28
    Используйте UIKit или Bootstrap при вёрстке, и будет у вас нормально всё под любые мобилы.
    Вручную писать отдельно для iOS, отдельно для всего зоопарка броузеров под Android - очень муторно и неправильно. Потом ещё и под планшеты отдельно, под телефоны отдельно.. не надо так.