2016-01-19 10 views
6

मेरे पास एक दृश्य है जिसमें मुझे अपने हेडर में JQuery को अन्य जेएस लाइब्रेरी के साथ कॉल करने की आवश्यकता है। अन्य सभी पृष्ठों के लिए उन्हें दस्तावेज़ के अंत में प्रस्तुत किया जा सकता है। Yii2 में इसे प्राप्त करने का सबसे अच्छा तरीका क्या है?सशर्त ऐपएसेट्स

वर्तमान में मैं सिर्फ अपनी AppAsset.php में यह कर रहा हूं

public $js = [ 
    'https://code.highcharts.com/highcharts.js', 
]; 
public $jsOptions = ['position' => \yii\web\View::POS_HEAD]; 

मैं एक new Asset बनाने पर ध्यान दिया है, लेकिन यह काम करने के लिए नहीं लगता था और मुझे यकीन है कि अगर यह सही तरीका था नहीं था इसके बारे में जाने के लिए। क्योंकि मैं प्रत्येक पृष्ठ में जेएस को पहले प्रस्तुत नहीं करना चाहता हूं।

<?php 

namespace app\assets; 

use yii\web\AssetBundle; 

class EarlyJavaScriptAsset extends AssetBundle 
{ 
public $js = [ 
'https://code.highcharts.com/highcharts.js', 
]; 
public $jsOptions = ['position' => \yii\web\View::POS_HEAD]; 

public $publishOptions = [ 
    'only' => [ 
     'report/report-1', // this is view folder location 
    ] 
]; 
} 

उत्तर

1

आप AssetBundle::register() पर विचार करेंगे, तो आप देखेंगे कि यह दूसरा पैरामीटर के बिना View::registerAssetBundle() का उपयोग करता है देखना होगा। लेकिन वह दूसरा पैरामीटर आपको जिस चीज की आवश्यकता है वह है:

@param integer | सेट अगर शून्य $ स्थिति सेट है, तो यह जावास्क्रिप्ट फ़ाइलों के लिए न्यूनतम स्थिति को मजबूर करता है। यह निर्भर करता है कि संबंधित संपत्ति जावास्क्रिप्ट फ़ाइल स्थिति समायोजित करेगी या आवश्यकता को पूरा नहीं किया जा सकता है। यदि यह शून्य है, तो संपत्ति बंडल स्थिति सेटिंग्स परिवर्तित नहीं की जाएगी। जावास्क्रिप्ट स्थिति पर अधिक जानकारी के लिए रजिस्टर जेएसफ़ाइल देखें।

आपके विचार, जहाँ आप अपने संपत्ति बंडल रजिस्टर में, बदल

EarlyJavaScriptAsset::register($this); 

$this->registerAssetBundle(EarlyJavaScriptAsset::className(), $this::POS_HEAD); 

और दूसरे दृश्य में

$this->registerAssetBundle(EarlyJavaScriptAsset::className(), $this::POS_END); 

को

पीएस: बेशक $this आपके View का संदर्भ है।

+0

एक अद्भुत उत्तर - धन्यवाद – Jonnny