Yii Framework v1.1.10 绫诲弬鑰

CClientScript

system.web
缁ф壙 class CClientScript » CApplicationComponent » CComponent
瀹炵幇 IApplicationComponent
婧愯嚜 1.0
鐗堟湰 $Id: CClientScript.php 3559 2012-02-09 21:12:53Z alexander.makarow $
婧愮爜 framework/web/CClientScript.php
CClientScript manages JavaScript and CSS stylesheets for views.

鍏叡灞炴

闅愯棌缁ф壙灞炴

灞炴绫诲瀷鎻忚堪瀹氫箟鍦
behaviors array 杩欎釜搴旂敤缁勪欢闄勫姞鐨勮涓恒 杩欐琛屼负灏嗗湪搴旂敤缁勪欢璋冪敤init鏃堕檮鍔犲湪搴旂敤缁勪欢涓娿 璇峰弬鐓CModel::behaviors濡備綍鎸囧畾姝ゅ睘鎬у笺 CApplicationComponent
corePackages array list of core script packages (name=>package spec). CClientScript
coreScriptPosition integer Where the scripts registered using registerCoreScript or registerPackage will be inserted in the page. CClientScript
coreScriptUrl string Returns the base URL of all core javascript files. CClientScript
enableJavaScript boolean whether JavaScript should be enabled. CClientScript
isInitialized boolean 妫鏌ュ簲鐢ㄧ粍浠舵槸鍚﹀凡缁忓垵濮嬪寲銆 CApplicationComponent
packages array list of custom script packages (name=>package spec). CClientScript
scriptMap array the mapping between script file names and the corresponding script URLs. CClientScript

鍙椾繚鎶ゅ睘鎬

闅愯棌缁ф壙灞炴

灞炴绫诲瀷鎻忚堪瀹氫箟鍦
coreScripts array the registered script packages (name => package spec) CClientScript
css array the registered css code blocks (key => array(CSS code, media type)). CClientScript
cssFiles array the registered CSS files (CSS URL=>media type). CClientScript
hasScripts boolean whether there are any javascript or css to be rendered. CClientScript
linkTags array the registered head link tags. CClientScript
metaTags array the registered head meta tags. CClientScript
scriptFiles array the registered JavaScript files (position, key => URL) CClientScript
scripts array the registered JavaScript code blocks (position, key => code) CClientScript

鍏叡鏂规硶

闅愯棌缁ф壙鏂规硶

