Загружать определенные js для определенных страниц в laravel
Я использую laravel 4 для проекта. Есть ли способ указать, какие файлы js я хочу загрузить для определенного вида. Прямо сейчас я собираю все в одном файле.
Когда я использую codeigniter, для загрузки определенных js файлов, я использую библиотеку для генерации тегов script и эхо их в нижнем колонтитуле. что-то ниже
$this->data['js'] = $this->js_lib->generate('jquery');
Тогда, на мой взгляд,
<?= $js ?>
Любая идея, как это сделать в laravel?
Ответы
Ответ 1
Основной макет
main.blade.php
@include('includes.header')
<body>
<!-- main content -->
<div id="main_wrapper">
<div class="page_content">
@yield('content')
</div>
</div>
@include('includes.footer')
</body>
header.blade.php
<head>
<meta charset="UTF-8">
<title>My Page</title>
<meta name="viewport" content="initial-scale=1.0,maximum-scale=1.0,user-scalable=no">
<!-- common styles -->
<link rel="stylesheet" href="{{ asset('assets/bootstrap.css') }}">
<!-- page specific styles -->
@yield('pagespecificstyles')
</head>
footer.blade.php
<footer>
<!-- common scripts -->
<script src="{{ asset('assets/js/jquery.min.js') }}"></script>
<!-- page specific scripts -->
@yield('pagespecificscripts')
mypage.blade.php
@extends('layouts.main')
@section('pagespecificstyles')
<!-- flot charts css-->
<link rel="stylesheet" href="{{ asset('assets/lib/owl-carousel/flot.css') }}">
@stop
@section('content')
<div class="container">
Hello welcome to my page.
</div>
@endsection
@section('pagespecificscripts')
<!-- flot charts scripts-->
<script src="{{ asset('/assets/lib/flot/jquery.flot.min.js') }}"></script>
@stop
Ответ 2
Я знаю давно, но на благо других, которые могут споткнуться здесь! Один вариант также находится в вашем макете для определения дополнительных разделов, например.
@yield('css') <!-- In the head -->
@yield('js') <!-- Before the </body> tag -->
Затем в ваших представлениях
@extends('some.layout')
@section('css')
@include('js/dependencies/some/js/dependency/css.css')
@append
<!-- So in case these dependencies are used elsewhere you're not repeating your script or link tags over and over -->
@section('js')
@include('js/dependencies/some/js/dependency/js.js')
@include('js/dependencies/some/js/dependency/js2.js')
@append
@section('content')
Your actual content
@endsection
Ответ 3
Стеки
Blade позволяет перемещаться в именованные стеки, которые могут быть отображены в другом месте в другом представлении или макете. Это может быть особенно полезно для указания любых библиотек JavaScript, требуемых вашими дочерними представлениями:
@push('scripts')
<script src="/example.js"></script>
@endpush
Вы можете вставлять в стек столько раз, сколько необходимо. Чтобы отобразить полное содержимое стека, передайте имя стека в директиву @stack:
<head>
<!-- Head Contents -->
@stack('scripts')
</head>
https://laravel.com/docs/5.7/blade#stacks
Ответ 4
Просто создайте папку "partials" view и включите все script, которые вы хотите в каждом представлении.
Итак, на ваш взгляд;
<body>
// Your main content here
// Other JS files you want in all views
@include('partials.analytics.blade.php')
@include('partials.googlemaps')
@include('partials.some_other_js_file')
</body>
Затем у вас /views/partials/analytics.blade.php
<script>
// Your JS analytics script here
</script>
и просто повторите для каждого script '
Ответ 5
Вы можете добавить следующий код в ваш файл app.blade
@stack('scripts')
и тогда вы можете использовать JQuery на странице
@push('scripts')
<script type="text/javascript">
///Js code
</script>
@endpush