Spec-Zone.ru › Yii 1.1

CClientScript

Пакет system.web
Наследование класс CClientScript » CApplicationComponent » CComponent
Реализует IApplicationComponent
С 1.0
Исходный код framework/web/CClientScript.php
CClientScript управляет JavaScript и CSS стилями для представлений.

Свойства общедоступные

Свойство Тип Описание Определено в
behaviors массив поведения, которые должны быть прикреплены к данному компоненту. CApplicationComponent
corePackages массив список основных пакетов скриптов (имя=>спецификация пакета). CClientScript
coreScriptPosition целое число Место вставки скриптов, зарегистрированных с помощью registerCoreScript или registerPackage на странице. CClientScript
coreScriptUrl строка Возвращает базовый URL всех основных файлов JavaScript. CClientScript
defaultScriptFilePosition целое число Место вставки скриптов, зарегистрированных с помощью registerScriptFile на странице. CClientScript
defaultScriptPosition целое число Место вставки скриптов, зарегистрированных с помощью registerScript на странице. CClientScript
enableJavaScript булево включен ли JavaScript. CClientScript
isInitialized булево Проверяет, был ли инициализирован компонент приложения. CApplicationComponent
packages массив список пользовательских пакетов скриптов (имя=>спецификация пакета). CClientScript
scriptMap массив отображение между именами файлов скриптов и соответствующими URL-адресами скриптов. CClientScript
scripts массив зарегистрированные блоки JavaScript-кода (позиция, ключ => код) CClientScript

Защищенные свойства

Свойство Тип Описание Определено в
coreScripts массив зарегистрированные пакеты скриптов (имя => спецификация пакета) CClientScript
css массив зарегистрированные блоки CSS-кода (ключ => массив(CSS-код, тип медиа)). CClientScript
cssFiles массив зарегистрированные CSS-файлы (URL CSS=>тип медиа). CClientScript
hasScripts булево есть ли JavaScript или CSS для рендеринга. CClientScript
linkTags массив зарегистрированные теги head link. CClientScript
metaTags массив зарегистрированные теги head meta. CClientScript
scriptFiles массив зарегистрированные файлы JavaScript (позиция, ключ => URL) CClientScript

Публичные методы

Метод Описание Определено в
__call() Вызывает метод с заданным именем, который не является методом класса. CComponent
__get() Возвращает значение свойства, список обработчиков событий или поведение на основе его имени. CComponent
__isset() Проверяет, является ли значение свойства нулевым. CComponent
__set() Устанавливает значение свойства компонента. CComponent
__unset() Устанавливает свойство компонента в значение null. CComponent
addPackage() Добавляет пакет в список пакетов. 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() Вычисляет PHP выражение или обратный вызов в контексте этого компонента. CComponent
getCoreScriptUrl() Возвращает базовый URL всех файлов ядра JavaScript. CClientScript
getEventHandlers() Возвращает список прикреплённых обработчиков событий для события. CComponent
getIsInitialized() Проверяет, был ли инициализирован этот компонент приложения. CApplicationComponent
getPackageBaseUrl() Возвращает базовый URL для зарегистрированного пакета с указанным именем. CClientScript
hasEvent() Определяет, определено ли событие. CComponent
hasEventHandler() Проверяет, есть ли прикреплённые обработчики к событию с данным именем. CComponent
hasPackage() Проверяет доступность пакета. CClientScript
hasProperty() Определяет, определено ли свойство. CComponent
init() Инициализирует компонент приложения. CApplicationComponent
isCssFileRegistered() Проверяет, был ли зарегистрирован CSS файл. CClientScript
isCssRegistered() Проверяет, был ли зарегистрирован CSS код. CClientScript
isScriptFileRegistered() Проверяет, был ли зарегистрирован файл JavaScript. CClientScript
isScriptRegistered() Проверяет, был ли зарегистрирован JavaScript код. CClientScript
raiseEvent() Вызывает событие. CComponent
registerCoreScript() Регистрирует пакет скриптов, который указан в packages. CClientScript
registerCss() Регистрирует фрагмент CSS кода. CClientScript
registerCssFile() Регистрирует CSS файл. CClientScript
registerLinkTag() Регистрирует тег link, который будет вставлен в секцию head (непосредственно перед элементом title) результирующей страницы. CClientScript
registerMetaTag() Регистрирует тег meta, который будет вставлен в секцию head (непосредственно перед элементом title) результирующей страницы. CClientScript
registerPackage() Регистрирует пакет скриптов, который указан в packages. CClientScript
registerScript() Регистрирует фрагмент JavaScript кода. CClientScript
registerScriptFile() Регистрирует файл JavaScript. CClientScript
render() Рендерит зарегистрированные скрипты. CClientScript
renderBodyBegin() Вставляет скрипты в начало секции body. CClientScript
renderBodyEnd() Вставляет скрипты в конец секции body. CClientScript
renderCoreScripts() Рендерит указанную основную библиотеку JavaScript. CClientScript
renderHead() Вставляет скрипты в секцию head. CClientScript
reset() Очищает все зарегистрированные скрипты. CClientScript
setCoreScriptUrl() Устанавливает базовый URL всех файлов ядра JavaScript. CClientScript

