Подтвердить что ты не робот

Laravel 4 - включая "частичный" вид в представлении (без использования шаблона Blade)

В Laravel 3 я использовал это.

<?php render('partials.header'); ?>

Это было сделано в представлениях "PHP", без использования шаблонов Laravel Blade.

Что эквивалентно этому в версии 4?

Я пробовал

<?php @include('partials.header'); ?>

Это не работает.

Если я делаю

@include('partials.header')

Мне нужно сохранить файл как .blade.php

Как включить "subview" без использования шаблона клинка?

4b9b3361

Ответ 1

Существуют различные способы включения представления в представление в Laravel 4. Ваш выбор будет зависеть от любого из результатов, описанных ниже...

Для гибкости

Вы можете скомпилировать (визуализировать) частичные представления в соответствующем контроллере и передать эти представления в основное представление с помощью массива $data[''].

Это может стать утомительным по мере увеличения количества просмотров, но эй, по крайней мере, существует много гибкости:)

См. приведенный ниже код:

контроллер

...

public function showMyView()
{
   /* Header partial view */
   $data['header'] = View::make('partials.header');

   /* Flexible enough for any kind of partial views you require (e.g. a Header Menu partial view) */
   $data['header_menu'] = View::make('partials.header_menu'); 

   /* Footer partial view */
   $data['footer'] = View::make('partials.footer');

   return View::make('myView', $data);
}

...

Вид

Вы можете включить частичные выше, как указано ниже (в любой позиции в вашем коде просмотра):

<html>  
<head></head>   
<body>

<!-- include partial views -->
<?php echo ($header) ?>  
<?php echo ($header_menu) ?>  

<div id="main-content-area"></div>  

<?php echo ($footer) ?>  

</body>  
</html>

Ваши частичные представления теперь будут добавлены в ваш основной вид.


Для простоты

На самом деле гораздо проще, чем использовать метод выше: просто включите это в html представления...

Вид

<html>  
<head></head>   
<body>

<!-- include partial view: header -->
<?php echo View::make('partials.header') ?>

   <div id="main-content-area">
   </div>

<!-- include partial view: footer -->
<?php echo View::make('partials.footer') ?>

</body>  
</html>

Убедитесь, что структура папок для частичных файлов [views/partials/header.php], чтобы обеспечить правильный путь к файлу функции View:: make() Laravel.

ПРЕДУПРЕЖДЕНИЕ

Если вы попытаетесь передать $data['page_title'] в контроллере, вложенные представления не получат данные.
Чтобы передать данные этим вложенным представлениям, вам необходимо сделать это следующим образом:

<html>  
<head></head>   
<body>

<?php
   /* Pass page title to header partial view */
   $data ['page_title'] = "My awesome website";  
   echo View::make('partials.header', $data); 
?>

<div id="main-content-area"></div>

<?php echo View::make('partials.footer') ?>

</body>  
</html>

Примечание

Вопрос четко сформулирован: "Без использования шаблона Blade", поэтому я не задумывался о том, чтобы дать решение, которое не включает код шаблона Blade.

Удачи:)

Ответ 2

Вы можете вложить свои частичные части в представлениях, попробуйте это

View::make('folder.viewFile')->nest('anyname', 'folder.FileName');

Затем перейдите в файл вложенного представления из вашего шаблона {{ $anyname }} таким образом, вам не нужно включать файлы в свое представление, и это также должно работать и с файлом .php.

Ответ 3

Я не уверен, сколько людей использовали Laravel 4 в этом посте, начиная с этого поста, но если вы хотите включить частичные или отдельные типы просмотров, вы можете сделать это с помощью @includes

например, если вы хотите, чтобы папка partials для вашего заголовка, нижнего колонтитула, боковой панели и т.д.

создать каталог для партикулов под

app/views/partials

Затем создайте частичный

app/views/partials/navigation.blade.php

Затем в вашем файле основного шаблона добавьте строку

@include('partials.navigation')

Это все, что нужно.

** Бонус вы также можете передавать данные частичным или включать вложенные частичные части в частичном

Ответ 4

Я знаю, что это немного поздний ответ, но я подумал, что, поскольку я не видел этого решения среди других ответов, все было в порядке.

Если вы хотите добавить свой верхний и нижний колонтитул на каждую страницу, я бы добавил их в фильтры до и после. Просто перейдите в файл filters.php в папке вашего приложения.

App::before(function($request)
{
    echo View::make('partials.header');
});

App::after(function($request, $response)
{
    echo View::make('partials.footer');
});

При выполнении этого способа вам не нужно добавлять что-либо в файлы просмотра, чтобы включить их.

Ответ 5

Вы можете использовать функцию представления гнезда

View::make('default.layout')->nest('header', 'default.header');

Используйте третий параметр для передачи данных в шаблон

View::make('default.layout')->nest('header', 'default.header', ['name' => 'John Doe', 'test' => 'It works!']);

в ваших представлениях /default/header.blade.php

<div>hey {{ $name }}! {{ $test }}</div>

Ответ 6

Я все еще довольно новичок в Laravel, но я думаю, что ниже это идеально...

Route::get('/', function()
{
    $data['title'] = 'sample';
    return View::make('page', $data);
});

# /views/partials/header.php
# /views/partials/footer.php
View::composer('page', function($view)
{
    $view->with('header', View::make('partials.header', $view->getData()));
    $view->with('footer', View::make('partials.footer', $view->getData()));
});

См. Композиторы Laravel View Composers.. http://laravel.com/docs/responses#view-composers

/views/page.php

<?php echo $header; ?>
<div>CONTENT</div>
<?php echo $footer; ?>

Ответ 7

Внутри представления просто выделите другое представление:

echo View::make('header'); //This will look for a view called header.php