Précédent   Forum des professionnels en informatique > PHP > Outils > Zend > Zend Framework > MVC
MVC Forum de support sur le développement d'applications de type modèle-vue-contrôleur avec Zend Framework ainsi que vos questions sur les plugins, les helpers etc. Avant de poster -> Cours MVC, FAQ ZF Controller
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/01/2011, 19h54   #1
Membre du Club
 
Inscription : septembre 2010
Messages : 71
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 71
Points : 66
Points : 66
Par défaut Zend_View_Helper_HeadMeta et nouvelle balise META

Bonjour à tous,

Je suis confronté à un problème plutôt fâcheux pour lequel je ne trouve aucune solution.
Je compte sur vous

Je souhaite ajouter de nouvelles META à certaines de mes pages.
Exemple :
Code :
<meta property="og:title" content="The Rock"/>
Et tout le problème est là, impossible de créer une META "property"...
J'ai tenté d'étendre Zend_View_Helper_HeadMeta en vain.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<?php
 
class monProjet_View_Helper_HeadMeta extends Zend_View_Helper_HeadMeta
{
    protected $_typeKeys     = array('name', 'http-equiv', 'charset', 'property');
 
    public function __call($method, $args)
    {
        if (preg_match('/^(?P<action>set|(pre|ap)pend|offsetSet)(?P<type>Name|HttpEquiv|Property)$/', $method, $matches)) {
            $action = $matches['action'];
            $type   = $this->_normalizeType($matches['type']);
            $argc   = count($args);
            $index  = null;
 
            if ('offsetSet' == $action) {
                if (0 < $argc) {
                    $index = array_shift($args);
                    --$argc;
                }
            }
 
            if (2 > $argc) {
                require_once 'Zend/View/Exception.php';
                $e = new Zend_View_Exception('Too few arguments provided; requires key value, and content');
                $e->setView($this->view);
                throw $e;
            }
 
            if (3 > $argc) {
                $args[] = array();
            }
 
            $item  = $this->createData($type, $args[0], $args[1], $args[2]);
 
            if ('offsetSet' == $action) {
                return $this->offsetSet($index, $item);
            }
 
            $this->$action($item);
            return $this;
        }
 
        return parent::__call($method, $args);
    }
 
    protected function _normalizeType($type)
    {
        switch ($type) {
            case 'Property':
                return 'property';
            default:
                return parent::_normalizeType($type);
        }
    }
 
}
Une petite piste s'il vous plaît?
J'espère vous lire très bientôt,

Omageus
Lenézé est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2011, 00h11   #2
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
simplement comme ca il veux bien

Code :
1
2
3
4
5
6
7
8
9
class Custom_Zend_View_Helper_HeadMeta extends Zend_View_Helper_HeadMeta
{
    protected $_typeKeys = array('name', 'http-equiv', 'charset', 'property');		
}
 
$meta = new Custom_Zend_View_Helper_HeadMeta();
$meta->headMeta('The Rock', 'og:title', 'property');
 
echo $meta->toString();
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2011, 00h53   #3
Membre du Club
 
Inscription : septembre 2010
Messages : 71
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 71
Points : 66
Points : 66
Merci de ta réponse,

Cela fait bien le rendu des META mais :
- Lance un warning
Citation:
Invalid type "property" provided for meta
- Inscrit les META dans le body

J'aimerai vraiment réussir à les intégrer au head
Dur d'être bloqué sur de si petites choses.

Une idée de ce que je peux faire?
Lenézé est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2011, 01h02   #4
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
comment tu fais au niveau de ton layout ?
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2011, 01h06   #5
Membre du Club
 
Inscription : septembre 2010
Messages : 71
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 71
Points : 66
Points : 66
Un simple
Code :
1
2
3
4
5
6
7
8
    <?php
 
    echo $this->headTitle();
    echo $this->headMeta();
    echo $this->headLink();
    echo $this->headScript();
 
    ?>
Je ne l'ai pas spécifié et c'était une erreur, mais la nouvelle META ne doit être que sur certaines pages et donc ajoutée par le controlleur à la vue.
Lenézé est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2011, 01h07   #6
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
Citation:
Envoyé par Lenézé Voir le message
Un simple
Code :
1
2
3
4
5
6
7
8
    <?php
 
    echo $this->headTitle();
    echo $this->headMeta();
    echo $this->headLink();
    echo $this->headScript();
 
    ?>
Je ne l'ai pas spécifié et c'était une erreur, mais la nouvelle META ne doit être que sur certaines pages et donc ajoutée par le controlleur à la vue.
justement montre ce que tu fais au niveau de ton controller
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2011, 01h15   #7
Membre du Club
 
