Domanda

Sto avendo un problema cercando di aggiungere un file JavaScript utilizzando headScript()->appendFile('file name') con Zend. Io ho la mia messa a punto di layout in questo modo:

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

?>

Poi, nel mio controller Sto cercando di aggiungere un file js aggiuntivo solo per questa pagina, come:

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

Questo file deve essere aggiunto a ciò che è già configurato nel layout. Tuttavia, questo file viene aggiunto prima gli altri file 'appendFile'. Ho anche provato

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

Ma questo aggiunge ancora il file prima che gli altri file. Questo non è come mi aspetterei questo lavoro, soprattutto quando si utilizza il metodo offsetSetFile. Come posso aggiungere questo file dopo gli altri file? Grazie.

È stato utile?

Soluzione

La risposta è quella di utilizzare headScript()->prependFile in layout.phtml e headScript()->appendFile in una vista.

Altri suggerimenti

Lo so che è una risposta in ritardo, ma!

Se fai appendFile o appendScript è utilizza il successivo indice disponibile. Così

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

è equivalente a

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

Inoltre è fondamentale da notare che il codice di controllo vengono eseguiti prima il codice della vista / layout. Così, nel tuo caso il tuo accodamento sono in realtà utilizzando l'ID del 1000, e 1001. Una soluzione rapida a questo è solo utilizzare in modo esplicito offsetSetFile per tutte le vostre accodamento. Quindi, il codice nel layout sarà simile:

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

Spero che questo aiuta il futuro di Googler

Ho notato che se 'anteporre' tutti i file nel layout, posso quindi utilizzare appendFile nel mio controller e apparirà dopo di loro. Purtroppo, allora devo elencare tutti i miei file JS in ordine inverso nel layout (dal momento che antepongono a se stessi). Mi piacerebbe davvero mantenere le cose in ordine e solo essere in grado di aggiungere al mio stack layout.

Se anteponendo nel file di layout non è abbastanza buono, è possibile includere i file del bootstrap quando si imposta la visualizzazione o si potrebbe installare un plugin di controllo se è necessario anteporre in base a quale modulo viene caricato.

// 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');
        }
    }
}

In realtà, non è necessario ottenere la causa baseurl' ZF già fa per voi. Basta prestare attenzione al tuo percorso. Non usare la prima barra! altrimenti ZF restituirà l'indirizzo remoto.

Basta usare '$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

l'ultimo commento dà una soluzione eccellente, in primo luogo inserire nel layout in alto, quindi stampare quando ne avete bisogno, in questo modo funzionerà

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top