Защищенные методы

Метод Описание Определено в
recordCachingAction() Записывает вызов метода, когда активен кэш вывода. CClientScript
remapScripts() Использует scriptMap для повторной сопоставления зарегистрированных скриптов. CClientScript
renderScriptBatch() Компонует блок HTML скрипта из заданных значений скрипта, CClientScript
unifyScripts() Удаляет дублированные скрипты из scriptFiles. CClientScript

Подробное описание свойств

corePackages свойство (доступно начиная с v1.1.7)

public array $corePackages;

список основных пакетов скриптов (имя=>спецификация пакета). Обратитесь к пакетам для получения подробной информации о спецификации пакета.

По умолчанию, пакеты основных скриптов указаны в 'framework/web/js/packages.php'. Вы можете настроить эту свойство для настройки основных пакетов скриптов.

При вызове registerPackage для регистрации пакета скрипта, пакеты будут проверены в первую очередь, а затем это свойство. Если пакет найден, он будет зарегистрирован для рендеринга позже.

coreScriptPosition свойство (доступно начиная с v1.1.3)

public integer $coreScriptPosition;

Место, куда будут вставлены скрипты, зарегистрированные с помощью registerCoreScript или registerPackage, в странице. Это может быть одно из констант CClientScript::POS_*. По умолчанию CClientScript::POS_HEAD.

coreScriptUrl свойство

public string getCoreScriptUrl()
public void setCoreScriptUrl(string $value)

Возвращает базовый URL всех файлов ядра JavaScript. Если базовый URL не задан явно, этот метод опубликует всю директорию 'framework/web/js/source' и вернет соответствующий URL.

coreScripts свойство (доступно начиная с v1.1.7)

protected array $coreScripts;

зарегистрированные пакеты скриптов (имя => спецификация пакета)

css свойство (доступно начиная с v1.1.3)

protected array $css;

зарегистрированные блоки кода CSS (ключ => массив (код CSS, тип носителя)).

cssFiles свойство

protected array $cssFiles;

зарегистрированные файлы CSS (URL CSS=>тип носителя).

defaultScriptFilePosition свойство (доступно начиная с v1.1.11)

public integer $defaultScriptFilePosition;

Место, куда будут вставлены скрипты, зарегистрированные с помощью registerScriptFile, в странице. Это может быть одно из констант CClientScript::POS_*. По умолчанию CClientScript::POS_HEAD.

defaultScriptPosition свойство (доступно начиная с v1.1.11)

public integer $defaultScriptPosition;

Место, куда будут вставлены скрипты, зарегистрированные с помощью registerScript, в странице. Это может быть одно из констант CClientScript::POS_*. По умолчанию CClientScript::POS_READY.

enableJavaScript свойство

public boolean $enableJavaScript;

должен ли быть включен JavaScript. По умолчанию true.