Inscription : septembre 2010
Messages : 71
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 71
Points : 66
Points : 66
Le problème vient surement de là, je ne vois pas comment ajouter les META créées aux actuelles
Lenézé est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2011, 02h09   #8
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
il faut te creer un helper custom : http://devzone.zend.com/article/3412
ensuite dans ton controller (init ou action)
Code :
$this->$view->metaCustom()->appendPropery('...');
et dans ton layout
Code :
echo $this->metaCustom();
EDIT : sinon tu peux utilser le placeholder http://framework.zend.com/manual/en/...al.placeholder
mais bon...
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2011, 08h29   #9
Membre du Club
 
Inscription : septembre 2010
Messages : 71
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 71
Points : 66
Points : 66
Merci de ton aide, je débute

Je test ça ce soir si le temps me le permet.

Bonne journée!
Lenézé est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2011, 20h30   #10
Membre du Club
 
Inscription : septembre 2010
Messages : 71
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 71
Points : 66
Points : 66
Après de nombreux essais, c'est toujours l'échec

Il y a cependant du mieux, il ne manque plus grand chose je pense.

Mon helper :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
<?php
 
class Zend_View_Helper_MetaCustom extends Zend_View_Helper_HeadMeta
{
protected $_typeKeys     = array('name', 'http-equiv', 'charset', 'property');
 
    public function metaCustom($method, $args)
    {
        if (preg_match('/^(?P<action>set|(pre|ap)pend|offsetSet)(?P<type>Name|HttpEquiv|Property)$/', $method, $matches)) {
            $action = $matches['action'];
            $type   = $this->_normalizeType($matches['type']);
            $argc   = count($args);
            $index  = null;
 
            if ('offsetSet' == $action) {
                if (0 < $argc) {
                    $index = array_shift($args);
                    --$argc;
                }
            }
 
            if (2 > $argc) {
                require_once 'Zend/View/Exception.php';
                $e = new Zend_View_Exception('Too few arguments provided; requires key value, and content');
                throw $e;
            }
 
            if (3 > $argc) {
                $args[] = array();
            }
 
            $item  = $this->createData($type, $args[0], $args[1], $args[2]);
 
            if ('offsetSet' == $action) {
                return $this->offsetSet($index, $item);
            }
 
            $this->$action($item);
            return $this;
        }
 
        return parent::__call($method, $args);
    }
 
    protected function _normalizeType($type)
    {
        switch ($type) {
            case 'Property':
                return 'property';
            default:
                return parent::_normalizeType($type);
        }
    }
 
    public function setView(Zend_View_Interface $view)
    {
        $this->view = $view;
    }
}
Mon controlleur :
Code :
$this->view->metaCustom('appendProperty', array('name' => 'name test', 'content' => 'test content'));
Et l'affichage dans le layout est ok.

J'obtiens maintenant le message
Citation:
Fatal error: Uncaught exception 'Zend_View_Exception' with message 'Invalid value passed to append; please use appendMeta()
Il me semble pourtant que les arguments à fournir sont ceux que je passe.
Je fais fausse route?

Merci beaucoup de ton aide,

Omageus
Lenézé est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2011, 20h42   #11
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
il s'apelle MetaCustom pas AppendMeta

metaCustom()->mamethode
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2011, 20h49   #12
Membre du Club
 
Inscription : septembre 2010
Messages : 71
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 71
Points : 66
Points : 66
Bon Dieu, ça marche!

Il ne reste plus que
Citation:
Warning: Invalid type "property" provided for meta in D:\zend\monProjet\library\Zend\View\Helper\HeadMeta.php on line 339
Et tout est parfait.
J'ai tellement à apprendre, je ne suis pas prêt de maîtriser cet outil!

Merci beaucoup beaucoup beaucoup
Lenézé est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2011, 20h50   #13
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
Citation:
Envoyé par Lenézé Voir le message
Bon Dieu, ça marche!

Il ne reste plus que


Et tout est parfait.
J'ai tellement à apprendre, je ne suis pas prêt de maîtriser cet outil!

Merci beaucoup beaucoup beaucoup
c'est pareil t'as pas le bon helper t'as pris l'ancien la
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2011, 20h56   #14
Membre du Club
 
Inscription : septembre 2010
Messages : 71
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 71
Points : 66
Points : 66
Comment ça?

Mon controlleur actuel, celui qui fait lever l'erreur
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<?php
 
class Zend_View_Helper_MetaCustom extends Zend_View_Helper_HeadMeta
{
    protected $_typeKeys     = array('name', 'http-equiv', 'charset', 'property');
    public function metaCustom($content = null, $keyValue = null, $keyType = 'name', $modifiers = array(), $placement = Zend_View_Helper_Placeholder_Container_Abstract::APPEND)
    {
        return parent::headMeta($content = null, $keyValue = null, $keyType = 'name', $modifiers = array(), $placement = Zend_View_Helper_Placeholder_Container_Abstract::APPEND);
    }
 
