Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在Laravel 5.3中,从任何视图隐藏任何元素的智能方法?_Php_Laravel_User Interface - Fatal编程技术网

Php 在Laravel 5.3中,从任何视图隐藏任何元素的智能方法?

Php 在Laravel 5.3中,从任何视图隐藏任何元素的智能方法?,php,laravel,user-interface,Php,Laravel,User Interface,我面临一个问题,我不想在某些视图中显示X元素 真正的例子是,我不想在联系人和关于我们的页面上显示产品图像滑块,但它应该在所有其他页面上都可见(大约6个以上) 那么,如何排除在m页面的n中呈现div而不产生很长的@if条件? 有什么时尚的解决方案吗 编辑 回答我为什么不想将其放在独立视图文件中的问题: 假设您希望这条线在除特定视图外的所有视图中都可见,并且仅在一个视图中可见 <span>Lorem Ipsum</span> 然后在AppServiceProvider.ph

我面临一个问题,我不想在某些视图中显示X元素

真正的例子是,我不想在
联系人
关于我们
的页面上显示产品图像滑块,但它应该在所有其他页面上都可见(大约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