hasScripts свойство (доступно начиная с v1.1.7)

protected boolean $hasScripts;

есть ли какие-либо JavaScript или CSS для рендеринга.

linkTags свойство (доступно начиная с v1.1.3)

protected array $linkTags;

зарегистрированные теги link в head. Каждый элемент массива представляет собой массив опций, который будет передан в качестве последнего параметра CHtml::linkTag.

metaTags свойство (доступно начиная с v1.1.3)

protected array $metaTags;

зарегистрированные теги meta в head. Каждый элемент массива представляет собой массив опций, который будет передан в качестве последнего параметра CHtml::metaTag.

packages свойство (доступно начиная с v1.1.7)

public array $packages;

список пользовательских пакетов скриптов (имя=>спецификация пакета). Это свойство хранит список именованных пакетов скриптов, каждый из которых может содержать набор файлов CSS и/или JavaScript, а также имена зависимых пакетов. Вызвав registerPackage, можно зарегистрировать весь пакет клиентских скриптов вместе с их зависимыми пакетами и отобразить их в HTML-выводе.

Структура массива следующая:

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),
  ),
  ......
)


Файлы JS и CSS, указанные в списке, являются относительными по отношению к 'basePath'. Например, если 'basePath' это 'application.assets', скрипт с именем 'comments.js' будет ссылаться на файл 'protected/assets/comments.js'.

Когда скрипт отображается в HTML, он будет префикссован с 'baseUrl'. Например, если 'baseUrl' это '/assets', скрипт 'comments.js' будет отображаться с помощью URL '/assets/comments.js'.

Если 'baseUrl' не начинается с '/', будет вставлен относительный URL входного скрипта приложения. Например, если 'baseUrl' это 'assets' и текущее приложение работает с URL 'http://localhost/demo/index.php', то скрипт 'comments.js' будет отображаться с помощью URL '/demo/assets/comments.js'.

Если 'baseUrl' не задан, скрипт будет опубликован CAssetManager и будет использован соответствующий опубликованный URL.

При вызове registerPackage для регистрации пакета скрипта, это свойство будет проверяться в первую очередь, а затем corePackages. Если пакет найден, он будет зарегистрирован для рендеринга позже.

scriptFiles свойство

protected array $scriptFiles;

зарегистрированные файлы JavaScript (позиция, ключ => URL)

scriptMap свойство

public array $scriptMap;

отображение между именами файлов скриптов и соответствующими URL скриптов. Ключи массива — имена файлов скриптов (без части каталога), а значения массива — соответствующие URL. Если значение массива равно false, соответствующий файл скрипта не будет отображен. Если ключ массива это '*.js' или '*.css', соответствующий URL заменит все файлы JavaScript или CSS соответственно.

Это свойство в основном используется для оптимизации сгенерированных HTML-страниц путем объединения различных файлов скриптов в меньшее и оптимизированное количество файлов скриптов.

scripts свойство

public array $scripts;

зарегистрированные блоки кода JavaScript (позиция, ключ => код)

Подробное описание методов

addPackage() метод (доступен начиная с v1.1.9)

public static addPackage(string $name, array $definition)
$name string имя пакета скрипта.
$definition array массив определения пакета скрипта.
{return} static объект CClientScript (для поддержки цепочки вызовов методов, доступно с версии 1.1.10).
Исходный код: framework/web/CClientScript.php#871 (показать)
public function addPackage($name,$definition)
{
    
$this->packages[$name]=$definition;
    return 
$this;
}

Добавляет пакет в список пакетов.

См. также

  • CClientScript::packages.

getCoreScriptUrl() метод

public string getCoreScriptUrl()
{return} string базовый URL всех файлов ядра JavaScript
Исходный код: framework/web/CClientScript.php#506 (показать)
public function getCoreScriptUrl()
{
    if(
$this->_baseUrl!==null)
        return 
$this->_baseUrl;
    else
        return 
$this->_baseUrl=Yii::app()->getAssetManager()->publish(YII_PATH.'/web/js/source');
}

