Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 15-01-2015 10:42:06

flobrflo
Membre
Lieu: Marseille
Date d'inscription: 26-04-2013
Messages: 376

[Résolu] Fichier css js en <head> zf2.2.*

Hello tout le monde ^^

Bon je viens poser une question un peu bateau mais mine de rien je n'arrive pas à trouver...

Je voudrais rajouter mes fichier css et js dans la balise head (comme les fichier jquery bootstrap de base)

J'ai bien remarqué le headLink, mais je ne peu pas passer par la car sinon ça me ré-affiche tous mes fichiers avec en supplément ceux que je veux utiliser moi.
Du coup vu que je passe par des views helper et autres, je me retrouve vite avec 3 ou 4 occurrences de chacun de mes fichiers. C'est pas forcément bloquant mais je trouve ça pas très propre. (^^)

Donc du coup je me demandais s'il n'y avait pas une méthode existante pour remonter le lien du fichier en haut de la page html.

Voilou voilou,
merci d'avance ^^

Dernière modification par flobrflo (16-01-2015 16:09:08)

Hors ligne

 

#2 15-01-2015 14:15:16

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1253

Re: [Résolu] Fichier css js en <head> zf2.2.*

Salut, j'ai pas trop compris ton soucis en fait. Pour tes fichiers css globaux tu les mets dans ton layout, même chose pour le js et ce qui est propre à tes vues tu les met dedans smile.

Hors ligne

 

#3 15-01-2015 18:14:55

flobrflo
Membre
Lieu: Marseille
Date d'inscription: 26-04-2013
Messages: 376

Re: [Résolu] Fichier css js en <head> zf2.2.*

mmmhh... ben en fait je voudrais tout mettre en début de page html.
Un peu comme le inlineScript qui prend du js n'importe où et le mets à la fin du html.

Le but est  d'avoir un seul endroit avec mes fichiers css enfait. et pas une inclusion à chacun de mes blocs de vues ^^

Hors ligne

 

#4 16-01-2015 09:25:19

JGreco
Modérateur
Date d'inscription: 22-12-2012
Messages: 421

Re: [Résolu] Fichier css js en <head> zf2.2.*

Salut,

Je pense qu'en fait il faudrait que tu te tourne vers une solution comme celle là :

http://ocramius.github.io/blog/asset-ma … amework-2/

et plus d'infos ici au cas ou  :

http://stackoverflow.com/questions/1332 … zf2-module

Dernière modification par JGreco (16-01-2015 09:28:03)


ZF2 et doctrine addict
profil stack overflow : http://stackoverflow.com/users/3333246/ … ab=profile

Hors ligne

 

#5 16-01-2015 10:24:02

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1253

Re: [Résolu] Fichier css js en <head> zf2.2.*

Je vois toujours pas où est le problème en fait hmm. Normalement le JS global de ton application tu le met dans ton layout comme c'est fait dans le ZendSkeletonApplication.

Tu as ça :

Code:

[lang=php]
<?php echo $this->headLink(array('rel' => 'shortcut icon', 'type' => 'image/vnd.microsoft.icon', 'href' => $this->basePath() . '/img/favicon.ico'))
                        ->prependStylesheet($this->basePath() . '/css/style.css')
                        ->prependStylesheet($this->basePath() . '/css/bootstrap-theme.min.css')
                        ->prependStylesheet($this->basePath() . '/css/bootstrap.min.css') ?>

Là tu mets tout ceux qui sont communs pour toute ton application et après au cas par cas tu ajoutes dans tes vues. Ensuite si tu as des vues qui incluent d'autres vue c'est à toi de passer des paramètres pour gérer l'inclusion ou non du css si nécessaire.

Hors ligne

 

#6 16-01-2015 11:23:30

flobrflo
Membre
Lieu: Marseille
Date d'inscription: 26-04-2013
Messages: 376

Re: [Résolu] Fichier css js en <head> zf2.2.*

Alors déjà merci à tous les deux ^^

Pour css dans les modules j'avais bien vu le onBootstrap, mais le problème se pose toujours pour mes viewHelper.
Sinon j'ai pas très très bien compris le assetManager, il permet de définir un chemin commun à tous les fichiers, c'est ça? ^^

Alors en fait ce que je voudrais c'est avoir tous mes fichiers css dans le head du html. Les fichiers globaux mais aussi les "particuliers".

Ca se traduirait par inclure effectivement tout ce qui est général dans le layout mais aussi avoir une solution pour déclarer un fichier dans ma vue et la faire remonter dans le head.
La seule solution que j'ai trouvé moi pour l'instant c'est de remplacer le layout comme ceci :

