Browse Source

Added View::render_each and Blade shortcut.

Taylor Otwell 12 years ago
parent
commit
727b064bf7
2 changed files with 50 additions and 31 deletions
  1. 14 0
      laravel/blade.php
  2. 36 31
      laravel/view.php

+ 14 - 0
laravel/blade.php

@@ -18,6 +18,7 @@ class Blade {
 		'yields',
 		'section_start',
 		'section_end',
+		'render_each',
 	);
 
 	/**
@@ -238,6 +239,19 @@ class Blade {
 		return preg_replace('/@endsection/', '<?php \\Laravel\\Section::stop(); ?>', $value);
 	}
 
+	/**
+	 * Rewrites Blade @render_each statements into View statements.
+	 *
+	 * @param  string  $value
+	 * @return string
+	 */
+	protected static function compile_render_each($value)
+	{
+		$pattern = static::matcher('render_each');
+
+		return preg_replace($pattern, '$1<?php \\Laravel\\View::render_each$2; ?>', $value);
+	}
+
 	/**
 	 * Get the regular expression for a generic Blade function.
 	 *

+ 36 - 31
laravel/view.php

@@ -37,20 +37,6 @@ class View implements ArrayAccess {
 	 */
 	public static $names = array();
 
-	/**
-	 * The extensions a view file can have.
-	 *
-	 * @var array
-	 */
-	public static $extensions = array(EXT);
-
-	/**
-	 * The path in which a view can live.
-	 *
-	 * @var array
-	 */
-	public static $paths = array(DEFAULT_BUNDLE => array(''));
-
 	/**
 	 * The Laravel view loader event name.
 	 *
@@ -238,28 +224,47 @@ class View implements ArrayAccess {
 	}
 
 	/**
-	 * Register a new root path for a bundle.
+	 * Get the rendered contents of a partial from a loop.
 	 *
-	 * @param  string  $bundle
-	 * @param  string  $path
-	 * @return void
+	 * @param  string  $view
+	 * @param  array   $data
+	 * @param  string  $iterator
+	 * @param  string  $empty
+	 * @return string
 	 */
-	public static function search($bundle, $path)
+	public static function render_each($view, array $data, $iterator, $empty = null)
 	{
-		static::$paths[$bundle][] = $path;
-	}
+		$result = '';
 
-	/**
-	 * Register a new valid view extension.
-	 *
-	 * @param  string  $extension
-	 * @return void
-	 */
-	public static function extension($extension)
-	{
-		static::$extensions[] = $extension;
+		// If is actually data in the array, we will loop through the data and
+		// append an instance of the partial view to the final result HTML,
+		// passing in the iterated value of the data array.
+		if (count($data) > 0)
+		{
+			foreach ($data as $key => $value)
+			{
+				$with = array('key' => $key, $iterator => $value);
+
+				$result .= render($view, $with);
+			}
+		}
+
+		// If there is no data in the array, we will render the contents of
+		// the "empty" view. Alternative, the "empty view" can be a raw
+		// string that is prefixed with "raw|" for convenience.
+		else
+		{
+			if (starts_with($empty, 'raw|'))
+			{
+				$result = substr($empty, 4);
+			}
+			else
+			{
+				$result = render($empty ?: $view.'_empty');
+			}
+		}
 
-		static::$extensions = array_unique(static::$extensions);
+		return $result;
 	}
 
 	/**