2010-03-12 10 views
11

Ich habe ein Problem beim Versuch, eine JavaScript-Datei mit headScript()->appendFile('file name') mit Zend anhängen. Ich habe meine Layout-Setup wie folgt aus:Zend headScript() und appendFile funktioniert nicht wie erwartet

<?= $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')); 

?> 

Dann in meinem Controller Ich versuche, nur eine zusätzliche js-Datei für diese Seite anhängen, wie:

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

Diese Datei angefügt werden muss, um Was ist bereits im Layout eingerichtet? Diese Datei wird jedoch vor die anderen 'appendFile' Dateien hinzugefügt. Ich habe auch versucht

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

Aber das fügt noch die Datei vor den anderen Dateien. Dies ist nicht, wie ich dies erwarten würde, insbesondere bei der Verwendung der OffsetSetFile-Methode. Wie kann ich diese Datei nach die anderen Dateien hinzufügen? Vielen Dank.

Antwort

21

Die Antwort ist headScript()->prependFile in layout.phtml und headScript()->appendFile in einer Ansicht zu verwenden.

+0

Aber nicht von Controllern möglich hilft?(anstatt Code in die View-Datei zu schreiben?). – YumYumYum

+1

in der Ansicht? Nein ... – JamesHalsall

1

Ich habe festgestellt, dass, wenn ich alle Dateien im Layout "vor", ich appendFile in meinem Controller verwenden kann und es nach ihnen erscheint. Leider muss ich dann alle meine JS-Dateien im Layout in umgekehrter Reihenfolge auflisten (da sie sich selbst vorziehen). Ich möchte die Dinge wirklich in Ordnung halten und einfach an meinen Layoutstapel anhängen können.

0

Wenn das Voranstellen in der Layoutdatei nicht gut genug ist, können Sie die Dateien beim Einrichten der Ansicht entweder in Ihr Bootstrap einbinden oder Sie können ein Controller-Plugin einrichten, wenn Sie voraussetzen, welches Modul geladen wird .

// 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

Eigentlich brauchen Sie nicht die Ursache‘baseUrl bekommen ZF bereits erledigt das für Sie. Sie müssen nur auf Ihren Weg achten. Verwenden Sie nicht den ersten Schrägstrich! Andernfalls gibt ZF die entfernte Adresse zurück.

Verwenden Sie einfach '$this->_view->headLink()->appendStylesheet('css/main.css'); '

2

arbeiten ich weiß, es ist eine späte Antwort, aber!

Wenn Sie appendFile oder appendScript hinzufügen, wird der nächste verfügbare Index verwendet. So ist

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

entspricht

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

Auch ist es von entscheidender Bedeutung, dass der Controller-Code zuerst vor der Ansicht/Layout-Code erhalten ausgeführt zu beachten. In Ihrem Fall verwenden Ihre Anhänge also die IDs 1000 und 1001. Eine schnelle Lösung besteht darin, offsetSetFile explizit für alle Ihre Anhänge zu verwenden. So Ihr Code in Ihrem Layout würde wie folgt aussehen:

<?= 
    $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')); 
?> 

Ich hoffe, dass diese Zukunft googler des

+0

Ich habe das versucht, aber es konnte nicht funktionieren. Können Sie genauer erklären, was Sie im Layout und in der Ansicht platzieren und wie die Sortierreihenfolge aussieht? –

Verwandte Themen