Возвращает базовый URL всех файлов ядра JavaScript. Если базовый URL не задан явно, этот метод опубликует всю директорию 'framework/web/js/source' и вернет соответствующий URL.

getPackageBaseUrl() метод (доступно начиная с v1.1.8)

public string getPackageBaseUrl(string $name)
$name string имя пакета
{return} string базовый URL для именованного пакета. Возвращается false, если пакет еще не зарегистрирован.
Исходный код: framework/web/CClientScript.php#533 (показать)
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,'/');
    }
    elseif(isset(
$package['basePath']))
        
$baseUrl=Yii::app()->getAssetManager()->publish(Yii::getPathOfAlias($package['basePath']));
    else
        
$baseUrl=$this->getCoreScriptUrl();

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

Возвращает базовый URL для зарегистрированного пакета с заданным именем. При необходимости этот метод может опубликовать ресурсы пакета и вернуть опубликованный базовый URL.

См. также

  • registerPackage

hasPackage() метод (доступен начиная с v1.1.18)

public bool hasPackage(string $name)
$name string имя пакета скрипта.
{return} bool
Исходный код: framework/web/CClientScript.php#560 (показать)
public function hasPackage($name)
{
    if(isset(
$this->coreScripts[$name]))
        return 
true;
    if(isset(
$this->packages[$name]))
        return 
true;
    else
    {
        if(
$this->corePackages===null)
            
$this->corePackages=require(YII_PATH.'/web/js/packages.php');
        if(isset(
$this->corePackages[$name]))
            return 
true;
    }
    return 
false;
}

Проверяет доступность пакета.

См. также

  • registerPackage

isCssFileRegistered() метод

public boolean isCssFileRegistered(string $url)
$url string URL файла CSS
{return} boolean является ли файл CSS уже зарегистрированным
Исходный код: framework/web/CClientScript.php#796 (показать)
public function isCssFileRegistered($url)
{
    return isset(
$this->cssFiles[$url]);
}

Проверяет, был ли зарегистрирован файл CSS.

END_OF_DOCUMENT_MARKER

isCssRegistered() метод

public boolean isCssRegistered(string $id)
$id строка Идентификатор, уникально определяющий код CSS
{return} булево указывает, зарегистрирован ли код CSS
Исходный код: framework/web/CClientScript.php#806 (показать)
public function isCssRegistered($id)
{
    return isset(
$this->css[$id]);
}

Проверяет, зарегистрирован ли код CSS.

isScriptFileRegistered() метод

public boolean isScriptFileRegistered(string $url, integer $position=0)
$url строка URL файла JavaScript
$position целое число Позиция кода JavaScript. Допустимые значения:
  • CClientScript::POS_HEAD : скрипт вставляется в секцию head перед элементом title.
  • CClientScript::POS_BEGIN : скрипт вставляется в начало секции body.
  • CClientScript::POS_END : скрипт вставляется в конец секции body.
{return} булево указывает, зарегистрирован ли файл JavaScript
Исходный код: framework/web/CClientScript.php#822 (показать)
public function isScriptFileRegistered($url,$position=self::POS_HEAD)
{
    return isset(
$this->scriptFiles[$position][$url]);
}

Проверяет, зарегистрирован ли файл JavaScript.

isScriptRegistered() метод

public boolean isScriptRegistered(string $id, integer $position=4)
$id строка Идентификатор, уникально определяющий код JavaScript
$position целое число Позиция кода JavaScript. Допустимые значения:
  • CClientScript::POS_HEAD : скрипт вставляется в секцию head перед элементом title.
  • CClientScript::POS_BEGIN : скрипт вставляется в начало секции body.
  • CClientScript::POS_END : скрипт вставляется в конец секции body.
  • CClientScript::POS_LOAD : скрипт вставляется в функцию window.onload().
  • CClientScript::POS_READY : скрипт вставляется в функцию jQuery's ready().
{return} булево указывает, зарегистрирован ли код JavaScript
Исходный код: framework/web/CClientScript.php#840 (показать)
public function isScriptRegistered($id,$position=self::POS_READY)
{
    return isset(
$this->scripts[$position][$id]);
}

