php – 如何在laravel刀片中进行一次性推送
发布时间:2020-12-14 19:49:03 所属栏目:大数据 来源:网络整理
导读:我正在尝试使用类似于以下(widget.blade.php)的Laravel刀片创建 HTML小部件: @push('scripts') script src="{{ asset('js/foo.js') }}"/script script ... /script@endpush@push('styles') link href="{{ asset('css/bar.css') }}" rel="stylesheet"@endpus
我正在尝试使用类似于以下(widget.blade.php)的Laravel刀片创建
HTML小部件:
@push('scripts') <script src="{{ asset('js/foo.js') }}"></script> <script> ... </script> @endpush @push('styles') <link href="{{ asset('css/bar.css') }}" rel="stylesheet"> @endpush <div> ... HTML contents </div> 我在其他刀片中使用小部件,如: <div> ... @include('widget') </div> <div> ... @include('widget') </div> 问题是当我在页面中多次使用窗口小部件时,“脚本”和“样式”重复多次. 如何防止Laravel多次推送“脚本”和“样式”?
在下面的回答中,我假设您熟悉
Blade extension.此方法已在Laravel 5.2和5.3上进行了测试(请参阅下面的注释).
在测试Ismail RBOUH’s Answer(所以请阅读它)之后,解决方案似乎有两个问题: 1- $isDisplayed变量与其他包含的小部件不在同一范围内,因此每个@include将其脚本推送到堆栈.结果我将其更改为: Blade::directive('pushonce',function ($expression) { $isDisplayed = '__pushonce_'.trim(substr($expression,2,-2)); return "<?php if(!isset($__env->{$isDisplayed})): $__env->{$isDisplayed} = true; $__env->startPush{$expression}; ?>"; }); Blade::directive('endpushonce',function ($expression) { return '<?php $__env->stopPush(); endif; ?>'; }); 2-解决方案将@pushonce的使用限制为一个小部件.即,在2个或更多小部件(widget1.blade.php,widget2.blade.php,…)的情况下,它阻止推送其他小部件脚本.所以,我使用以下代码将域添加到@pushonce: Blade::directive('pushonce',function ($expression) { $domain = explode(':',trim(substr($expression,-2))); $push_name = $domain[0]; $push_sub = $domain[1]; $isDisplayed = '__pushonce_'.$push_name.'_'.$push_sub; return "<?php if(!isset($__env->{$isDisplayed})): $__env->{$isDisplayed} = true; $__env->startPush('{$push_name}'); ?>"; }); Blade::directive('endpushonce',function ($expression) { return '<?php $__env->stopPush(); endif; ?>'; }); 用法: widget1.blade.php @pushonce('scripts:widget1') <script src="{{ asset('js/foo.js') }}"></script> <script> ... </script> @endpushonce widget2.blade.php @pushonce('scripts:widget2') <script src="{{ asset('js/bar.js') }}"></script> <script> ... </script> @endpushonce L 5.3的注意事项: $domain = explode(':',-2))); 至 $domain = explode(':',1,-1))); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |