Frage

ich habe ein Problem versucht, eine JavaScript-Datei mit Zend mit headScript()->appendFile('file name') anhängen. Ich habe meine Layout-Setup wie folgt aus:

    <?= $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, eine zusätzliche js Datei nur für diese Seite anhängen, wie:

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

Diese Datei ist auf angehängt werden, was im Layout ist bereits eingerichtet. Allerdings wird diese Datei hinzugefügt vor die anderen ‚AppendFile‘ Dateien. Ich habe auch versucht,

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

Aber dies noch fügt die Datei, bevor die anderen Dateien. Dies ist nicht, wie ich diese an der Arbeit erwarten würde, vor allem, wenn die offsetSetFile Methode. Wie kann ich diese Datei hinzufügen nach die anderen Dateien? Danke.

War es hilfreich?

Lösung

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

Andere Tipps

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

Wenn Sie AppendFile oder appendScript tun ist, wird der nächste verfügbare Index. So

$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 zu beachten, dass der Controller-Code zuerst vor der Ansicht / Layout-Code ausgeführt werden sollen. So in Ihrem Fall sind Ihre Appends tatsächlich die IDs unter Verwendung von 1000 und 1001. Eine schnelle Lösung ist dies nur explizit offsetSetFile für alle Ihre Appends zu verwenden. So Ihr Code in Ihrem Layout aussehen würde:

<?= 
   $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 das hilft

Ich habe bemerkt, dass, wenn ich ‚prepend‘ alle Dateien im Layout, kann ich dann AppendFile in meinem Controller verwenden, und es wird nach ihnen erscheinen. Leider dann habe ich alle meine JS-Dateien in umgekehrter Reihenfolge in der Layout-Liste (da sie sich selbst vorangestellt). Ich würde wirklich gern Dinge in Ordnung zu halten und nur in der Lage sein, meine Layout-Stack anzuhängen.

Wenn in der Layout-Datei Voranstellen nicht gut genug ist, können Sie entweder die Dateien in der Bootstrap enthalten, wenn Sie die Ansicht einrichten, oder Sie können einen Controller-Plugin einrichten, wenn Sie voranstellen müssen auf das, was 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');
        }
    }
}

Eigentlich brauchen Sie nicht die baseUrl ‚bekommen Ursache ZF bereits erledigt das für Sie. Sie müssen nur die Aufmerksamkeit auf Ihren Weg zu zahlen. Sie nicht den ersten Schrägstrich verwenden! sonst wird ZF die Remote-Adresse zurück.

Just Verwendung '$this->_view->headLink()->appendStylesheet('css/main.css'); '

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

der letzte Kommentar gibt eine ausgezeichnete Lösung, umfassen zuerst im Layout oben, drucken Sie dann, wenn Sie es brauchen, auf diese Weise wird es

arbeiten
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top