鏂规硶鎻忚堪瀹氫箟鍦
__call() 濡傛灉绫讳腑娌℃湁璋冪殑鏂规硶鍚嶏紝鍒欒皟鐢ㄨ繖涓柟娉曘 CComponent
__get() 杩斿洖涓涓睘鎬у笺佷竴涓簨浠跺鐞嗙▼搴忓垪琛ㄦ垨涓涓涓哄悕绉般 CComponent
__isset() 妫鏌ヤ竴涓睘鎬ф槸鍚︿负null銆 CComponent
__set() 璁剧疆涓涓粍浠剁殑灞炴у笺 CComponent
__unset() 璁剧疆涓涓粍浠剁殑灞炴т负null銆 CComponent
addPackage() Adds a package to packages list. CClientScript
asa() 杩斿洖杩欎釜鍚嶅瓧鐨勮涓哄璞° CComponent
attachBehavior() 闄勫姞涓涓涓哄埌缁勪欢銆 CComponent
attachBehaviors() 闄勫姞涓涓涓哄垪琛ㄥ埌缁勪欢銆 CComponent
attachEventHandler() 涓轰簨浠堕檮鍔犱竴涓簨浠跺鐞嗙▼搴忋 CComponent
canGetProperty() 纭畾灞炴ф槸鍚﹀彲璇汇 CComponent
canSetProperty() 纭畾灞炴ф槸鍚﹀彲鍐欍 CComponent
detachBehavior() 浠庣粍浠朵腑鍒嗙涓涓涓恒 CComponent
detachBehaviors() 浠庣粍浠朵腑鍒嗙鎵鏈夎涓恒 CComponent
detachEventHandler() 鍒嗙涓涓瓨鍦ㄧ殑浜嬩欢澶勭悊绋嬪簭銆 CComponent
disableBehavior() 绂佺敤涓涓檮鍔犺涓恒 CComponent
disableBehaviors() 绂佺敤缁勪欢闄勫姞鐨勬墍鏈夎涓恒 CComponent
enableBehavior() 鍚敤涓涓檮鍔犺涓恒 CComponent
enableBehaviors() 鍚敤缁勪欢闄勫姞鐨勬墍鏈夎涓恒 CComponent
evaluateExpression() 璁$畻涓涓狿HP琛ㄨ揪寮忥紝鎴栨牴鎹粍浠朵笂涓嬫枃鎵ц鍥炶皟銆 CComponent
getCoreScriptUrl() Returns the base URL of all core javascript files. CClientScript
getEventHandlers() 杩斿洖涓涓簨浠剁殑闄勫姞澶勭悊绋嬪簭鍒楄〃銆 CComponent
getIsInitialized() 妫鏌ュ簲鐢ㄧ粍浠舵槸鍚﹀凡缁忓垵濮嬪寲銆 CApplicationComponent
getPackageBaseUrl() Returns the base URL for a registered package with the specified name. CClientScript
hasEvent() 纭畾涓涓簨浠舵槸鍚﹀畾涔夈 CComponent
hasEventHandler() 妫鏌ヤ簨浠舵槸鍚︽湁闄勫姞鐨勫鐞嗙▼搴忋 CComponent
hasProperty() 纭畾灞炴ф槸鍚﹁瀹氫箟銆 CComponent
init() 鍒濆鍖栧簲鐢ㄧ粍浠躲 CApplicationComponent
isCssFileRegistered() Checks whether the CSS file has been registered. CClientScript
isCssRegistered() Checks whether the CSS code has been registered. CClientScript
isScriptFileRegistered() Checks whether the JavaScript file has been registered. CClientScript
isScriptRegistered() Checks whether the JavaScript code has been registered. CClientScript
raiseEvent() 鍙戣捣涓涓簨浠躲 CComponent
registerCoreScript() Registers a script package that is listed in packages. CClientScript
registerCss() Registers a piece of CSS code. CClientScript
registerCssFile() Registers a CSS file CClientScript
registerLinkTag() Registers a link tag that will be inserted in the head section (right before the title element) of the resulting page. CClientScript
registerMetaTag() Registers a meta tag that will be inserted in the head section (right before the title element) of the resulting page. CClientScript
registerPackage() Registers a script package that is listed in packages. CClientScript
registerScript() Registers a piece of javascript code. CClientScript
registerScriptFile() Registers a javascript file. CClientScript
render() Renders the registered scripts. CClientScript
renderBodyBegin() Inserts the scripts at the beginning of the body section. CClientScript
renderBodyEnd() Inserts the scripts at the end of the body section. CClientScript
renderCoreScripts() Renders the specified core javascript library. CClientScript
renderHead() Inserts the scripts in the head section. CClientScript
reset() Cleans all registered scripts. CClientScript
setCoreScriptUrl() Sets the base URL of all core javascript files. CClientScript

鍙椾繚鎶ゆ柟娉

闅愯棌缁ф壙鏂规硶

鏂规硶鎻忚堪瀹氫箟鍦
recordCachingAction() Records a method call when an output cache is in effect. CClientScript
remapScripts() Uses scriptMap to re-map the registered scripts. CClientScript
unifyScripts() Removes duplicated scripts from scriptFiles. CClientScript

灞炴ц缁

corePackages 灞炴 锛堝彲鐢ㄨ嚜 v1.1.7锛
public array $corePackages;

list of core script packages (name=>package spec). Please refer to packages for details about package spec.

By default, the core script packages are specified in 'framework/web/js/packages.php'. You may configure this property to customize the core script packages.

When calling registerPackage to register a script package, packages will be checked first followed by this property. If a package is found, it will be registered for rendering later on.

coreScriptPosition 灞炴 锛堝彲鐢ㄨ嚜 v1.1.3锛
public integer $coreScriptPosition;

Where the scripts registered using registerCoreScript or registerPackage will be inserted in the page. This can be one of the CClientScript::POS_* constants. Defaults to CClientScript::POS_HEAD.

coreScriptUrl 灞炴
public string getCoreScriptUrl()
public void setCoreScriptUrl(string $value)

Returns the base URL of all core javascript files. If the base URL is not explicitly set, this method will publish the whole directory 'framework/web/js/source' and return the corresponding URL.

coreScripts 灞炴 锛堝彲鐢ㄨ嚜 v1.1.7锛
protected array $coreScripts;

the registered script packages (name => package spec)

css 灞炴 锛堝彲鐢ㄨ嚜 v1.1.3锛
protected array $css;

the registered css code blocks (key => array(CSS code, media type)).

cssFiles 灞炴
protected array $cssFiles;

the registered CSS files (CSS URL=>media type).

