php - plantillas - print html laravel
Templating en Laravel (2)
Estoy intentando que mi plantilla predeterminada funcione con Laravel. Vengo del sistema de plantillas de Codeigniter y Phil Sturgeon, así que estoy tratando de hacerlo de manera similar. ¿Alguien puede ayudarme con lo que me estoy perdiendo / haciendo mal? ¡Gracias!
//default.blade.php (located in layouts/default)
<html>
<title>{{$title}}</title>
<body>
{{$content}}
</body>
</html>
//end default.blade.php
//home.blade.php (index view including header and footer partials)
@layout(''layouts.default'')
@include(''partials.header'')
//code
@include(''partials.footer'')
//end home
//routes.php (mapping route to home controller)
Route::controller( ''home'' );
//end
//home.php (controller)
<?php
class Home_Controller extends Base_Controller {
public $layout = ''layouts.default'';
public function action_index()
{
$this->layout->title = ''title'';
$this->layout->content = View::make( ''home'' );
}
}
//end
Está mezclando dos enfoques de diseño diferentes de Laravel. De esta manera está renderizando la vista de diseño, incluye la vista de inicio y trata de incluir nuevamente el diseño.
Mi preferencia personal es el enfoque del controlador.
Diseños del controlador
El controlador y los diseños pueden permanecer igual.
Nota: como acceso directo, puede anidar el contenido en lugar de View :: make, que automaticamente lo renderiza cuando lo repite en el diseño.
En home.blade.php elimina la función @layout.
Editar (ejemplo):
controladores / home.php
<?php
class Home_Controller extends Base_Controller {
public $layout = ''layouts.default'';
public function action_index()
{
$this->layout->title = ''title'';
$this->layout->nest(''content'', ''home'', array(
''data'' => $some_data
));
}
}
views / layouts / default.blade.php
<html>
<title>{{ $title }}</title>
<body>
{{ $content }}
</body>
</html>
views / home.blade.php
Los parciales están incluidos en el contenido.
@include(''partials.header'')
{{ $data }}
@include(''partials.footer'')
Diseños de hoja
Si quieres este enfoque, tienes algunos problemas allí. Primero, incluirá contenido nuevo después del diseño. No estoy seguro si es intencional, pero la función @layout en sí misma es básicamente un @include restringido para estar al principio de la vista. Entonces, si su diseño es un html cerrado, cualquier inclusión posterior se agregará después de su diseño html.
Su contenido debe usar secciones aquí con la función @section y @yield it en su diseño. El encabezado y el pie de página se pueden incluir en el diseño con @include o si desea definirlo en la vista de contenido y ponerlos en una sección @ también, como a continuación. Si lo define de esa manera, si una sección no existe, no se obtiene nada.
controladores / home.php
<?php
class Home_Controller extends Base_Controller {
public function action_index()
{
return View::make(''home'')->with(''title'', ''title'');
}
}
views / layouts / default.blade.php
<html>
<title>{{$title}}</title>
<body>
@yield(''header'')
@yield(''content'')
@yield(''footer'')
</body>
</html>
views / home.blade.php
@layout(''layouts.default'')
@section(''header'')
header here or @include it
@endsection
@section(''footer'')
footer
@endsection
@section(''content'')
content
@endsection
La respuesta anterior explica cómo se hace la creación de plantillas en Laravel, sin embargo, para obtener beneficios adicionales, como administrar temas organizados en un directorio de temas con la capacidad de cambiar entre temas y tener parciales y recursos de temas, todo suena como algo similar a Phil Sturgeon Template Library para CI . Es posible que desee comprobar el paquete temático de Laravel. Aqui esta el link: