Laravel 8.0 Blade anidado @extends @sección y @yield no trabajar
Tengo esto template.blade.php
con un camino views/templates/template.blade.php
con el siguiente código:
// template.blade.php
// some codes here
@include("templates.navigation.navigation")
@yield('header')
@yield('content')
@include('templates.footer.footer')
// some other codes here
Ahora, en mi ruta, la home.blade.php
(accesible en views/home/home.blade.php
) fue establecido como la página de aterrizaje. La página principal necesita pedir prestado una sección de código (código para los botones flotantes. Cada botón flotante difiere dependiendo de la página actual). Aquí está el código para la página principal:
// home.blade.php
@extends('templates.template')
@section('header')
// some codes here
@endsection
@section('content')
// some other codes here
@yield('float-button-module-menu') // the code that needs to be accessed but doesn't work
@endsection
El @yield('float-button-module-menu')
tendría acceso views/templates/float-buttons/float-buttons.blade.php
. Aquí está el código de dicha página web:
// float-buttons.blade.php
@extends('home.home') // I suspect that I was wrong at declaring the name for the @extends here
@section('float-button-module-menu')
// some codes inside the section that needs to be displayed
@endsection
Para simplificar la pregunta, necesito acceder a la @section('float-button-module-menu')
desde float-buttons.blade.php
dentro home.blade.php
. No conozco el problema dentro de la lógica de esto.
EDIT aquí está el código completo para las secciones dentro float-button.blade.php
:
// float-button.blade.php
@extends('home.home')
@section('float-button-module-menu')
@endsection
@section('float-button-anchor')
@endsection
@section('float-button-help')
@endsection
// list of buttons would be updated.
Pregunta hecha hace 3 años, 4 meses, 29 días - Por techinnovator
3 Respuestas:
-
Ampliar las vistas es para cuando usted llama / mira un archivo de hoja directamente, por ejemplo a través
return view('templates.float-buttons.float-buttons')
. Parece que esto no es lo que estás buscando. ¿Quieres?@include
el archivo en suhome.blade.php
. Realizar los siguientes cambios:home.blade.php:
@extends('templates.template') @section('header') // some codes here @endsection @section('content') // some other codes here @include('templates.float-buttons.float-buttons') @endsection
Botones flotantes.blade.php:
My Float Buttons Codefloat-buttons.blade.php
sólo contiene el código para los botones de flotaciónSegunda parte
Puede pasar parámetros a
@include
cuando incluyendo subviews. Vea si estos cambios se ajustan a sus necesidades:casa.blade.php
@extends('templates.template') @section('header') // some codes here @endsection @section('content') // some other codes here @include('templates.float-buttons.float-buttons', ['type' => 'anchor']) @endsection
Botones flotantes.blade.php:
@if ($type == 'anchor')
@elseif ($type == 'help') @else {{-- if no type parameter is given --}}Parameter 'type' is required
@endifEntonces puedes usar
@include('templates.float-buttons.float-buttons', ['type' => 'anchor'])
o@include('templates.float-buttons.float-buttons', ['type' => 'help'])
donde lo necesites. Y por supuesto no dude en ampliar la listaNota: Una solución más elegante sería crear archivos de hoja individuales para cada uno de sus casos ('float-buttons-anchor.blade.php
,
los botones flotantes-ayuda.blade.php...) and then include the file you need:
@include('templates.float-buttons.float-buttons-help')Respondida el Dec 18, 2020 a las 13:22 - por bugbusterx
Votos positivos: 0 | Votos negativos: 0 -
El problema que estás experimentando es que estás extendiendo la plantilla incorrecta en tu archivo
float-buttons.blade.php
. En lugar de extenderhome.home
, debes extendertemplates.template
, que es la plantilla principal donde has definido las seccionesheader
ycontent
.Aquí está el cambio que debes hacer en tu archivo
float-buttons.blade.php
:php @extends('templates.template') @section('float-button-module-menu') // some codes inside the section that needs to be displayed @endsection
Al extender
templates.template
, podrás acceder a las secciones definidas en esa plantilla dentro dehome.blade.php
. Con este ajuste, el@yield('float-button-module-menu')
enhome.blade.php
podrá acceder y mostrar el contenido defloat-buttons.blade.php
.Una vez que hagas este cambio, el código debería funcionar correctamente y podrás acceder a la sección
float-button-module-menu
dentro dehome.blade.php
desdefloat-buttons.blade.php
. ¡Espero que esto solucione tu problema!Respondida el Dec 19, 2020 a las 13:22 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
Tienes un error en la forma en que extiendes la plantilla en
float-buttons.blade.php
. Deberías extender la plantillatemplate
, nohome
.Aquí está el código corregido para
float-buttons.blade.php
:@extends('templates.template') @section('float-button-module-menu')
@endsection @section('float-button-anchor') @endsection @section('float-button-help') @endsectionAdemás, asegúrate de que
float-buttons.blade.php
esté en el directorio correcto, que esresources/views/templates/float-buttons/float-buttons.blade.php
, basado en la ruta que proporcionaste en tu publicación.Respondida el Dec 19, 2020 a las 13:29 - por Gemini
Votos positivos: 0 | Votos negativos: 0