enableJavaScript 灞炴
public boolean $enableJavaScript;

whether JavaScript should be enabled. Defaults to true.

hasScripts 灞炴 锛堝彲鐢ㄨ嚜 v1.1.7锛
protected boolean $hasScripts;

whether there are any javascript or css to be rendered.

linkTags 灞炴 锛堝彲鐢ㄨ嚜 v1.1.3锛
protected array $linkTags;

the registered head link tags. Each array element represents an option array that will be passed as the last parameter of CHtml::linkTag.

metaTags 灞炴 锛堝彲鐢ㄨ嚜 v1.1.3锛
protected array $metaTags;

the registered head meta tags. Each array element represents an option array that will be passed as the last parameter of CHtml::metaTag.

packages 灞炴 锛堝彲鐢ㄨ嚜 v1.1.7锛
public array $packages;

list of custom script packages (name=>package spec). This property keeps a list of named script packages, each of which can contain a set of CSS and/or JavaScript script files, and their dependent package names. By calling registerPackage, one can register a whole package of client scripts together with their dependent packages and render them in the HTML output.

The array structure is as follows:

array(
  'package-name'=>array(
    'basePath'=>'alias of the directory containing the script files',
    'baseUrl'=>'base URL for the script files',
    'js'=>array(list of js files relative to basePath/baseUrl),
    'css'=>array(list of css files relative to basePath/baseUrl),
    'depends'=>array(list of dependent packages),
  ),
  ......
)


The JS and CSS files listed are relative to 'basePath'. For example, if 'basePath' is 'application.assets', a script named 'comments.js' will refer to the file 'protected/assets/comments.js'.

When a script is being rendered in HTML, it will be prefixed with 'baseUrl'. For example, if 'baseUrl' is '/assets', the 'comments.js' script will be rendered using URL '/assets/comments.js'.

If 'baseUrl' does not start with '/', the relative URL of the application entry script will be inserted at the beginning. For example, if 'baseUrl' is 'assets' and the current application runs with the URL 'http://localhost/demo/index.php', then the 'comments.js' script will be rendered using URL '/demo/assets/comments.js'.

If 'baseUrl' is not set, the script will be published by CAssetManager and the corresponding published URL will be used.

When calling registerPackage to register a script package, this property will be checked first followed by corePackages. If a package is found, it will be registered for rendering later on.

scriptFiles 灞炴
protected array $scriptFiles;

the registered JavaScript files (position, key => URL)

scriptMap 灞炴
public array $scriptMap;

the mapping between script file names and the corresponding script URLs. The array keys are script file names (without directory part) and the array values are the corresponding URLs. If an array value is false, the corresponding script file will not be rendered. If an array key is '*.js' or '*.css', the corresponding URL will replace all JavaScript files or CSS files, respectively.

This property is mainly used to optimize the generated HTML pages by merging different scripts files into fewer and optimized script files.

scripts 灞炴
protected array $scripts;

the registered JavaScript code blocks (position, key => code)

鏂规硶璇︾粏

addPackage() 鏂规硶 锛堝彲鐢ㄨ嚜 v1.1.9锛
public CClientScript addPackage(string $name, array $definition)
$name string the name of the script package.
$definition array the definition array of the script package,
{return} CClientScript the CClientScript object itself (to support method chaining, available since version 1.1.10).
婧愮爜锛 framework/web/CClientScript.php#751 (鏄剧ず)
public function addPackage($name,$definition)
{
    
$this->packages[$name]=$definition;
    return 
$this;
}

Adds a package to packages list.

鍙傝

  • CClientScript::packages.
getCoreScriptUrl() 鏂规硶
public string getCoreScriptUrl()
{return} string the base URL of all core javascript files
婧愮爜锛 framework/web/CClientScript.php#444 (鏄剧ず)
public function getCoreScriptUrl()
{
    if(
$this->_baseUrl!==null)
        return 
$this->_baseUrl;
    else
        return 
$this->_baseUrl=Yii::app()->getAssetManager()->publish(YII_PATH.'/web/js/source');
}

Returns the base URL of all core javascript files. If the base URL is not explicitly set, this method will publish the whole directory 'framework/web/js/source' and return the corresponding URL.

