123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- <?php namespace Laravel;
- class Section {
- /**
- * All of the captured sections.
- *
- * @var array
- */
- public static $sections = array();
- /**
- * The last section on which injection was started.
- *
- * @var array
- */
- public static $last = array();
- /**
- * Start injecting content into a section.
- *
- * <code>
- * // Start injecting into the "header" section
- * Section::start('header');
- *
- * // Inject a raw string into the "header" section without buffering
- * Section::start('header', '<title>Laravel</title>');
- * </code>
- *
- * @param string $section
- * @param string|Closure $content
- * @return void
- */
- public static function start($section, $content = '')
- {
- if ($content === '')
- {
- ob_start() and static::$last[] = $section;
- }
- else
- {
- static::append($section, $content);
- }
- }
- /**
- * Inject inline content into a section.
- *
- * This is helpful for injecting simple strings such as page titles.
- *
- * <code>
- * // Inject inline content into the "header" section
- * Section::inject('header', '<title>Laravel</title>');
- * </code>
- *
- * @param string $section
- * @param string $content
- * @return void
- */
- public static function inject($section, $content)
- {
- static::start($section, $content);
- }
- /**
- * Stop injecting content into a section and return its contents.
- *
- * @return string
- */
- public static function yield_section()
- {
- return static::yield(static::stop());
- }
- /**
- * Stop injecting content into a section.
- *
- * @return string
- */
- public static function stop()
- {
- static::append($last = array_pop(static::$last), ob_get_clean());
- return $last;
- }
- /**
- * Append content to a given section.
- *
- * @param string $section
- * @param string $content
- * @return void
- */
- protected static function append($section, $content)
- {
- if (isset(static::$sections[$section]))
- {
- static::$sections[$section] = str_replace('@parent', $content, static::$sections[$section]);
- }
- else
- {
- static::$sections[$section] = $content;
- }
- }
- /**
- * Get the string contents of a section.
- *
- * @param string $section
- * @return string
- */
- public static function yield($section)
- {
- return (isset(static::$sections[$section])) ? static::$sections[$section] : '';
- }
- }
|