system system.base system.caching system.caching.dependencies system.collections system.console system.db system.db.ar system.db.schema system.db.schema.cubrid system.db.schema.mssql system.db.schema.mysql system.db.schema.oci system.db.schema.pgsql system.db.schema.sqlite system.gii system.i18n system.i18n.gettext system.logging system.test system.utils system.validators system.web system.web.actions system.web.auth system.web.filters system.web.form system.web.helpers system.web.renderers system.web.services system.web.widgets system.web.widgets.captcha system.web.widgets.pagers zii.behaviors zii.widgets zii.widgets.grid zii.widgets.jui

CPradoViewRenderer

system.web.renderers
继承 class CPradoViewRenderer » CViewRenderer » CApplicationComponent » CComponent
实现 IViewRenderer, IApplicationComponent
可用自 1.0
源码 framework/web/renderers/CPradoViewRenderer.php
CPradoViewRenderer implements a view renderer that allows users to use a template syntax similar to PRADO templates.

To use CPradoViewRenderer, configure it as an application component named "viewRenderer" in the application configuration:
array(
    'components'=>array(
        ......
        'viewRenderer'=>array(
            'class'=>'CPradoViewRenderer',
        ),
    ),
)


CPradoViewRenderer allows you to write view files with the following syntax:
// PHP tags:
<%= expression %>
// <?php echo expression ?>
<% statement %>
// <?php statement ?></li>

// component tags:
<com:WigetClass name1="value1" name2='value2' name3={value3} >
// <?php $this->beginWidget('WigetClass',
// array('name1'=>"value1", 'name2'=>'value2', 'name3'=>value3)); ?>
</com:WigetClass >
// <?php $this->endWidget('WigetClass'); ?>
<com:WigetClass name1="value1" name2='value2' name3={value3} />
// <?php $this->widget('WigetClass',
// array('name1'=>"value1", 'name2'=>'value2', 'name3'=>value3)); ?>

// cache tags:
<cache:fragmentID name1="value1" name2='value2' name3={value3} >
// <?php if($this->beginCache('fragmentID',
// array('name1'=>"value1", 'name2'=>'value2', 'name3'=>value3))): ?>
</cache:fragmentID >
// <?php $this->endCache('fragmentID'); endif; ?>

// clip tags:
<clip:clipID >
// <?php $this->beginClip('clipID'); ?>
</clip:clipID >
// <?php $this->endClip('clipID'); ?>

// comment tags:
<!--- comments --->
// the whole tag will be stripped off

公共属性

隐藏继承的属性

属性类型描述被定义在
behaviors array the behaviors that should be attached to this component. CApplicationComponent
fileExtension string the extension name of the view file. CViewRenderer
filePermission integer the chmod permission for temporary directories and files generated during parsing. CViewRenderer
isInitialized boolean Checks if this application component has been initialized. CApplicationComponent
useRuntimePath boolean whether to store the parsing results in the application's runtime directory. CViewRenderer

公共方法

隐藏继承的方法

方法描述被定义在
__call() Calls the named method which is not a class method. CComponent
__get() Returns a property value, an event handler list or a behavior based on its name. CComponent
__isset() Checks if a property value is null. CComponent
__set() Sets value of a component property. CComponent
__unset() Sets a component property to be null. CComponent
asa() Returns the named behavior object. CComponent
attachBehavior() Attaches a behavior to this component. CComponent
attachBehaviors() Attaches a list of behaviors to the component. CComponent
attachEventHandler() Attaches an event handler to an event. CComponent
canGetProperty() Determines whether a property can be read. CComponent
canSetProperty() Determines whether a property can be set. CComponent
detachBehavior() Detaches a behavior from the component. CComponent
detachBehaviors() Detaches all behaviors from the component. CComponent
detachEventHandler() Detaches an existing event handler. CComponent
disableBehavior() Disables an attached behavior. CComponent
disableBehaviors() Disables all behaviors attached to this component. CComponent
enableBehavior() Enables an attached behavior. CComponent
enableBehaviors() Enables all behaviors attached to this component. CComponent
evaluateExpression() Evaluates a PHP expression or callback under the context of this component. CComponent
getEventHandlers() Returns the list of attached event handlers for an event. CComponent
getIsInitialized() Checks if this application component has been initialized. CApplicationComponent
hasEvent() Determines whether an event is defined. CComponent
hasEventHandler() Checks whether the named event has attached handlers. CComponent
hasProperty() Determines whether a property is defined. CComponent
init() Initializes the application component. CApplicationComponent
raiseEvent() Raises an event. CComponent
renderFile() Renders a view file. CViewRenderer