getPackageBaseUrl() 鏂规硶 锛堝彲鐢ㄨ嚜 v1.1.8锛
public string getPackageBaseUrl(string $name)
$name string the package name
{return} string the base URL for the named package. False is returned if the package is not registered yet.
婧愮爜锛 framework/web/CClientScript.php#471 (鏄剧ず)
public function getPackageBaseUrl($name)
{
    if(!isset(
$this->coreScripts[$name]))
        return 
false;
    
$package=$this->coreScripts[$name];
    if(isset(
$package['baseUrl']))
    {
        
$baseUrl=$package['baseUrl'];
        if(
$baseUrl==='' || $baseUrl[0]!=='/' && strpos($baseUrl,'://')===false)
            
$baseUrl=Yii::app()->getRequest()->getBaseUrl().'/'.$baseUrl;
        
$baseUrl=rtrim($baseUrl,'/');
    }
    else if(isset(
$package['basePath']))
        
$baseUrl=Yii::app()->getAssetManager()->publish(Yii::getPathOfAlias($package['basePath']));
    else
        
$baseUrl=$this->getCoreScriptUrl();

    return 
$this->coreScripts[$name]['baseUrl']=$baseUrl;
}

Returns the base URL for a registered package with the specified name. If needed, this method may publish the assets of the package and returns the published base URL.

鍙傝

isCssFileRegistered() 鏂规硶
public boolean isCssFileRegistered(string $url)
$url string URL of the CSS file
{return} boolean whether the CSS file is already registered
婧愮爜锛 framework/web/CClientScript.php#676 (鏄剧ず)
public function isCssFileRegistered($url)
{
    return isset(
$this->cssFiles[$url]);
}

Checks whether the CSS file has been registered.

isCssRegistered() 鏂规硶
public boolean isCssRegistered(string $id)
$id string ID that uniquely identifies the CSS code
{return} boolean whether the CSS code is already registered
婧愮爜锛 framework/web/CClientScript.php#686 (鏄剧ず)
public function isCssRegistered($id)
{
    return isset(
$this->css[$id]);
}

Checks whether the CSS code has been registered.

isScriptFileRegistered() 鏂规硶
public boolean isScriptFileRegistered(string $url, integer $position=0)
$url string URL of the javascript file
$position integer the position of the JavaScript code. Valid values include the following:
  • CClientScript::POS_HEAD : the script is inserted in the head section right before the title element.
  • CClientScript::POS_BEGIN : the script is inserted at the beginning of the body section.
  • CClientScript::POS_END : the script is inserted at the end of the body section.
{return} boolean whether the javascript file is already registered
婧愮爜锛 framework/web/CClientScript.php#702 (鏄剧ず)
public function isScriptFileRegistered($url,$position=self::POS_HEAD)
{
    return isset(
$this->scriptFiles[$position][$url]);
}

Checks whether the JavaScript file has been registered.

isScriptRegistered() 鏂规硶
public boolean isScriptRegistered(string $id, integer $position=4)
$id string ID that uniquely identifies the JavaScript code
$position integer the position of the JavaScript code. Valid values include the following:
  • CClientScript::POS_HEAD : the script is inserted in the head section right before the title element.
  • CClientScript::POS_BEGIN : the script is inserted at the beginning of the body section.
  • CClientScript::POS_END : the script is inserted at the end of the body section.
  • CClientScript::POS_LOAD : the script is inserted in the window.onload() function.
  • CClientScript::POS_READY : the script is inserted in the jQuery's ready function.
{return} boolean whether the javascript code is already registered
婧愮爜锛 framework/web/CClientScript.php#720 (鏄剧ず)
public function isScriptRegistered($id,$position=self::POS_READY)
{
    return isset(
$this->scripts[$position][$id]);
}

Checks whether the JavaScript code has been registered.

recordCachingAction() 鏂规硶
protected void recordCachingAction(string $context, string $method, array $params)
$context string a property name of the controller. It refers to an object whose method is being called. If empty it means the controller itself.
$method string the method name
$params array parameters passed to the method
婧愮爜锛 framework/web/CClientScript.php#735 (鏄剧ず)
protected function recordCachingAction($context,$method,$params)
{
    if((
$controller=Yii::app()->getController())!==null)
        
$controller->recordCachingAction($context,$method,$params);
}

Records a method call when an output cache is in effect. This is a shortcut to Yii::app()->controller->recordCachingAction. In case when controller is absent, nothing is recorded.

鍙傝