Проверяет, зарегистрирован ли код JavaScript.

recordCachingAction() метод

protected void recordCachingAction(string $context, string $method, array $params)
$context строка Имя свойства контроллера. Ссылается на объект, метод которого вызывается. Если пусто, означает сам контроллер.
$method строка Имя метода
$params массив Параметры, передаваемые методу
Исходный код: framework/web/CClientScript.php#855 (показать)
protected function recordCachingAction($context,$method,$params)
{
    if((
$controller=Yii::app()->getController())!==null)
        
$controller->recordCachingAction($context,$method,$params);
}

Записывает вызов метода, когда активен кэширование вывода. Это сокращение для Yii::app()->controller->recordCachingAction. Если контроллер отсутствует, ничего не записывается.

См. также

  • COutputCache

registerCoreScript() метод

public static registerCoreScript(string $name)
$name строка Имя пакета скрипта.
{return} статический объект CClientScript (для поддержки цепочки вызовов методов, доступно начиная с версии 1.1.5).
Исходный код: framework/web/CClientScript.php#596 (показать)
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);
    }
    elseif(
YII_DEBUG)
        throw new 
CException('There is no CClientScript package: '.$name);
    else
        
Yii::log('There is no CClientScript package: '.$name,CLogger::LEVEL_WARNING,'system.web.CClientScript');

    return 
$this;
}

Регистрирует пакет скрипта, который перечислен в пакетах.

См. также

  • renderCoreScript

registerCss() метод

public static registerCss(string $id, string $css, string $media='')
$id строка Идентификатор, уникально определяющий этот фрагмент CSS кода
$css строка Код CSS
$media строка Тип носителя, к которому должен применяться код CSS. Если пусто, то для всех типов носителей.
{return} статический объект CClientScript (для поддержки цепочки вызовов методов, доступно начиная с версии 1.1.5).
Исходный код: framework/web/CClientScript.php#651 (показать)
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;
}

Регистрирует фрагмент кода CSS.

registerCssFile() метод

public static registerCssFile(string $url, string $media='')
$url строка URL файла CSS
$media строка Тип носителя, к которому должен применяться файл CSS. Если пусто, то для всех типов носителей.
{return} статический объект CClientScript (для поддержки цепочки вызовов методов, доступно начиная с версии 1.1.5).
Исходный код: framework/web/CClientScript.php#635 (показать)
public function registerCssFile($url,$media='')
{
    
$this->hasScripts=true;
    
$this->cssFiles[$url]=$media;
    
$params=func_get_args();
    
$this->recordCachingAction('clientScript','registerCssFile',$params);
    return 
$this;
}

Регистрирует файл CSS.

registerLinkTag() метод

public static registerLinkTag(string $relation=NULL, string $type=NULL, string $href=NULL, string $media=NULL, array $options=array ( ))
$relation строка Атрибут rel тега link. Если null, атрибут не будет сгенерирован.
$type строка Атрибут type тега link. Если null, атрибут не будет сгенерирован.
$href строка Атрибут href тега link. Если null, атрибут не будет сгенерирован.
$media строка Атрибут media тега link. Если null, атрибут не будет сгенерирован.
$options массив Другие параметры в формате имя-значение
{return} статический объект CClientScript (для поддержки цепочки вызовов методов, доступно начиная с версии 1.1.5).
Исходный код: framework/web/CClientScript.php#773 (показать)
public function registerLinkTag($relation=null,$type=null,$href=null,$media=null,$options=array())
{
    
$params=func_get_args();

    
$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;
    
$this->recordCachingAction('clientScript','registerLinkTag',$params);
    return 
$this;
}

Регистрирует тег link, который будет вставлен в секцию head (непосредственно перед элементом title) результирующей страницы.

registerMetaTag() метод

