示例#1
0
 /**
  * Starts conditional snippet rendering. Returns SnippetHelper object if snippet was started.
  * @param  Control control
  * @param  string  snippet name
  * @param  string  start element
  * @return SnippetHelper
  */
 public static function create(Control $control, $name = NULL, $tag = 'div')
 {
     if (self::$outputAllowed) {
         // rendering flow or non-AJAX request
         $obj = new self();
         $obj->tag = trim($tag, '<>');
         if ($obj->tag) {
             echo '<', $obj->tag, ' id="', $control->getSnippetId($name), '">';
         }
         return $obj;
         // or string?
     } elseif ($control->isControlInvalid($name)) {
         // start snippet buffering
         $obj = new self();
         $obj->id = $control->getSnippetId($name);
         $obj->payload = $control->getPresenter()->getPayload();
         ob_start();
         $obj->level = ob_get_level();
         self::$outputAllowed = TRUE;
         return $obj;
     } else {
         return FALSE;
     }
 }
示例#2
0
 public static function renderSnippets(Control $control, stdClass $local, array $params)
 {
     $control->snippetMode = FALSE;
     $payload = $control->getPresenter()->getPayload();
     if (isset($local->blocks)) {
         foreach ($local->blocks as $name => $function) {
             if ($name[0] !== '_' || !$control->isControlInvalid(substr($name, 1))) {
                 continue;
             }
             ob_start();
             $function = reset($function);
             $snippets = $function($local, $params);
             $payload->snippets[$id = $control->getSnippetId(substr($name, 1))] = ob_get_clean();
             if ($snippets) {
                 $payload->snippets += $snippets;
                 unset($payload->snippets[$id]);
             }
         }
     }
     $control->snippetMode = TRUE;
     if ($control instanceof IRenderable) {
         $queue = array($control);
         do {
             foreach (array_shift($queue)->getComponents() as $child) {
                 if ($child instanceof IRenderable) {
                     if ($child->isControlInvalid()) {
                         $child->snippetMode = TRUE;
                         $child->render();
                         $child->snippetMode = FALSE;
                     }
                 } elseif ($child instanceof IComponentContainer) {
                     $queue[] = $child;
                 }
             }
         } while ($queue);
     }
 }