Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Доброго дня!
Имеем в роутинге
return view('pages/view', ...)
Нужно получить полное содержимое данной функции и обработать его. В частности я хочу ко всем линкам css привязать постфиксы на основе даты редактирования: default.css?ver=04-May-11-26
Мне нужно лишь понять как получить содержимое view для обработки, всё остальное я уже сделал. Как можно это осуществить?
Не в сети
Если есть базовые принципы для выполнения подобных задач, буду очень рад узнать о них
Не в сети
Сделать свой декоратор над вью, который будет не отдавать шаблон напрямую в клиент,а сперва его брать из View в переменную, потом обрабатывать и потом отдавать.
Или сделать хелпер, по типу assest, который будет генерировать урл в соответствие с твоими требованиями. Если тебе это нужно только для того что ты описал, то второй способ лучше.
Не в сети
мне кажется постпроцессинг сгенерированного хтмл с разбором и генерацией нового – это очень сложный способ сделать очень простую вещь. я бы добавил в проект хелпер process_asset_url($url), который бы получал на вход адрес ассета без параметров – "/css/default.css" – потом находил бы его в файловой системе и возвращал адрес уже с параметром, затем просто в виде уже рендерил бы путь как <link rel="stylesheet" type="text/css" href="{{ process_asset_url('/css/default.css') }}"> – и никакого постпроцессинга
если же говорить серьёзно, то прицепление таймстэмпа к url ассетов – это прошлый век, в ларавеле есть готовая система сборки ассетов (точнее теперь даже две – бери любую), в которой уже есть версионирование ассетов, которое решает в общем-то ту же задачу, но более простым и эффективным способом. для 5.4 это микс (https://laravel.com/docs/5.4/mix), для более ранних – elixir (https://laravel.ru/docs/v5/elixir). в обоих случаях за это отвечает вызов mix.version(). в 5.4 – https://laravel.com/docs/5.4/mix#versio … he-busting, в более ранних – https://laravel.ru/docs/v5/elixir#версии
тут надо уже решать – если идёт работа с легаси-кодом и ассеты прилетели из какого-то старого проекта и их надо как-то прицепить к ларавелю, тут конечно допустимы любые костыли. если же разрабатывается новый проект с нуля, надо пользоваться возможностями фреймворка и не выдумывать велосипедов
Не в сети
Самый простой вариант, который приходит в голову - это во вьюхе определить плейсхолдер, а затем передавать его через функцию view().
// view
...
<link rel="stylesheet" type="text/css" href="styles/app.css?{{ $ver or ''}}" />
...
// Route
return view('pages/view', ['ver' => $date]); // $date - это дата редактирования файла.
П.С. Имя файла вьюхи можно получить так view('pages/view')->getPath().
Изменено Sergant210 (04.05.2017 15:46:13)
Не в сети
мне кажется постпроцессинг сгенерированного хтмл с разбором и генерацией нового – это очень сложный способ сделать очень простую вещь
Я ничего ни хотел генерировать нового. Я думал что view вполне может быть чистым html в return, который можно было бы слегка модифицировать, хотя его бы пришлось каждый раз модифицировать, при каждом открытии каждой страницы - неразумно, каюсь. Совет по поводу elixir неоценим, постараюсь разобраться с этим в ближайшее время, что будет в общем то просто, так как css как раз таки генерируется на основе less и него самого спасибо! Вообще всем низкий поклон
Не в сети
Круто! Файл gulpfile.js получился таким:
var elixir = require('laravel-elixir');
elixir(function(mix) {
mix.less(['default.less'], 'public/default.css')
.version(['default.css', 'default.js']);
});
При этом все пути до изображений пришлось изменить с images на /images, так как файлы gulp генерирует в директории build и я никак его не смог победить, хотя его то смог, а вот elixir нет
В коде шаблона соответственно:
<link rel="stylesheet" href="{{ elixir('default.css') }}" type="text/css" />
<script type="text/javascript" src="{{ elixir('js/default.js') }}"></script>
В конце естественно запустил gulp
Изменено sergej_saveljev (04.05.2017 20:12:58)
Не в сети
Страницы 1