public static registerMetaTag(string $content, string $name=NULL, string $httpEquiv=NULL, array $options=array ( ), string $id=NULL)
$content строка Атрибут content тега meta
$name строка Атрибут name тега meta. Если null, атрибут не будет сгенерирован
$httpEquiv строка Атрибут http-equiv тега meta. Если null, атрибут не будет сгенерирован
$options массив Другие параметры в формате имя-значение (например, 'scheme', 'lang')
$id строка Необязательный id тега meta для предотвращения дублирования
{return} статический объект CClientScript (для поддержки цепочки вызовов методов, доступно начиная с версии 1.1.5).
Исходный код: framework/web/CClientScript.php#749 (показать)
public function registerMetaTag($content,$name=null,$httpEquiv=null,$options=array(),$id=null)
{
    
$params=func_get_args();

    
$this->hasScripts=true;
    if(
$name!==null)
        
$options['name']=$name;
    if(
$httpEquiv!==null)
        
$options['http-equiv']=$httpEquiv;
    
$options['content']=$content;
    
$this->metaTags[null===$id?count($this->metaTags):$id]=$options;
    
$this->recordCachingAction('clientScript','registerMetaTag',$params);
    return 
$this;
}

Регистрирует тег meta, который будет вставлен в секцию head (непосредственно перед элементом title) результирующей страницы.

Примечание: Каждый вызов этого метода приведет к рендерингу нового тега meta, даже если его атрибуты одинаковы.

Пример:

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

registerPackage() метод (доступен начиная с v1.1.7)

public static registerPackage(string $name)
$name string имя пакета скриптов.
{return} static объект CClientScript (для поддержки цепочки методов, доступно начиная с версии 1.1.5).
Исходный код: framework/web/CClientScript.php#584 (показать)
public function registerPackage($name)
{
    return 
$this->registerCoreScript($name);
}

Регистрирует пакет скриптов, который перечислен в пакетах. Этот метод идентичен методу registerCoreScript.

См. также

  • renderCoreScript

registerScript() метод

public static registerScript(string $id, string $script, integer $position=NULL, array $htmlOptions=array ( ))
$id string Идентификатор, уникально определяющий этот фрагмент JavaScript-кода.
$script string код JavaScript.
$position integer Позиция JavaScript-кода. Допустимые значения:
  • CClientScript::POS_HEAD : скрипт вставляется в секцию head непосредственно перед элементом title.
  • CClientScript::POS_BEGIN : скрипт вставляется в начало секции body.
  • CClientScript::POS_END : скрипт вставляется в конец секции body.
  • CClientScript::POS_LOAD : скрипт вставляется в функцию window.onload().
  • CClientScript::POS_READY : скрипт вставляется в функцию jQuery's ready.
$htmlOptions array дополнительные атрибуты HTML. Примечание: атрибуты HTML не разрешены для позиций скриптов "CClientScript::POS_LOAD" и "CClientScript::POS_READY".
{return} static объект CClientScript (для поддержки цепочки методов, доступно начиная с версии 1.1.5).
Исходный код: framework/web/CClientScript.php#708 (показать)
public function registerScript($id,$script,$position=null,array $htmlOptions=array())
{
    
$params=func_get_args();

    if(
$position===null)
        
$position=$this->defaultScriptPosition;
    
$this->hasScripts=true;
    if(empty(
$htmlOptions))
        
$scriptValue=$script;
    else
    {
        if(
$position==self::POS_LOAD || $position==self::POS_READY)
            throw new 
CException(Yii::t('yii','Script HTML options are not allowed for "CClientScript::POS_LOAD" and "CClientScript::POS_READY".'));
        
$scriptValue=$htmlOptions;
        
$scriptValue['content']=$script;
    }
    
$this->scripts[$position][$id]=$scriptValue;
    if(
$position===self::POS_READY || $position===self::POS_LOAD)
        
$this->registerCoreScript('jquery');
    
$this->recordCachingAction('clientScript','registerScript',$params);
    return 
$this;
}

Регистрирует фрагмент JavaScript-кода.

registerScriptFile() метод

public static registerScriptFile(string $url, integer $position=NULL, array $htmlOptions=array ( ))
$url string URL файла JavaScript.
$position integer Позиция JavaScript-кода. Допустимые значения:
  • CClientScript::POS_HEAD : скрипт вставляется в секцию head непосредственно перед элементом title.
  • CClientScript::POS_BEGIN : скрипт вставляется в начало секции body.
  • CClientScript::POS_END : скрипт вставляется в конец секции body.
$htmlOptions array дополнительные атрибуты HTML.
{return} static объект CClientScript (для поддержки цепочки методов, доступно начиная с версии 1.1.5).
Исходный код: framework/web/CClientScript.php#672 (показать)
public function registerScriptFile($url,$position=null,array $htmlOptions=array())
{
    
$params=func_get_args();

    if(
$position===null)
        
$position=$this->defaultScriptFilePosition;
    
$this->hasScripts=true;
    if(empty(
$htmlOptions))
        
$value=$url;
    else
    {
        
$value=$htmlOptions;
        
$value['src']=$url;
    }
    
$this->scriptFiles[$position][$url]=$value;
    
$this->recordCachingAction('clientScript','registerScriptFile',$params);
    return 
$this;
}

Регистрирует файл JavaScript.

remapScripts() метод

protected void remapScripts()
Исходный код: framework/web/CClientScript.php#259 (показать)
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;
        }
        elseif(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=>$scriptFiles)
    {
        
$jsFiles[$position]=array();
        foreach(
$scriptFiles as $scriptFile=>$scriptFileValue)
        {
            
$name=basename($scriptFile);
            if(isset(
$this->scriptMap[$name]))
            {
                if(
$this->scriptMap[$name]!==false)
                    
$jsFiles[$position][$this->scriptMap[$name]]=$this->scriptMap[$name];
            }
            elseif(isset(
$this->scriptMap['*.js']))
            {
                if(
$this->scriptMap['*.js']!==false)
                    
$jsFiles[$position][$this->scriptMap['*.js']]=$this->scriptMap['*.js'];
            }
            else
                
$jsFiles[$position][$scriptFile]=$scriptFileValue;
        }
    }
    
$this->scriptFiles=$jsFiles;
}

Использует scriptMap для повторной привязки зарегистрированных скриптов.

render() метод

public void render(string &$output)
$output string существующий вывод, который нужно вставить с помощью тегов script.
Исходный код: framework/web/CClientScript.php#203 (показать)
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);
    }
}

Выводит зарегистрированные скрипты. Этот метод вызывается в CController::render после завершения рендеринга содержимого. Таким образом, CClientScript получает возможность вставить теги script в head и body секции HTML-вывода.

renderBodyBegin() метод

public void renderBodyBegin(string &$output)
$output string вывод, который нужно вставить с скриптами.
Исходный код: framework/web/CClientScript.php#426 (показать)
public function renderBodyBegin(&$output)
{
    
$html='';
    if(isset(
$this->scriptFiles[self::POS_BEGIN]))
    {
        foreach(
$this->scriptFiles[self::POS_BEGIN] as $scriptFileUrl=>$scriptFileValue)
        {
            if(
is_array($scriptFileValue))
                
$html.=CHtml::scriptFile($scriptFileUrl,$scriptFileValue)."\n";
            else
                
$html.=CHtml::scriptFile($scriptFileUrl)."\n";
        }
    }
    if(isset(
$this->scripts[self::POS_BEGIN]))
        
$html.=$this->renderScriptBatch($this->scripts[self::POS_BEGIN]);

    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;
    }
}

Вставляет скрипты в начало секции body.

renderBodyEnd() метод

public void renderBodyEnd(string &$output)
$output string вывод, который нужно вставить с скриптами.
Исходный код: framework/web/CClientScript.php#457 (показать)
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 $scriptFileUrl=>$scriptFileValue)
        {
            if(
is_array($scriptFileValue))
                
$html.=CHtml::scriptFile($scriptFileUrl,$scriptFileValue)."\n";
            else
                
$html.=CHtml::scriptFile($scriptFileUrl)."\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).on('load',function() {\n".implode("\n",$this->scripts[self::POS_LOAD])."\n});";
        else
            
$scripts[]=implode("\n",$this->scripts[self::POS_LOAD]);
    }
    if(!empty(
$scripts))
        
$html.=$this->renderScriptBatch($scripts);

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

Вставляет скрипты в конец секции body.

renderCoreScripts() метод

public void renderCoreScripts()
Исходный код: framework/web/CClientScript.php#341 (показать)
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 => $value)
                
$jsFiles[$url]=$value;
        }
        
$this->scriptFiles[$this->coreScriptPosition]=$jsFiles;
    }
}

Выводит указанную базовую библиотеку JavaScript.

renderHead() метод

public void renderHead(string &$output)
$output string вывод, который нужно вставить с скриптами.
Исходный код: framework/web/CClientScript.php#383 (показать)
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 $scriptFileValueUrl=>$scriptFileValue)
            {
                if(
is_array($scriptFileValue))
                    
$html.=CHtml::scriptFile($scriptFileValueUrl,$scriptFileValue)."\n";
                else
                    
$html.=CHtml::scriptFile($scriptFileValueUrl)."\n";
            }
        }

        if(isset(
$this->scripts[self::POS_HEAD]))
            
$html.=$this->renderScriptBatch($this->scripts[self::POS_HEAD]);
    }

    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;
    }
}

Вставляет скрипты в секцию head.

renderScriptBatch() метод

protected string renderScriptBatch(array $scripts)
$scripts array значения скриптов для обработки.
{return} string HTML-вывод.
Исходный код: framework/web/CClientScript.php#310 (показать)
protected function renderScriptBatch(array $scripts)
{
    
$html = '';
    
$scriptBatches = array();
    foreach(
$scripts as $scriptValue)
    {
        if(
is_array($scriptValue))
        {
            
$scriptContent = $scriptValue['content'];
            unset(
$scriptValue['content']);
            
$scriptHtmlOptions = $scriptValue;
            
ksort($scriptHtmlOptions);
        }
        else
        {
            
$scriptContent = $scriptValue;
            
$scriptHtmlOptions = array();
        }
        
$key=serialize($scriptHtmlOptions);
        
$scriptBatches[$key]['htmlOptions']=$scriptHtmlOptions;
        
$scriptBatches[$key]['scripts'][]=$scriptContent;
    }
    foreach(
$scriptBatches as $scriptBatch)
        if(!empty(
$scriptBatch['scripts']))
            
$html.=CHtml::script(implode("\n",$scriptBatch['scripts']),$scriptBatch['htmlOptions'])."\n";
    return 
$html;
}

Создает блок HTML скрипта из заданных значений скриптов, пытаясь сгруппировать скрипты в один тег 'script' если это возможно.

reset() метод

public void reset()
Исходный код: framework/web/CClientScript.php#182 (показать)
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());
}

Очищает все зарегистрированные скрипты.

setCoreScriptUrl() метод

public void setCoreScriptUrl(string $value)
$value string базовый URL всех файлов JavaScript core.
Исходный код: framework/web/CClientScript.php#520 (показать)
public function setCoreScriptUrl($value)
{
    
$this->_baseUrl=$value;
}

Устанавливает базовый URL всех файлов JavaScript core. Этот setter предусмотрен на случай, если файлы JavaScript core публикуются вручную в заданном месте. Это может сэкономить время публикации активов для крупных приложений.

unifyScripts() метод (доступен начиная с v1.1.5)

protected void unifyScripts()
Исходный код: framework/web/CClientScript.php#227 (показать)
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 $scriptFile=>$scriptFileValue)
        {
            if(isset(
$map[$scriptFile]))
                unset(
$this->scriptFiles[self::POS_BEGIN][$scriptFile]);
            else
                
$map[$scriptFile]=true;
        }
    }

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

Удаляет дублирующиеся скрипты из scriptFiles.

© 2008–2017 by Yii Software LLC
Licensed under the three clause BSD license.
http://www.yiiframework.com/doc/api/1.1/CClientScript

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API