registerCoreScript() 鏂规硶
public CClientScript registerCoreScript(string $name)
$name string the name of the script package.
{return} CClientScript the CClientScript object itself (to support method chaining, available since version 1.1.5).
婧愮爜锛 framework/web/CClientScript.php#510 (鏄剧ず)
public function registerCoreScript($name)
{
    if(isset(
$this->coreScripts[$name]))
        return 
$this;
    if(isset(
$this->packages[$name]))
        
$package=$this->packages[$name];
    else
    {
        if(
$this->corePackages===null)
            
$this->corePackages=require(YII_PATH.'/web/js/packages.php');
        if(isset(
$this->corePackages[$name]))
            
$package=$this->corePackages[$name];
    }
    if(isset(
$package))
    {
        if(!empty(
$package['depends']))
        {
            foreach(
$package['depends'] as $p)
                
$this->registerCoreScript($p);
        }
        
$this->coreScripts[$name]=$package;
        
$this->hasScripts=true;
        
$params=func_get_args();
        
$this->recordCachingAction('clientScript','registerCoreScript',$params);
    }
    return 
$this;
}

Registers a script package that is listed in packages.

鍙傝

  • renderCoreScript
registerCss() 鏂规硶
public CClientScript registerCss(string $id, string $css, string $media='')
$id string ID that uniquely identifies this piece of CSS code
$css string the CSS code
$media string media that the CSS code should be applied to. If empty, it means all media types.
{return} CClientScript the CClientScript object itself (to support method chaining, available since version 1.1.5).
婧愮爜锛 framework/web/CClientScript.php#560 (鏄剧ず)
public function registerCss($id,$css,$media='')
{
    
$this->hasScripts=true;
    
$this->css[$id]=array($css,$media);
    
$params=func_get_args();
    
$this->recordCachingAction('clientScript','registerCss',$params);
    return 
$this;
}

Registers a piece of CSS code.

registerCssFile() 鏂规硶
public CClientScript registerCssFile(string $url, string $media='')
$url string URL of the CSS file
$media string media that the CSS file should be applied to. If empty, it means all media types.
{return} CClientScript the CClientScript object itself (to support method chaining, available since version 1.1.5).
婧愮爜锛 framework/web/CClientScript.php#544 (鏄剧ず)
public function registerCssFile($url,$media='')
{
    
$this->hasScripts=true;
    
$this->cssFiles[$url]=$media;
    
$params=func_get_args();
    
$this->recordCachingAction('clientScript','registerCssFile',$params);
    return 
$this;
}

Registers a CSS file

registerLinkTag() 鏂规硶
public CClientScript registerLinkTag(string $relation=NULL, string $type=NULL, string $href=NULL, string $media=NULL, array $options=array ( ))
$relation string rel attribute of the link tag. If null, the attribute will not be generated.
$type string type attribute of the link tag. If null, the attribute will not be generated.
$href string href attribute of the link tag. If null, the attribute will not be generated.
$media string media attribute of the link tag. If null, the attribute will not be generated.
$options array other options in name-value pairs
{return} CClientScript the CClientScript object itself (to support method chaining, available since version 1.1.5).
婧愮爜锛 framework/web/CClientScript.php#654 (鏄剧ず)
public function registerLinkTag($relation=null,$type=null,$href=null,$media=null,$options=array())
{
    
$this->hasScripts=true;
    if(
$relation!==null)
        
$options['rel']=$relation;
    if(
$type!==null)
        
$options['type']=$type;
    if(
$href!==null)
        
$options['href']=$href;
    if(
$media!==null)
        
$options['media']=$media;
    
$this->linkTags[serialize($options)]=$options;
    
$params=func_get_args();
    
$this->recordCachingAction('clientScript','registerLinkTag',$params);
    return 
$this;
}

Registers a link tag that will be inserted in the head section (right before the title element) of the resulting page.

registerMetaTag() 鏂规硶
public CClientScript registerMetaTag(string $content, string $name=NULL, string $httpEquiv=NULL, array $options=array ( ))
$content string content attribute of the meta tag
$name string name attribute of the meta tag. If null, the attribute will not be generated
$httpEquiv string http-equiv attribute of the meta tag. If null, the attribute will not be generated
$options array other options in name-value pairs (e.g. 'scheme', 'lang')
{return} CClientScript the CClientScript object itself (to support method chaining, available since version 1.1.5).
婧愮爜锛 framework/web/CClientScript.php#631 (鏄剧ず)
public function registerMetaTag($content,$name=null,$httpEquiv=null,$options=array())
{
    
$this->hasScripts=true;
    if(
$name!==null)
        
$options['name']=$name;
    if(
$httpEquiv!==null)
        
$options['http-equiv']=$httpEquiv;
    
$options['content']=$content;
    
$this->metaTags[serialize($options)]=$options;
    
$params=func_get_args();
    
$this->recordCachingAction('clientScript','registerMetaTag',$params);
    return 
$this;
}

Registers a meta tag that will be inserted in the head section (right before the title element) of the resulting page.

