Вход Регистрация
Файл: core/renderable.php
Строк: 190
<?php

abstract class PEEP_Renderable
{
    
/**
     * List of added components.
     *
     * @var array
     */
    
protected $components = array();

    
/**
     * List of registered forms.
     *
     * @var array
     */
    
protected $forms = array();

    
/**
     * List of assigned vars.
     *
     * @var array
     */
    
protected $assignedVars = array();

    
/**
     * Template path.
     *
     * @var string
     */
    
protected $template;

    
/**
     * @var boolean
     */
    
protected $visible true;

    
/**
     * @var array
     */
    
private static $renderedClasses = array();

    
/**
     * @var boolean
     */
    
private static $devMode false;

    
/**
     * Getter for renderedClasses static property
     * 
     * @return array
     */
    
public static function getRenderedClasses()
    {
        return 
self::$renderedClasses;
    }

    
/**
     * Sets developer mode.
     * 
     * @param boolean $mode 
     */
    
public static function setDevMode$mode )
    {
        
self::$devMode = (bool) $mode;
    }

    
/**
     * Sets vomponent visibility.
     *
     * @param boolean $visible
     * @return PEEP_Renderable
     */
    
public function setVisible$visible )
    {
        
$this->visible = (bool) $visible;
        return 
$this;
    }

    
/**
     * Checks if component is visible.
     *
     * @return boolean
     */
    
public function isVisible()
    {
        return 
$this->visible;
    }

    
/**
     * Constructor.
     */
    
protected function __construct()
    {
        
    }

    
/**
     * @return string
     */
    
public function getTemplate()
    {
        return 
$this->template;
    }

    
/**
     * @param string $template
     */
    
public function setTemplate$template )
    {
        
$this->template $template;
    }

    
/**
     * Adds component to renderable object.
     *
     * @param string $key
     * @param PEEP_Renderable $component
     */
    
public function addComponent$keyPEEP_Renderable $component )
    {
        
$this->components[$key] = $component;
    }

    
/**
     * Returns added component by key.
     *
     * @param string $key
     * @return PEEP_Component
     */
    
public function getComponent$key )
    {
        return ( isset(
$this->components[$key]) ? $this->components[$key] : null );
    }

    
/**
     * Deletes added component.
     *
     * @param string $key
     */
    
public function removeComponent$key )
    {
        if ( isset(
$this->components[$key]) )
        {
            unset(
$this->components[$key]);
        }
    }

    
/**
     * Adds form to renderable object.
     *
     * @param Form $form
     */
    
public function addFormForm $form )
    {
        
$this->forms[$form->getName()] = $form;
    }

    
/**
     * Returns added form by key.
     *
     * @param string $key
     * @return PEEP_Form
     */
    
public function getForm$name )
    {
        return ( isset(
$this->forms[$name]) ? $this->forms[$name] : null );
    }

    
/**
     * Assigns variable.
     *
     * @param string $name
     * @param mixed $value
     */
    
public function assign$name$value )
    {
        
$this->assignedVars[$name] = $value;
    }

    
/**
     * @param string $varName
     */
    
public function clearAssign$varName )
    {
        if ( isset(
$this->assignedVars[$varName]) )
        {
            unset(
$this->assignedVars[$varName]);
        }
    }

    public function 
onBeforeRender()
    {
        
    }

    
/**
     * Returns rendered markup.
     *
     * @return string
     */
    
public function render()
    {
        
$this->onBeforeRender();
        if ( !
$this->visible )
        {
            return 
'';
        }

        
// TODO additional check
        
if ( $this->template === null )
        {
            throw new 
LogicException('No template was provided for render! Class `' get_class($this) . '`.');
        }

        
$className get_class($this);
        
PEEP::getEventManager()->trigger(new PEEP_Event("core.performance_test", array("key" => "renderable_render.start""params" => array("class" => $className))));

        
$viewRenderer PEEP_ViewRenderer::getInstance();

        
$prevVars $viewRenderer->getAllAssignedVars();

        if ( !empty(
$this->components) )
        {
            
$renderedCmps = array();

            foreach ( 
$this->components as $key => $value )
            {
                
$renderedCmps[$key] = $value->isVisible() ? $value->render() : '';
            }

            
$viewRenderer->assignVars($renderedCmps);
        }

        if ( !empty(
$this->forms) )
        {
            
$viewRenderer->assignVar('_peepForms_'$this->forms);
        }

        
$viewRenderer->assignVars($this->assignedVars);

        
$renderedMarkup $viewRenderer->renderTemplate($this->template);

        
$viewRenderer->clearAssignedVars();

        
$viewRenderer->assignVars($prevVars);

        
// temp dirty data collect for dev tool
        
if ( self::$devMode )
        {
            
self::$renderedClasses[$className] = $this->template;
        }

        
PEEP::getEventManager()->trigger(new PEEP_Event("core.performance_test", array("key" => "renderable_render.end""params" => array("class" => $className))));

        return 
$renderedMarkup;
    }
}
Онлайн: 1
Реклама