section.php 1.96 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14
<?php namespace Laravel;

class Section {

	/**
	 * All of the captured sections.
	 *
	 * @var array
	 */
	public static $sections = array();

	/**
	 * The last section on which injection was started.
	 *
Han Lin Yap committed
15
	 * @var array
16
	 */
Han Lin Yap committed
17
	protected static $last = array();
18 19 20 21 22 23 24 25

	/**
	 * Start injecting content into a section.
	 *
	 * <code>
	 *		// Start injecting into the "header" section
	 *		Section::start('header');
	 *
26
	 *		// Inject a raw string into the "header" section without buffering
27 28 29
	 *		Section::start('header', '<title>Laravel</title>');
	 * </code>
	 *
30 31
	 * @param  string          $section
	 * @param  string|Closure  $content
32 33 34 35
	 * @return void
	 */
	public static function start($section, $content = '')
	{
36
		if ($content === '') ob_start() and static::$last[] = $section;
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66

		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.
	 *
	 * @return void
	 */
	public static function stop()
	{
Han Lin Yap committed
67
		static::append(array_pop(static::$last), ob_get_clean());
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
	}

	/**
	 * 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]))
		{
			$content = static::$sections[$section].PHP_EOL.$content;
		}

		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] : '';
	}

}