У меня есть пакет, который требует библиотеки Google Map. И я реализовал его так, как в представлении.
<?php Yii::app()->clientScript->registerScriptFile('http://maps.googleapis.com/maps/api/js?sensor=false&language=' . Yii::app()->language . '®ion='.Yii::app()->language, CClientScript::POS_HEAD); ?> <?php Yii::app()->clientScript->registerPackage('somelibrary'); ?>
(Обратите внимание, что для библиотеки Google Map необходим параметр Yii::app()->language
).
Но в выводе пакет всегда размещается над картами google.
<script type="text/javascript" src="/project/assets/74e60422/somelibrary.js"></script> <script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false&language=id&region=id"></script>
Есть ли решение сделать библиотеку Google Maps в качестве зависимости от пакета? Или, по крайней мере, как разместить пакет somelibrary
сразу после (не намного ниже) карт Google?
Вы можете сделать скрипт карты google самим пакетом, настроив свойство пакетов CClientScript. Затем вы можете добавить googlemap в зависимости от ваших пакетов, настроив «depend» в конфигурации пакета. Затем следует добавить скрипты в правильном порядке.
Чтобы добавить пакет, вы можете сделать следующее (не пробовал, но должен работать):
Yii::app()->clientScript->addPackage('googleMap', array( 'baseUrl'=>'http://maps.googleapis.com/maps/api', 'js'=>array('js?sensor=false&language=' . Yii::app()->language . '®ion='.Yii::app()->language) ));
Тот же 'googleMap'=>array(/*...*/)
будет работать, когда вы поместите его в свою конфигурацию.
Метод registerPackage()
не имеет возможности определять свою позицию, но вы можете определить положение файла registerScript () следующим образом …
public CClientScript registerScript(string $id, string $script, integer $position=4)
$ position целое положение кода JavaScript. Допустимые значения включают следующее: CClientScript :: POS_HEAD: скрипт вставляется в раздел заголовка прямо перед элементом заголовка. CClientScript :: POS_BEGIN: скрипт вставлен в начало раздела тела. CClientScript :: POS_END: сценарий вставлен в конец раздела тела. CClientScript :: POS_LOAD: скрипт вставляется в функцию window.onload (). CClientScript :: POS_READY: скрипт вставлен в функцию jQuery.