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

Но в изхода пакетът винаги се поставя над картите на 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&amp;language=id&amp;region=id"></script>

Има ли някакво решение да направите библиотеката на Google Maps като зависимост от пакета? Или поне как да поставите пакета somelibrary веднага след (не много по-долу) картите на Google?


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


Отговори (2)


Можете да направите самия скрипт на картата на Google пакет, като конфигурирате пакетите свойство на CClientScript. След това можете да добавите googlemap към вашите зависимости на пакетите, като конфигурирате 'depends' в конфигурацията на пакета. След това трябва да добавите скриптовете в правилния ред.

За да добавите пакет, можете да направите следното (не съм го пробвал, но трябва да работи):

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 цяло число позицията на JavaScript кода. Валидните стойности включват следното: CClientScript::POS_HEAD : скриптът се вмъква в секцията head точно преди заглавния елемент. CClientScript::POS_BEGIN : скриптът се вмъква в началото на основната част. CClientScript::POS_END : скриптът се вмъква в края на основния раздел. CClientScript::POS_LOAD : скриптът се вмъква във функцията window.onload(). CClientScript::POS_READY : скриптът се вмъква във функцията за готовност на jQuery.

person Uday Sawant    schedule 18.01.2012