Note: Meta tags with same attributes will be rendered more then once if called with different values.

Example:

   $cs->registerMetaTag('example', 'description', null, array('lang' => 'en'));
   $cs->registerMetaTag('beispiel', 'description', null, array('lang' => 'de'));

registerPackage() 鏂规硶 锛堝彲鐢ㄨ嚜 v1.1.7锛
public CClientScript registerPackage(string $name)
$name string the name of the script package.
{return} CClientScript the CClientScript object itself (to support method chaining, available since version 1.1.5).
婧愮爜锛 framework/web/CClientScript.php#499 (鏄剧ず)
public function registerPackage($name)
{
    return 
$this->registerCoreScript($name);
}

Registers a script package that is listed in packages. This method is the same as registerCoreScript.

鍙傝

  • renderCoreScript
registerScript() 鏂规硶
public CClientScript registerScript(string $id, string $script, integer $position=4)
$id string ID that uniquely identifies this piece of JavaScript code
$script string the javascript code
$position integer the position of the JavaScript code. Valid values include the following:
  • CClientScript::POS_HEAD : the script is inserted in the head section right before the title element.
  • CClientScript::POS_BEGIN : the script is inserted at the beginning of the body section.
  • CClientScript::POS_END : the script is inserted at the end of the body section.
  • CClientScript::POS_LOAD : the script is inserted in the window.onload() function.
  • CClientScript::POS_READY : the script is inserted in the jQuery's ready function.
{return} CClientScript the CClientScript object itself (to support method chaining, available since version 1.1.5).
婧愮爜锛 framework/web/CClientScript.php#603 (鏄剧ず)
public function registerScript($id,$script,$position=self::POS_READY)
{
    
$this->hasScripts=true;
    
$this->scripts[$position][$id]=$script;
    if(
$position===self::POS_READY || $position===self::POS_LOAD)
        
$this->registerCoreScript('jquery');
    
$params=func_get_args();
    
$this->recordCachingAction('clientScript','registerScript',$params);
    return 
$this;
}

Registers a piece of javascript code.

registerScriptFile() 鏂规硶
public CClientScript registerScriptFile(string $url, integer $position=0)
$url string URL of the javascript file
$position integer the position of the JavaScript code. Valid values include the following:
  • CClientScript::POS_HEAD : the script is inserted in the head section right before the title element.
  • CClientScript::POS_BEGIN : the script is inserted at the beginning of the body section.
  • CClientScript::POS_END : the script is inserted at the end of the body section.
{return} CClientScript the CClientScript object itself (to support method chaining, available since version 1.1.5).
婧愮爜锛 framework/web/CClientScript.php#580 (鏄剧ず)
public function registerScriptFile($url,$position=self::POS_HEAD)
{
    
$this->hasScripts=true;
    
$this->scriptFiles[$position][$url]=$url;
    
$params=func_get_args();
    
$this->recordCachingAction('clientScript','registerScriptFile',$params);
    return 
$this;
}

Registers a javascript file.

remapScripts() 鏂规硶
protected void remapScripts()
婧愮爜锛 framework/web/CClientScript.php#246 (鏄剧ず)
protected function remapScripts()
{
    
$cssFiles=array();
    foreach(
$this->cssFiles as $url=>$media)
    {
        
$name=basename($url);
        if(isset(
$this->scriptMap[$name]))
        {
            if(
$this->scriptMap[$name]!==false)
                
$cssFiles[$this->scriptMap[$name]]=$media;
        }
        else if(isset(
$this->scriptMap['*.css']))
        {
            if(
$this->scriptMap['*.css']!==false)
                
$cssFiles[$this->scriptMap['*.css']]=$media;
        }
        else
            
$cssFiles[$url]=$media;
    }
    
$this->cssFiles=$cssFiles;

    
$jsFiles=array();
    foreach(
$this->scriptFiles as $position=>$scripts)
    {
        
$jsFiles[$position]=array();
        foreach(
$scripts as $key=>$script)
        {
            
$name=basename($script);
            if(isset(
$this->scriptMap[$name]))
            {
                if(
$this->scriptMap[$name]!==false)
                    
$jsFiles[$position][$this->scriptMap[$name]]=$this->scriptMap[$name];
            }
            else if(isset(
$this->scriptMap['*.js']))
            {
                if(
$this->scriptMap['*.js']!==false)
                    
$jsFiles[$position][$this->scriptMap['*.js']]=$this->scriptMap['*.js'];
            }
            else
                
$jsFiles[$position][$key]=$script;
        }
    }
    
$this->scriptFiles=$jsFiles;
}

