RegisterPackage зависит от RegisterScriptFile

У меня есть пакет, для которого требуется библиотека Google Map. И я реализовал это так в представлении.

<?php Yii::app()->clientScript->registerScriptFile('http://maps.googleapis.com/maps/api/js?sensor=false&language=' . Yii::app()->language . '&region='.Yii::app()->language, CClientScript::POS_HEAD); ?>
<?php Yii::app()->clientScript->registerPackage('somelibrary'); ?>

(Обратите внимание, что для библиотеки Google Map требуется параметр Yii::app()->language).

Но в выводе пакет всегда ставится над гугл картами.

<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&amp;language=id&amp;region=id"></script>

Есть ли решение сделать библиотеку Google Maps зависимой от пакета? Или, хотя бы, как разместить пакет somelibrary сразу после (не намного ниже) гугл карт?


person Petra Barus    schedule 18.01.2012    source источник


Ответы (2)


Вы можете сделать скрипт карты Google самим пакетом, настроив пакеты свойство CClientScript. Затем вы можете добавить googlemap к своим зависимостям пакетов, настроив «зависит» в конфигурации пакета. Затем это должно добавить сценарии в правильном порядке.

Чтобы добавить пакет, вы можете сделать следующее (не пробовал, но должно работать):

Yii::app()->clientScript->addPackage('googleMap', array(
    'baseUrl'=>'http://maps.googleapis.com/maps/api',
    'js'=>array('js?sensor=false&language=' . Yii::app()->language . '&region='.Yii::app()->language)
));

Тот же 'googleMap'=>array(/*...*/) будет работать, если вы добавите его в свою конфигурацию.

person cebe    schedule 13.03.2012
comment
Можете ли вы дать пример кода о том, как сделать карту Google в виде пакета? - person Petra Barus; 13.03.2012

Метод registerPackage() не имеет возможности определить свою позицию, но вы можете определить позицию registerScriptfile() следующим образом...

public CClientScript registerScript(string $id, string $script, integer $position=4)

$position integer позиция кода JavaScript. К допустимым значениям относятся следующие: CClientScript::POS_HEAD : сценарий вставляется в раздел заголовка непосредственно перед элементом заголовка. CClientScript::POS_BEGIN : скрипт вставляется в начало раздела body. CClientScript::POS_END : скрипт вставляется в конец раздела body. CClientScript::POS_LOAD : скрипт вставляется в функцию window.onload(). CClientScript::POS_READY : скрипт вставляется в функцию готовности jQuery.

person Uday Sawant    schedule 18.01.2012