Php 在Laravel 5.3中,从任何视图隐藏任何元素的智能方法?
我面临一个问题,我不想在某些视图中显示X元素 真正的例子是,我不想在Php 在Laravel 5.3中,从任何视图隐藏任何元素的智能方法?,php,laravel,user-interface,Php,Laravel,User Interface,我面临一个问题,我不想在某些视图中显示X元素 真正的例子是,我不想在联系人和关于我们的页面上显示产品图像滑块,但它应该在所有其他页面上都可见(大约6个以上) 那么,如何排除在m页面的n中呈现div而不产生很长的@if条件? 有什么时尚的解决方案吗 编辑 回答我为什么不想将其放在独立视图文件中的问题: 假设您希望这条线在除特定视图外的所有视图中都可见,并且仅在一个视图中可见 <span>Lorem Ipsum</span> 然后在AppServiceProvider.ph
联系人
和关于我们
的页面上显示产品图像滑块,但它应该在所有其他页面上都可见(大约6个以上)
那么,如何排除在m页面的n中呈现div而不产生很长的@if
条件?
有什么时尚的解决方案吗
编辑
回答我为什么不想将其放在独立视图文件中的问题:假设您希望这条线在除特定视图外的所有视图中都可见,并且仅在一个视图中可见
<span>Lorem Ipsum</span>
然后在AppServiceProvider.php
类中创建一个指令
<?php
namespace App\Providers;
use Illuminate\Support\Facades\Blade;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Blade::directive('presence', function($alias) {
return "<?php if (in_array(\Request::route()->getName(),config('presence.'.$alias))):?>";
});
Blade::directive('endpresence', function() {
return '<?php endif; ?>';
});
}
/**
* Register any application services.
*
* @return void
*/
public function register()
{
//
}
}
<?php
namespace App\Providers;
use Illuminate\Support\Facades\Blade;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Blade::directive('presence', function($alias) {
return "<?php if (in_array(\Request::route()->getName(), config('presence.'.$alias))): ?>";
});
Blade::directive('endpresence', function() {
return '<?php endif; ?>';
});
}
/**
* Register any application services.
*
* @return void
*/
public function register()
{
//
}
}
但我以后会调查的
欢迎反馈或批评:)
如果
联系人
和关于我们
有他们自己的URI,您可以尝试匹配该URI,以确定是否应显示不
if (!\Request::is('contact') && !\Request::is('about-us')) {
// Show element X
}
或者另一种方法是添加一个中间件,该中间件设置一些变量,例如
$dontShowElement
,并设置一个视图生成器,并将该变量传递给所有视图。然后,您需要做的就是在输出元素之前检查该变量是否存在,并只给出您希望该元素隐藏在该中间件上的那两条路由。如果您使用刀片模板,您可以创建两种不同的布局。一个带图像滑块,一个不带。
这是我能想到的最直接的解决方案
编辑:
创建另一个布局,特别是如果您的所有布局都在一个单独的文件夹中,将不会在文件结构中造成混乱,这绝对是值得的。好的,我已经制定了一个简单的blade指令,以一种很好的方式解决了这种情况 首先,创建一个数组,用于确定html代码段的路由访问
最好的方法是在config目录中创建这个文件,例如
presence.php
文件
<?php
return [
'ipsum' => [ // presence alias
'about', // disallowed route #1
'contact' // disallowed route #2
],
];
<?php
return [
'ipsum' => [ // presence alias
'about', // disallowed route #1
'contact' // disallowed route #2
],
];
最后在html视图中使用此技巧
@presence('ipsum')
<span>Lorem Ipsum</span>
@endpresence
@presence('ipsum')
<span>Lorem Ipsum</span>
@endpresence
但我以后会调查的
欢迎反馈或批评:)在App/Http/helper.php中复制此内容
function is_path($path){
return call_user_func_array('Request::is', (array)$path) ? true : false;
}
看法
@if(is_path('about'))
关于
@恩迪夫
这对你有帮助
为什么不能在这些视图中包含该部分?你能补充一下你是如何构建你的刀片模板的吗?“这只是一行HTML代码,不值得在project中创建另一个文件,因为它会在project files树中变得一团糟……”这绝对值得。当你在多个视图中使用某个东西时,它应该是某种包含。同意上面的评论。特别是如果视图的该部分周围有一些逻辑环绕,使得它根据某些参数进行不同的渲染。
@presence('ipsum')
<span>Lorem Ipsum</span>
@endpresence
<?php
return [
'ipsum' => [ // presence alias
'admin.category.*', // advanced route pattern #1
'admin.users.*' // advanced route pattern #2
],
];
function is_path($path){
return call_user_func_array('Request::is', (array)$path) ? true : false;
}
@if(is_path('about'))
<h1>About</h1>
@endif
Mai this will help you