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

sturmwaggen

Постоялец
Регистрация
22 Ноя 2016
Сообщения
76
Реакции
49
Привет !
В общем, сделал большую ошибку, не начал писать стили для моб.девайсов, в результате потратил кучу времени, определение через 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();
разработчик: Для просмотра ссылки Войди или Зарегистрируйся

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

Как установить:
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
 
5. В нужном месте шаблона
Код:
@if ($agent->isMobile()) Show mobile stuff... @endif
10-15 лет назад это имело смысл. Современный CSS позволяет делать очень крутые вещи и если есть необходимость верстать под разные устройства лучше делать всё таки на CSS.

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

Загонять в один шаблон кучу if очень плохая идея с точки зрения поддержки кода. Уже через месяц обрастёте кучей if и работать с таким шаблоном будет всё сложнее и сложнее.
 
  • Нравится
Реакции: Nei
Я с Вами согласен, но дело в том, что нет времени переписывать все 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();
У меня сайт специфический поэтому "играться" и выдавать под разные ОС свой контент очень важно :)
 
Код:
$agent->is('Windows');
$agent->is('iPhone');
У меня сайт специфический поэтому "играться" и выдавать под разные ОС свой контент очень важно :)

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

А вот разделение CSS приведёт к экономии времени сейчас и гораздо большему времени потом. Я с таким кодом как-то имел дело - логику запили за 15 минут, а вывод через шаблонизатор пилил 2 часа, потому как там было несколько десятков if и большую часть из них надо было менять и тестировать. Такой подход допустим только в случае прототипа, там действительно чем быстрее тем лучше. Если же стоит задача делать сайт, который будет поддерживаться и дополняться, то это явный технический долг, который выплачивать надо будет с процентами.
 
технический долг,
offtopic: куда ж без него :)))) на основной работе, после рефакторинга там tech debt на год наверное.
А вот разделение CSS приведёт к экономии времени сейчас и гораздо большему времени потом
поддерживаю.
После вчерашнего Вашего комментария, решил все таки переделать все под 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 передать, но судя по всему не правильное решение.
 
Последнее редактирование:
Input field и кнопка "создать"
Кнопка создать - это что? Ссылка (<a href="/task/add"></a>)?

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

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

а в контроллере, который у вас отрабатывает на /task/add ловите $_POST и подставляете в value инпута уже на этой странице
 
Используйте UIKit или Bootstrap при вёрстке, и будет у вас нормально всё под любые мобилы.
Вручную писать отдельно для iOS, отдельно для всего зоопарка броузеров под Android - очень муторно и неправильно. Потом ещё и под планшеты отдельно, под телефоны отдельно.. не надо так.
 
Назад
Сверху