Question

Je vais avoir un problème en essayant d'ajouter un fichier javascript à l'aide headScript()->appendFile('file name') avec Zend. J'ai ma configuration de mise en page comme ceci:

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

?>

Alors, dans mon contrôleur, je suis en train d'ajouter un fichier js supplémentaire uniquement pour cette page, comme:

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

Ce fichier doit être annexée à ce qui est déjà configuré dans la mise en page. Cependant, ce fichier est ajouté avant les autres fichiers 'appendfile'. J'ai aussi essayé

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

Mais cela ajoute encore le fichier avant que les autres fichiers. Ce n'est pas comment j'attendre que cela fonctionne, en particulier lors de l'utilisation de la méthode offsetSetFile. Comment puis-je ajouter ce fichier après les autres fichiers? Merci.

Était-ce utile?

La solution

La réponse est d'utiliser headScript()->prependFile dans layout.phtml et headScript()->appendFile en vue.

Autres conseils

Je sais qu'il est une réponse tardive mais!

Si vous appendFile ou appendScript est utilise l'index disponible suivant. Ainsi,

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

est équivalent à

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

En outre, il est essentiel de noter que le code de commande s'exécuté en premier avant le code vue / mise en page. Ainsi, dans votre cas utilisent votre fait ajouter ses 1000 de l'identifiant et 1001. Une solution rapide à cette question est tout simplement d'utiliser explicitement offsetSetFile pour tous vos ajouter ses. Ainsi, votre code dans votre mise en page ressemblerait à ceci:

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

J'espère que cela aide son avenir googler

Je l'ai remarqué que si je PREPEND "tous les fichiers de la mise en page, je peux alors utiliser appendFile dans mon contrôleur et il apparaîtra après eux. Malheureusement, je dois énumérer tous mes fichiers JS dans l'ordre inverse de la mise en page (car ils PREPEND à eux-mêmes). Je voudrais vraiment garder les choses en ordre et simplement être en mesure d'ajouter à ma pile de mise en page.

Si préfixer dans le fichier de mise en page est pas assez bon, vous pouvez inclure les fichiers dans votre bootstrap lorsque vous configurez votre point de vue ou vous pouvez configurer un plugin contrôleur si vous devez PREPEND en fonction de ce module est en cours de chargement.

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

En fait, vous n'avez pas besoin obtenir le baseUrl parce que ZF elle le fait déjà pour vous. Il suffit de prêter attention à votre chemin. Ne pas utiliser la première barre oblique! sinon ZF retournera l'adresse distante.

Il suffit d'utiliser '$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

le dernier commentaire donne une excellente solution, d'abord inclure dans la mise en page en haut, puis imprimez lorsque vous en avez besoin, de cette façon, il fonctionne

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top