2012-01-18 6 views
4

Google Mapライブラリが必要なパッケージがあります。そして私はこれをビューのように実装しました。RegisterPackageはRegisterScriptFileに依存します

<?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マップライブラリにはパラメータ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マップライブラリを作成する方法はありますか?または、少なくとも、somelibraryパッケージをGoogleマップの直後に配置する方法はありますか?

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

$位置整数のJavaScriptコードの位置...

答えて

3

CClientScriptのpackagesプロパティを設定することで、Googleマップスクリプトをパッケージ自体にすることができます。 次に、パッケージ構成に「depends」を設定することで、パッケージの依存関係に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(/*...*/)は動作します。

+0

Googleマップをパッケージとして作成する方法のサンプルコードを教えてください。 –

+0

が完了しました。そのコードを試していないが、 – cebe

+0

良いアイデアを動作させる必要があります。ありがとう! –

1

registerPackage()方法は、その位置を決定する任意のオプションを持っていないが、あなたは、このようなregisterScriptfile()の位置を決めることができます。有効な値は次のとおりです。 CClientScript :: POS_HEAD:タイトル要素の直前のheadセクションにスクリプトが挿入されます。 CClientScript :: POS_BEGIN:スクリプトは本体セクションの先頭に挿入されます。 CClientScript :: POS_END:スクリプトは本文セクションの最後に挿入されます。 CClientScript :: POS_LOAD:スクリプトはwindow.onload()関数に挿入されます。 CClientScript :: POS_READY:スクリプトはjQueryの準備関数に挿入されます。

関連する問題