Uses scriptMap to re-map the registered scripts.

render() 鏂规硶
public void render(string &$output)
$output string the existing output that needs to be inserted with script tags
婧愮爜锛 framework/web/CClientScript.php#190 (鏄剧ず)
public function render(&$output)
{
    if(!
$this->hasScripts)
        return;

    
$this->renderCoreScripts();

    if(!empty(
$this->scriptMap))
        
$this->remapScripts();

    
$this->unifyScripts();

    
$this->renderHead($output);
    if(
$this->enableJavaScript)
    {
        
$this->renderBodyBegin($output);
        
$this->renderBodyEnd($output);
    }
}

Renders the registered scripts. This method is called in CController::render when it finishes rendering content. CClientScript thus gets a chance to insert script tags at head and body sections in the HTML output.

renderBodyBegin() 鏂规硶
public void renderBodyBegin(string &$output)
$output string the output to be inserted with scripts.
婧愮爜锛 framework/web/CClientScript.php#374 (鏄剧ず)
public function renderBodyBegin(&$output)
{
    
$html='';
    if(isset(
$this->scriptFiles[self::POS_BEGIN]))
    {
        foreach(
$this->scriptFiles[self::POS_BEGIN] as $scriptFile)
            
$html.=CHtml::scriptFile($scriptFile)."\n";
    }
    if(isset(
$this->scripts[self::POS_BEGIN]))
        
$html.=CHtml::script(implode("\n",$this->scripts[self::POS_BEGIN]))."\n";

    if(
$html!=='')
    {
        
$count=0;
        
$output=preg_replace('/(<body\b[^>]*>)/is','$1<###begin###>',$output,1,$count);
        if(
$count)
            
$output=str_replace('<###begin###>',$html,$output);
        else
            
$output=$html.$output;
    }
}

Inserts the scripts at the beginning of the body section.

renderBodyEnd() 鏂规硶
public void renderBodyEnd(string &$output)
$output string the output to be inserted with scripts.
婧愮爜锛 framework/web/CClientScript.php#400 (鏄剧ず)
public function renderBodyEnd(&$output)
{
    if(!isset(
$this->scriptFiles[self::POS_END]) && !isset($this->scripts[self::POS_END])
        && !isset(
$this->scripts[self::POS_READY]) && !isset($this->scripts[self::POS_LOAD]))
        return;

    
$fullPage=0;
    
$output=preg_replace('/(<\\/body\s*>)/is','<###end###>$1',$output,1,$fullPage);
    
$html='';
    if(isset(
$this->scriptFiles[self::POS_END]))
    {
        foreach(
$this->scriptFiles[self::POS_END] as $scriptFile)
            
$html.=CHtml::scriptFile($scriptFile)."\n";
    }
    
$scripts=isset($this->scripts[self::POS_END]) ? $this->scripts[self::POS_END] : array();
    if(isset(
$this->scripts[self::POS_READY]))
    {
        if(
$fullPage)
            
$scripts[]="jQuery(function($) {\n".implode("\n",$this->scripts[self::POS_READY])."\n});";
        else
            
$scripts[]=implode("\n",$this->scripts[self::POS_READY]);
    }
    if(isset(
$this->scripts[self::POS_LOAD]))
    {
        if(
$fullPage)
            
$scripts[]="jQuery(window).load(function() {\n".implode("\n",$this->scripts[self::POS_LOAD])."\n});";
        else
            
$scripts[]=implode("\n",$this->scripts[self::POS_LOAD]);
    }
    if(!empty(
$scripts))
        
$html.=CHtml::script(implode("\n",$scripts))."\n";

    if(
$fullPage)
        
$output=str_replace('<###end###>',$html,$output);
    else
        
$output=$output.$html;
}

Inserts the scripts at the end of the body section.