受保护的方法

隐藏继承的方法

方法描述被定义在
generateViewFile() Parses the source view file and saves the results as another file. CPradoViewRenderer
getViewFile() Generates the resulting view file path. CViewRenderer

方法详情

generateViewFile() 方法
protected void generateViewFile(string $sourceFile, string $viewFile)
$sourceFile string the source view file path
$viewFile string the resulting view file path
源码: framework/web/renderers/CPradoViewRenderer.php#80 (显示)
protected function generateViewFile($sourceFile,$viewFile)
{
    static 
$regexRules=array(
        
'<%=?\s*(.*?)\s*%>',        // PHP statements or expressions
        
'<\/?(com|cache|clip):([\w\.]+)\s*((?:\s*\w+\s*=\s*\'.*?(?<!\\\\)\'|\s*\w+\s*=\s*".*?(?<!\\\\)"|\s*\w+\s*=\s*\{.*?\})*)\s*\/?>'// component tags
        
'<!---.*?--->',    // template comments
    
);
    
$this->_sourceFile=$sourceFile;
    
$this->_input=file_get_contents($sourceFile);
    
$n=preg_match_all('/'.implode('|',$regexRules).'/msS',$this->_input,$matches,PREG_SET_ORDER|PREG_OFFSET_CAPTURE);
    
$textStart=0;
    
$this->_output="<?php /* source file: $sourceFile */ ?>\n";
    for(
$i=0;$i<$n;++$i)
    {
        
$match=&$matches[$i];
        
$str=$match[0][0];
        
$matchStart=$match[0][1];
        
$matchEnd=$matchStart+strlen($str)-1;

        if(
$matchStart>$textStart)
            
$this->_output.=substr($this->_input,$textStart,$matchStart-$textStart);
        
$textStart=$matchEnd+1;

        if(
strpos($str,'<com:')===0)    // opening component tag
        
{
            
$type=$match[3][0];
            if(
$str[strlen($str)-2]!=='/')  // open tag
                
$this->_output.=$this->processBeginWidget($type,$match[4][0],$match[2][1]);
            else
                
$this->_output.=$this->processWidget($type,$match[4][0],$match[2][1]);
        }
        elseif(
strpos($str,'</com:')===0)    // closing component tag
            
$this->_output.=$this->processEndWidget($match[3][0],$match[2][1]);
        elseif(
strpos($str,'<cache:')===0)    // opening cache tag
        
{
            
$id=$match[3][0];
            if(
$str[strlen($str)-2]!=='/')  // open tag
                
$this->_output.=$this->processBeginCache($id,$match[4][0],$match[2][1]);
            else
                
$this->_output.=$this->processCache($id,$match[4][0],$match[2][1]);
        }
        elseif(
strpos($str,'</cache:')===0)    // closing cache tag
            
$this->_output.=$this->processEndCache($match[3][0],$match[2][1]);
        elseif(
strpos($str,'<clip:')===0)    // opening clip tag
        
{
            
$id=$match[3][0];
            if(
$str[strlen($str)-2]!=='/')  // open tag
                
$this->_output.=$this->processBeginClip($id,$match[4][0],$match[2][1]);
            else
                
$this->_output.=$this->processClip($id,$match[4][0],$match[2][1]);
        }
        elseif(
strpos($str,'</clip:')===0)    // closing clip tag
            
$this->_output.=$this->processEndClip($match[3][0],$match[2][1]);
        elseif(
strpos($str,'<%=')===0)    // expression
            
$this->_output.=$this->processExpression($match[1][0],$match[1][1]);
        elseif(
strpos($str,'<%')===0)    // statement
            
$this->_output.=$this->processStatement($match[1][0],$match[1][1]);
    }
    if(
$textStart<strlen($this->_input))
        
$this->_output.=substr($this->_input,$textStart);

    
file_put_contents($viewFile,$this->_output);
}

Parses the source view file and saves the results as another file. This method is required by the parent class.