Intereting Posts
как сделать php-выражения и выполнить из базы данных? Проверка, является ли переменная целой в PHP Должны ли быть сообщены и исправлены PHP-уведомления? Как разместить json-массив на PHP с помощью jQuery-метода ajax? URL-дизайн для расширенной фильтрации результатов в обновленном API как обеспечить ссылку для загрузки уже заархивированных файлов в php кеширование JSON: Apache, PHP, jQuery невозможно установить разрешения для загрузки изображений с помощью библиотеки php gd .htaccess переписать для хоста WordPress, размещенного на Bitnami / EC2 несогласованность в преобразовании строки в целое число, когда строка hex, префикс '0x' Неправильная загрузка нескольких изображений Передача переменной цены в PayPal с помощью настраиваемой кнопки Получить почтовый индекс пользователя facebook графическим API facebook Не удается добавить новые строки в поле оповещения JavaScript? Автозаполнение JQuery UI не работает на IE10

ларавельное лезвие, как добавить в раздел

Если вы посмотрите на официальную документацию laravel http://laravel.com/docs/4.2/templates В нем говорится, что предоставление этого макета:

<!-- Stored in app/views/layouts/master.blade.php --> <html> <body> @section('sidebar') This is the master sidebar. @show <div class="container"> @yield('content') </div> </body> </html> 

Продлено по этой точке зрения

 @extends('layouts.master') @section('sidebar') <p>This is appended to the master sidebar.</p> @stop @section('content') <p>This is my body content.</p> @stop 

Будет добавлен к sidebar раздела. Но на самом деле, если вы попробуете, это не добавляет, он просто переопределяет содержимое из расширенного шаблона.

Я слышал о других функциях лезвия, таких как @append, @prepend, @parent … никто, кажется, не работает.

Кроме того, этот пример в официальном документе, который не работает, я считаю, что документация на blade-серверу очень плохая. Например, нет ничего о функции лезвия, например, @parent .

Пример в документации с веб-сайта Larvel действительно кажется ошибочным, но я думаю, что это проблема разборки разметки на веб -сайте, те же документы в github показывают правильный код:

В любом случае @parent действительно работает. Пример в документах должен выглядеть следующим образом:

 @extends('layouts.master') @section('sidebar') @parent <p>This is appended to the master sidebar.</p> @stop @section('content') <p>This is my body content.</p> @stop 

Быстрый просмотр в Illuminate/View/Factory.php подтверждает, что делает @parent :

 /** * Append content to a given section. * * @param string $section * @param string $content * @return void */ protected function extendSection($section, $content) { if (isset($this->sections[$section])) { $content = str_replace('@parent', $content, $this->sections[$section]); } $this->sections[$section] = $content; } 

Вы можете просто использовать @append

 @extends('layouts.master') @section('sidebar') <p>This is appended to the master sidebar.</p> @append @section('content') <p>This is my body content.</p> @stop 

См. Здесь .

Чтобы понять, как это работает …

Метод compileStatements() в BladeCompiler вызывает метод compileAppend() , как вы можете видеть здесь:

 /** * Compile Blade Statements that start with "@" * * @param string $value * @return mixed */ protected function compileStatements($value) { $callback = function($match) { if (method_exists($this, $method = 'compile'.ucfirst($match[1]))) { $match[0] = $this->$method(array_get($match, 3)); } return isset($match[3]) ? $match[0] : $match[0].$match[2]; }; return preg_replace_callback('/\B@(\w+)([ \t]*)(\( ( (?>[^()]+) | (?3) )* \))?/x', $callback, $value); } 

В свою очередь, это вставляет вызов appendSection() который выглядит следующим образом:

 /** * Stop injecting content into a section and append it. * * @return string */ public function appendSection() { $last = array_pop($this->sectionStack); if (isset($this->sections[$last])) { $this->sections[$last] .= ob_get_clean(); } else { $this->sections[$last] = ob_get_clean(); } return $last; } 

как упоминалось ранее, я использовал @parent и он отлично работает для меня. Может быть примером расширенного title поможет:

master.blade.php

 @section('title') My Blog @stop <!doctype html> <html> <head> @include('includes.head') </head> <body> <div class="container-fluid"> <div id="main" class="row"> @yield('content') </div> </div> </body> </html> 

включает / head.blade.php

 <meta charset="utf-8"> <title>@yield('title')</title> 

post.blade.php

 @extends('master') @section('title') @parent | {{$post->title }} @stop @section('content') // Post Body here .. @stop 

Поэтому Title будет отображаться следующим образом:

Мой блог | Мой Заголовок сообщения


На самом деле это будет выглядеть примерно так:

 <title> My Blog | My Post Title </title> 

поэтому вы можете использовать второй параметр раздела для установки значений:

включает / head.blade.php

 ... @section('title', 'My Blog') ... 

post.blade.php

 ... @section('title', '@parent | ' . $post->ar_name ) ... 

И это сделает:

 <title>My Blog | My Post Title</title> 

Таким образом, вы избавитесь от строк внутри названия,

Надеюсь, это помогает.

Примечание. Это используется для Laravel 5.2, не совсем уверен, но, как я помню, он работает и для Laravel 4.