renderCoreScripts() 鏂规硶
public void renderCoreScripts()
婧愮爜锛 framework/web/CClientScript.php#294 (鏄剧ず)
public function renderCoreScripts()
{
    if(
$this->coreScripts===null)
        return;
    
$cssFiles=array();
    
$jsFiles=array();
    foreach(
$this->coreScripts as $name=>$package)
    {
        
$baseUrl=$this->getPackageBaseUrl($name);
        if(!empty(
$package['js']))
        {
            foreach(
$package['js'] as $js)
                
$jsFiles[$baseUrl.'/'.$js]=$baseUrl.'/'.$js;
        }
        if(!empty(
$package['css']))
        {
            foreach(
$package['css'] as $css)
                
$cssFiles[$baseUrl.'/'.$css]='';
        }
    }
    
// merge in place
    
if($cssFiles!==array())
    {
        foreach(
$this->cssFiles as $cssFile=>$media)
            
$cssFiles[$cssFile]=$media;
        
$this->cssFiles=$cssFiles;
    }
    if(
$jsFiles!==array())
    {
        if(isset(
$this->scriptFiles[$this->coreScriptPosition]))
        {
            foreach(
$this->scriptFiles[$this->coreScriptPosition] as $url)
                
$jsFiles[$url]=$url;
        }
        
$this->scriptFiles[$this->coreScriptPosition]=$jsFiles;
    }
}

Renders the specified core javascript library.

renderHead() 鏂规硶
public void renderHead(string &$output)
$output string the output to be inserted with scripts.
婧愮爜锛 framework/web/CClientScript.php#336 (鏄剧ず)
public function renderHead(&$output)
{
    
$html='';
    foreach(
$this->metaTags as $meta)
        
$html.=CHtml::metaTag($meta['content'],null,null,$meta)."\n";
    foreach(
$this->linkTags as $link)
        
$html.=CHtml::linkTag(null,null,null,null,$link)."\n";
    foreach(
$this->cssFiles as $url=>$media)
        
$html.=CHtml::cssFile($url,$media)."\n";
    foreach(
$this->css as $css)
        
$html.=CHtml::css($css[0],$css[1])."\n";
    if(
$this->enableJavaScript)
    {
        if(isset(
$this->scriptFiles[self::POS_HEAD]))
        {
            foreach(
$this->scriptFiles[self::POS_HEAD] as $scriptFile)
                
$html.=CHtml::scriptFile($scriptFile)."\n";
        }

        if(isset(
$this->scripts[self::POS_HEAD]))
            
$html.=CHtml::script(implode("\n",$this->scripts[self::POS_HEAD]))."\n";
    }

    if(
$html!=='')
    {
        
$count=0;
        
$output=preg_replace('/(<title\b[^>]*>|<\\/head\s*>)/is','<###head###>$1',$output,1,$count);
        if(
$count)
            
$output=str_replace('<###head###>',$html,$output);
        else
            
$output=$html.$output;
    }
}

Inserts the scripts in the head section.

reset() 鏂规硶
public void reset()
婧愮爜锛 framework/web/CClientScript.php#169 (鏄剧ず)
public function reset()
{
    
$this->hasScripts=false;
    
$this->coreScripts=array();
    
$this->cssFiles=array();
    
$this->css=array();
    
$this->scriptFiles=array();
    
$this->scripts=array();
    
$this->metaTags=array();
    
$this->linkTags=array();

    
$this->recordCachingAction('clientScript','reset',array());
}

Cleans all registered scripts.

setCoreScriptUrl() 鏂规硶
public void setCoreScriptUrl(string $value)
$value string the base URL of all core javascript files.
婧愮爜锛 framework/web/CClientScript.php#458 (鏄剧ず)
public function setCoreScriptUrl($value)
{
    
$this->_baseUrl=$value;
}

Sets the base URL of all core javascript files. This setter is provided in case when core javascript files are manually published to a pre-specified location. This may save asset publishing time for large-scale applications.

unifyScripts() 鏂规硶 锛堝彲鐢ㄨ嚜 v1.1.5锛
protected void unifyScripts()
婧愮爜锛 framework/web/CClientScript.php#214 (鏄剧ず)
protected function unifyScripts()
{
    if(!
$this->enableJavaScript)
        return;
    
$map=array();
    if(isset(
$this->scriptFiles[self::POS_HEAD]))
        
$map=$this->scriptFiles[self::POS_HEAD];

    if(isset(
$this->scriptFiles[self::POS_BEGIN]))
    {
        foreach(
$this->scriptFiles[self::POS_BEGIN] as $key=>$scriptFile)
        {
            if(isset(
$map[$scriptFile]))
                unset(
$this->scriptFiles[self::POS_BEGIN][$key]);
            else
                
$map[$scriptFile]=true;
        }
    }

    if(isset(
$this->scriptFiles[self::POS_END]))
    {
        foreach(
$this->scriptFiles[self::POS_END] as $key=>$scriptFile)
        {
            if(isset(
$map[$scriptFile]))
                unset(
$this->scriptFiles[self::POS_END][$key]);
        }
    }
}

Removes duplicated scripts from scriptFiles.

Copyright © 2008-2011 by Yii Software LLC
All Rights Reserved.