Code:

[lang=php] <head>
        <meta etc...>
    </head>
    <body>
        <?= $this->displayHeader(); ?>
        <div class="container">
            <div id="container">
                <?php echo $this->content; ?>
            </div>
            <?= $this->displayFooter(); ?>
        </div> <!-- /container -->

        <?php echo $this->inlineScript() ?>
    </body>

par :

Code:

[lang=php]<?php 
$header = $this->displayHeader();
$content = $this->content; 
$footer = $this->displayFooter(); 
?>
 <head>
        <meta etc...>
    </head>
    <body>
        <?= $header; ?>
        <div class="container">
            <div id="container">
                <?= $content?>
            </div>
            <?=  $footer; ?>
        </div> <!-- /container -->

        <?php echo $this->inlineScript() ?>
    </body>

ce qui permet dans mes viewHelper d'utiliser headLink :

Code:

[lang=php]$this->view->headLink()->prependStylesheet($this->view->basePath('css/header.css'));

comme ceci lorsque le headLink est appelé dans le layout, il à pu récupérer mes fichiers css contenus dans mes views et tout se retrouve dans la balise head.

Mais ça fait restructurer le layout est passer par 3 variables... bon c'est pas la mort mais j'aurais espéré quelque chose de plus propre ^^

Hors ligne

 

#7 16-01-2015 12:15:09

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1253

Re: [Résolu] Fichier css js en <head> zf2.2.*

Eu je sais pas comment tu te débrouilles comme il faut ? Parce que je viens de faire le test en retirant un de mes fichier css de mon layout pour le mettre dans une vue et il apparait bien dans le head. Tu m'as mit le doute mais les plugin headLink et headScript sont justement fait pour ça.

Donc en faisant ça :

Code:

[lang=php]
<?php echo $this->headLink()
    ->prependStylesheet($this->basePath('/css/style.css')); // ou appendStylesheet suivant ton besoin ?>

ça fonctionne très bien.

Tu as aussi inlineScript qui lui est fait pour mettre le js à la fin de ton body.

Hors ligne

 

#8 16-01-2015 12:21:55

flobrflo
Membre
Lieu: Marseille
Date d'inscription: 26-04-2013
Messages: 376

Re: [Résolu] Fichier css js en <head> zf2.2.*

mmmhhh... Alors y a un sushi chez moi.
Je suis dans un viewHelper : Header, je suis dans la fonction invoke du helper. si j'utilise :

Code:

