2010-03-12 26 views
11

मुझे ज़ेंड के साथ headScript()->appendFile('file name') का उपयोग करके जावास्क्रिप्ट फ़ाइल जोड़ने की कोशिश करने में कोई समस्या है।ज़ेंड हेडस्क्रिप्ट() और एपेंडफाइल अपेक्षित काम नहीं कर रहा है

<?= $this->headScript() 
    ->prependScript('BASE_URL = "' . $this->baseUrl() . '";') 
    ->appendFile($this->baseUrl('js/lib/jquery/jquery-1.4.2.min.js')) 
    ->appendFile($this->baseUrl('js/admin.js')); 

?> 

फिर, मेरी नियंत्रक में मैं केवल इस पृष्ठ के लिए एक अतिरिक्त js फ़ाइल संलग्न करने के लिए कोशिश कर रहा हूँ, जैसे:

$this->view->headScript()->appendFile('another/js/file.js'); 

इस फ़ाइल के साथ जोड़ दिया किए जाने की जरूरत है कि मैं इस तरह मेरे लेआउट सेटअप लेआउट में पहले से ही क्या सेटअप है। हालांकि, इस फ़ाइल को अन्य 'appendFile' फ़ाइलों से पहले जोड़ा जाता है। मैंने

$this->headScript()->offsetSetFile(999, '/js/myfuncs.js'); 

लेकिन यह अभी भी अन्य फ़ाइलों से पहले फ़ाइल को जोड़ता है। ऐसा नहीं है कि मैं इसे काम करने की अपेक्षा कैसे करूंगा, खासतौर पर ऑफसेटसेट फ़ाइल का उपयोग करते समय। अन्य फ़ाइलों के बाद मैं इस फ़ाइल को कैसे जोड़ सकता हूं? धन्यवाद।

उत्तर

21

जवाब एक दृश्य में layout.phtml में headScript()->prependFile और headScript()->appendFile उपयोग करने के लिए है।

+0

लेकिन नहीं से नियंत्रकों संभव मदद करता है?(दृश्य फ़ाइल में कोड डालने के बजाय?)। दृश्य में – YumYumYum

+1

? नहीं ... – JamesHalsall

1

मैंने देखा है कि यदि मैं लेआउट में सभी फाइलों को 'प्रीपेन्ड' करता हूं, तो मैं अपने नियंत्रक में एपेंडफाइल का उपयोग कर सकता हूं और यह उनके बाद दिखाई देगा। दुर्भाग्य से, मुझे लेआउट में सभी मेरी जेएस फ़ाइलों को रिवर्स ऑर्डर में सूचीबद्ध करना होगा (क्योंकि वे स्वयं को प्रीपेड करते हैं)। मैं वास्तव में चीजों को व्यवस्थित रखना चाहता हूं और बस अपने लेआउट स्टैक में शामिल होने में सक्षम हूं।

0

यदि लेआउट फ़ाइल में प्रीपेडिंग पर्याप्त नहीं है, तो आप अपने बूटस्ट्रैप में फ़ाइलों को शामिल कर सकते हैं जब आप अपना दृश्य सेट अप करते हैं या आप एक नियंत्रक प्लगइन सेट अप कर सकते हैं यदि आपको मॉड्यूल लोड होने के आधार पर प्रीपेड करने की आवश्यकता है ।

// in your bootstrap 
protected function _initHeadScript() 
{ 
    $this->bootstrap('view'); 
    $view = $this->getResource('view'); 

    $view->headScript()->appendFile('another/js/file.js'); 
} 

// as a plugin 
class My_Plugin_HeadScriptPlugin extends Zend_Controller_Plugin_Abstract 
{ 
    public function routeStartup(Zend_Controller_Request_Abstract $request) 
    { 
     $view = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer')->view; 

     if($request->getModuleName() == 'foo') 
     { 
      $view->headScript()->appendFile('another/js/file.js'); 
     } 
    } 
} 
0

दरअसल, आपको बेसयूआरएल कारण प्राप्त करने की आवश्यकता नहीं है क्योंकि जेएफ पहले से ही आपके लिए यह करता है। आपको बस अपने रास्ते पर ध्यान देना होगा। पहले स्लैश का उपयोग न करें! अन्यथा जेडएफ रिमोट एड्रेस वापस कर देगा।

बस '$this->_view->headLink()->appendStylesheet('css/main.css'); का उपयोग '

0

http://zendframework.com/issues/browse/ZF-3282?focusedCommentId=23552&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-23552

अंतिम टिप्पणी एक उत्कृष्ट समाधान देता है, पहले, शीर्ष पर लेआउट में शामिल हैं तो इस तरह से प्रिंट और जब आवश्यकता होती है, यह

2

काम करेंगे मैं जानता हूँ कि यह एक देर से जवाब है, लेकिन!

यदि आप संलग्न करते हैं तो संलग्न या एपेंडस्क्रिप्ट अगले उपलब्ध इंडेक्स का उपयोग करता है। इस प्रकार

$this->headScript()->offsetSetFile(50, 'file'); 
$this->headScript()->appendFile('file2'); 

यह भी ध्यान रखें कि नियंत्रक कोड देखें/लेआउट कोड से पहले पहले निष्पादित हो कुंजी है

$this->headScript()->offsetSetFile(50, 'file'); 
$this->headScript()->offsetSetFile(51, 'file2'); 

के बराबर है। इस प्रकार आपके मामले में आपके परिशिष्ट वास्तव में आईडी के 1000 और 1001 का उपयोग कर रहे हैं। इसके लिए एक त्वरित समाधान केवल आपके सभी परिशिष्टों के लिए ऑफ़सेटसेट फ़ाइल का उपयोग करना है। तो अपने लेआउट में अपने कोड दिखाई देगा:

<?= 
    $this->headScript() 
     ->prependScript('BASE_URL = "' . $this->baseUrl() . '";') 
     ->offsetSetFile(500, $this->baseUrl('js/lib/jquery/jquery-1.4.2.min.js')) 
     ->offsetSetFile(501, $this->baseUrl('js/admin.js')); 
?> 

मुझे आशा है कि यह भविष्य Googler का

+0

मैंने कोशिश की, लेकिन यह काम नहीं कर सका। क्या आप लेआउट और व्यू में क्या स्थान रखते हैं और परिणामस्वरूप सॉर्ट ऑर्डर क्या है, इसके बारे में अधिक विस्तृत स्पष्टीकरण दे सकते हैं? –

संबंधित मुद्दे