代码之家  ›  专栏  ›  技术社区  ›  Ali Özen

laravel刀刃模板-如何从扩展页中删除零件

  •  1
  • Ali Özen  · 技术社区  · 6 年前

    注:如我在评论中所说,我正在做一个相对较大的项目。我不能改变现有的代码。试着为一个页面添加一些代码块。

    我有一个模板刀片。它有一定的收益率。但也包括一个meta.blade.php,它包含所有的meta标记。但我不想在我的某些页面中包含元页面。有可视化模板:

    我的模板

    <header>
        @yield('meta')
        @include('metapage')
    
        @yield('style')
        @yield('js')
    </header>
    

    我的视图.blade.php

    @extends('my_template')
    
    @section('meta')
        <meta description...>
    @endsection
    
    @section('style')
        //content
    @endsection
    
    @section('js')
        //content
    @endsection
    

    我的问题是:有没有办法做这样的东西:

    @extends('my_template')->except('metapage')
    

    我知道根本就不存在这样的事情。但我需要。我希望有人能给我一个解决办法。

    2 回复  |  直到 6 年前
        1
  •  1
  •   Ammar Ali    6 年前

    我有一个解决办法:

    • 首先是创建多个模板,并根据需要进行扩展。
    • 二是禁用子部件。
    • 第三个是创建父模板,创建子模板,扩展父模板,在这里做额外的事情。根据你的需要使用它。

    如果你正在处理现有的项目,你有很多页面,那么第一和第三是一个更好的解决方案,因为你可以在不影响类代码的情况下只在前端进行更改。

        2
  •  0
  •   Joel Hinz    6 年前

    你可以让元成为一个组件,而不是一个包含,然后你的模板将看起来一样,你的视图将是例如。

    @extends('my_template')
    
    @section('meta')
        @component('meta')
            @slot('description', 'my amazing description')
        @endcomponent
    @endsection
    
    // other code here as usual
    

    然后,你的组件负责检查存在什么和不存在什么,例如:

    @isset($description)
        <meta name="description" content="{{ $description }}">
    @endisset
    
    @isset($title)
        <title>{{ $title }}</title>
    @endisset
    
    // etc, the title is just an example
    

    文档: https://laravel.com/docs/5.6/blade#components-and-slots