[lang=php]
    public function __invoke( $params= array() )
    {
        //ajout du css au début de la page html
        echo $this->view->headLink()->prependStylesheet($this->view->basePath('css/header.css'));
      ....

Je me retrouve à ce moment la avec bootstrap, jquery, ... et header.css, sauf que du coup j'ai une duplication du boostrap.

EDIT :
Effectivement Orkin, lorsque je suis dans la vue d'un de mes contrôleur d'action le fichier se met correctement. C'est dans le cas plus haut du viewHelper que j'ai mon soucis.
Même si on peu supposer qu'un fichier tels que le header pourrait très bien être dans le layout général, j'aimerai vraiment trouver pourquoi j'ai la duplication... xD

Dernière modification par flobrflo (16-01-2015 13:54:44)

Hors ligne

 

#9 16-01-2015 14:10:15

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1253

Re: [Résolu] Fichier css js en <head> zf2.2.*

Franchement je comprend pas ton problème chez moi ça fonctionne donc ... Sinon tu peux associer un template à ton aide de vue et faire cette action dans l'aide de vue.

Hors ligne

 

#10 16-01-2015 14:24:02

flobrflo
Membre
Lieu: Marseille
Date d'inscription: 26-04-2013
Messages: 376

Re: [Résolu] Fichier css js en <head> zf2.2.*

We c'est ce que je me disait...
Je vais faire comme ça je pense.

Tans pis merci qu'en même ^^

EDIT :

bon je suis passé par un render de mon aide de vue :

Code:

[lang=php]
//dans la fonction __invoke de l'aide de vue
return $this->getView()->render('way/to/header', array(
                            //params
                ));

et dans ma vue :

Code:

[lang=php]
<?php echo $this->headLink()->appendStylesheet($this->basePath('css/header.css'));?>

Pourtant le fichier ne se mets pas dans la balise <head>
et réimporte tous les fichiers css précédemment ajouté au headLink

j'ai donc une structure html comme ceci:
<head>
   <link css1>
   <link css2>
</head>
<body>
    <link css1>
    <link css2>
    <link css3>
    <nav ....
</body>

Je vois pas où j'ai pu faire une erreur de syntaxe...
ps : Merci pour le temps passés sur mon problème ^^

Dernière modification par flobrflo (16-01-2015 14:53:23)

Hors ligne

 

#11 16-01-2015 15:06:45

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1253

Re: [Résolu] Fichier css js en <head> zf2.2.*

Pour ton aide de vue tu peux faire :

Code:

[lang=php]
$viewModel = new ViewModel();
$viewModel->setTemplate('way/to/header');

return $viewModel;

Par contre c'est bizarre cette duplication. J'ai pas ça sur ma version et je suis en 2.3.2

Hors ligne

 

#12 16-01-2015 15:48:46

flobrflo
Membre
Lieu: Marseille
Date d'inscription: 26-04-2013
Messages: 376

Re: [Résolu] Fichier css js en <head> zf2.2.*

En fait j'ai mis à jour je suis en 2.3.*
Donc normalement je doit avoir le même coeur que toi...

Mais oui je confirme c'est bizarre...

De mon cotés l'aide de vue n'accepte pas le retour de viewModel il attend uniquement un string.

Code:

ViewModel could not be converted to string

Ce qui est normal en fait vu que je l'appel dans le layout (avec displayHeader(); )


EDIT :
D'ailleurs, dans une vue d'action controller, je peu utiliser le headlink comme ceci:

Code:

[lang=php]
<?php $this->headLink()->appendStylesheet($this->basePath('css/file.css')); ?>

alors que dans l'aide de vue si je ne mets pas le echo devant il n'est pas pris en compte. Mais quand je regarde le layout ça me parait logique :

Code:

[lang=php]
<body>
        <?= $this->displayHeader(); ?>
        <div class="container">
            <div id="container">
                <?php echo $this->content; ?>
            </div>
            <?= $this->displayFooter(); ?>
        </div> <!-- /container -->

        <?php echo $this->inlineScript() ?>
</body>

Cela montre bien que le content est "exécuté" avant l'affichage du headLink, alors que mes aides de vues n'arrivent qu'après, à l'appel de displayHeader et displayFooter.
Le problème viens de la à mon avis.

EDIT 2 :
Bon en fait Orkin c'est bien ça, le problème viens du fait que j'ai fait deux aides de vues particulières qui sont appelées dans le layout. Si je les appels dans ma vue d'action controller ça fonctionne.
L'erreur c'est d'avoir considéré mon header et footer comme aide de vues classiques alors que les css associés à ces deux blocs doivent être globaux.

Du coup problème résolu, je sort tout et je le mets dans le layout directement.

Merci beaucoup pour ton temps.

Dernière modification par flobrflo (16-01-2015 16:06:07)

Hors ligne

 

#13 16-01-2015 17:27:32

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1253

Re: [Résolu] Fichier css js en <head> zf2.2.*

Au temps pour moi

Code:

[lang=php]
return $this->getView()->render($view);

Sinon pour le reste je suis désolé mais je comprend rien à ce que tu dis.

flobrflo a écrit:

Si je les appels dans ma vue d'action controller ça fonctionne.

Enfin bref si c'est résolu c'est le principal.

Hors ligne

 

#14 16-01-2015 17:58:56

flobrflo
Membre
Lieu: Marseille
Date d'inscription: 26-04-2013
Messages: 376

Re: [Résolu] Fichier css js en <head> zf2.2.*

We c'était pas très clair.
si j'appel mes aide de vue dans une vue d'action :
page /acceuil, acceuilAction(), vue acceuil => fais l'appel à mon aide de vue. (la ça marche)

Si c'est mon layout.phtml qui appel mon aide de vue, les fichier css sont duppliqué

Hors ligne

 

#15 08-02-2015 21:12:39

Bouks
Membre
Lieu: Paris
Date d'inscription: 31-08-2012
Messages: 241

Re: [Résolu] Fichier css js en <head> zf2.2.*

Ton problème c'est que tu echo à chaque fois.

Tu append (ou prepend) tes fichiers où tu veux dans tes vues mais il ne faut faire l'echo qu'une seule fois.


22914720

Hors ligne

 

#16 11-02-2015 11:27:51

flobrflo
Membre
Lieu: Marseille
Date d'inscription: 26-04-2013
Messages: 376

Re: [Résolu] Fichier css js en <head> zf2.2.*

Oui justement,

comme mes viewHelpers étaient appelées après le premier echo dans le fichier layout.phtml principal ça m'a posé des problèmes.
La solution étant de mettre ces css "particuliers" correspondant au header/footer avec la première déclaration dans le template.

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages