CClientScript
| Пакет | system.web |
|---|---|
| Наследование | класс CClientScript » CApplicationComponent » CComponent |
| Реализует | IApplicationComponent |
| С | 1.0 |
| Исходный код | framework/web/CClientScript.php |
Свойства общедоступные
| Свойство | Тип | Описание | Определено в |
|---|---|---|---|
| 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). |
public function addPackage($name,$definition)
{
$this->packages[$name]=$definition;
return $this;
}
Добавляет пакет в список пакетов.
См. также
- CClientScript::packages.
getCoreScriptUrl() метод
public string getCoreScriptUrl() | ||
| {return} | string | базовый URL всех файлов ядра JavaScript |
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, если пакет еще не зарегистрирован. |
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.
См. также
hasPackage() метод (доступен начиная с v1.1.18)
public bool hasPackage(string $name) | ||
| $name | string | имя пакета скрипта. |
| {return} | bool | |
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;
}
Проверяет доступность пакета.
См. также
isCssFileRegistered() метод
public boolean isCssFileRegistered(string $url) | ||
| $url | string | URL файла CSS |
| {return} | boolean | является ли файл CSS уже зарегистрированным |
public function isCssFileRegistered($url)
{
return isset($this->cssFiles[$url]);
}
Проверяет, был ли зарегистрирован файл CSS.
END_OF_DOCUMENT_MARKERisCssRegistered() метод
public boolean isCssRegistered(string $id) | ||
| $id | строка | Идентификатор, уникально определяющий код CSS |
| {return} | булево | указывает, зарегистрирован ли код CSS |
public function isCssRegistered($id)
{
return isset($this->css[$id]);
}
Проверяет, зарегистрирован ли код CSS.
isScriptFileRegistered() метод
public boolean isScriptFileRegistered(string $url, integer $position=0) | ||
| $url | строка | URL файла JavaScript |
| $position | целое число | Позиция кода JavaScript. Допустимые значения:
|
| {return} | булево | указывает, зарегистрирован ли файл JavaScript |
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. Допустимые значения:
|
| {return} | булево | указывает, зарегистрирован ли код JavaScript |
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 | массив | Параметры, передаваемые методу |
protected function recordCachingAction($context,$method,$params)
{
if(($controller=Yii::app()->getController())!==null)
$controller->recordCachingAction($context,$method,$params);
}
Записывает вызов метода, когда активен кэширование вывода. Это сокращение для Yii::app()->controller->recordCachingAction. Если контроллер отсутствует, ничего не записывается.
См. также
registerCoreScript() метод
public static registerCoreScript(string $name) | ||
| $name | строка | Имя пакета скрипта. |
| {return} | статический | объект CClientScript (для поддержки цепочки вызовов методов, доступно начиная с версии 1.1.5). |
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). |
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). |
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). |
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). |
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). |
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-кода. Допустимые значения:
|
| $htmlOptions | array | дополнительные атрибуты HTML. Примечание: атрибуты HTML не разрешены для позиций скриптов "CClientScript::POS_LOAD" и "CClientScript::POS_READY". |
| {return} | static | объект CClientScript (для поддержки цепочки методов, доступно начиная с версии 1.1.5). |
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-кода. Допустимые значения:
|
| $htmlOptions | array | дополнительные атрибуты HTML. |
| {return} | static | объект CClientScript (для поддержки цепочки методов, доступно начиная с версии 1.1.5). |
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() |
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. |
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 | вывод, который нужно вставить с скриптами. |
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 | вывод, который нужно вставить с скриптами. |
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() |
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 | вывод, который нужно вставить с скриптами. |
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-вывод. |
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() |
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. |
public function setCoreScriptUrl($value)
{
$this->_baseUrl=$value;
}
Устанавливает базовый URL всех файлов JavaScript core. Этот setter предусмотрен на случай, если файлы JavaScript core публикуются вручную в заданном месте. Это может сэкономить время публикации активов для крупных приложений.
unifyScripts() метод (доступен начиная с v1.1.5)
protected void unifyScripts() |
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