    public function __call($method, $args)
    {
        if (preg_match('/^(?P<action>set|(pre|ap)pend|offsetSet)(?P<type>Name|HttpEquiv|Property)$/', $method, $matches)) {
            $action = $matches['action'];
            $type   = $this->_normalizeType($matches['type']);
            $argc   = count($args);
            $index  = null;
 
            if ('offsetSet' == $action) {
                if (0 < $argc) {
                    $index = array_shift($args);
                    --$argc;
                }
            }
 
            if (2 > $argc) {
                require_once 'Zend/View/Exception.php';
                $e = new Zend_View_Exception('Too few arguments provided; requires key value, and content');
                throw $e;
            }
 
            if (3 > $argc) {
                $args[] = array();
            }
 
            $item  = $this->createData($type, $args[0], $args[1], $args[2]);
 
            if ('offsetSet' == $action) {
                return $this->offsetSet($index, $item);
            }
 
            $this->$action($item);
            return $this;
        }
 
        return parent::__call($method, $args);
    }
 
    protected function _normalizeType($type)
    {
        switch ($type) {
            case 'Property':
                return 'property';
            default:
                return parent::_normalizeType($type);
        }
    }
 
    public function setView(Zend_View_Interface $view)
    {
        $this->view = $view;
    }
}
De quel ancien helper parles tu?
Si je supprime une ligne de celui-ci tout saute
Lenézé est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2011, 21h07   #15
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
Citation:
Envoyé par Lenézé Voir le message
Comment ça?

Mon controlleur actuel, celui qui fait lever l'erreur
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<?php
 
class Zend_View_Helper_MetaCustom extends Zend_View_Helper_HeadMeta
{
    protected $_typeKeys     = array('name', 'http-equiv', 'charset', 'property');
    public function metaCustom($content = null, $keyValue = null, $keyType = 'name', $modifiers = array(), $placement = Zend_View_Helper_Placeholder_Container_Abstract::APPEND)
    {
        return parent::headMeta($content = null, $keyValue = null, $keyType = 'name', $modifiers = array(), $placement = Zend_View_Helper_Placeholder_Container_Abstract::APPEND);
    }
 
    public function __call($method, $args)
    {
        if (preg_match('/^(?P<action>set|(pre|ap)pend|offsetSet)(?P<type>Name|HttpEquiv|Property)$/', $method, $matches)) {
            $action = $matches['action'];
            $type   = $this->_normalizeType($matches['type']);
            $argc   = count($args);
            $index  = null;
 
            if ('offsetSet' == $action) {
                if (0 < $argc) {
                    $index = array_shift($args);
                    --$argc;
                }
            }
 
            if (2 > $argc) {
                require_once 'Zend/View/Exception.php';
                $e = new Zend_View_Exception('Too few arguments provided; requires key value, and content');
                throw $e;
            }
 
            if (3 > $argc) {
                $args[] = array();
            }
 
            $item  = $this->createData($type, $args[0], $args[1], $args[2]);
 
            if ('offsetSet' == $action) {
                return $this->offsetSet($index, $item);
            }
 
            $this->$action($item);
            return $this;
        }
 
        return parent::__call($method, $args);
    }
 
    protected function _normalizeType($type)
    {
        switch ($type) {
            case 'Property':
                return 'property';
            default:
                return parent::_normalizeType($type);
        }
    }
 
    public function setView(Zend_View_Interface $view)
    {
        $this->view = $view;
    }
}
De quel ancien helper parles tu?
Si je supprime une ligne de celui-ci tout saute

HeadMeta.php
c'est pas
MetaCustom.php

le tien c'est MetaCustom
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2011, 21h46   #16
Membre du Club
 
Inscription : septembre 2010
Messages : 71
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 71
Points : 66
Points : 66
Mais je ne peux pas le renommer HeadMeta?

Si je fais cela son path devient
Code :
Zend_View_Helper_HeadMeta
et cela tente donc de re-déclarer la class.

Code :
1
2
3
4
5
6
7
class Zend_View_Helper_HeadMeta extends Zend_View_Helper_HeadMeta
{
    protected $_typeKeys     = array('name', 'http-equiv', 'charset', 'property');
    public function HeadMeta($content = null, $keyValue = null, $keyType = 'name', $modifiers = array(), $placement = Zend_View_Helper_Placeholder_Container_Abstract::APPEND)
    {
        return parent::headMeta($content = null, $keyValue = null, $keyType = 'name', $modifiers = array(), $placement = Zend_View_Helper_Placeholder_Container_Abstract::APPEND);
    }...
Mes helpers de base sont situés dans 'application/views/helpers/'.

Si je met le fichier dans mes helpers de vue custom et que j'appel donc
Code :
$this->view->HeadMeta()->appendProperty('...')
il charge uniquement le fichier headMeta de base

Code :
Uncaught exception 'Zend_View_Exception' with message 'Method "appendProperty" does not exist'
Lenézé est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h48.


 
 
 
 
Partenaires

Hébergement Web