Como alterar as meta tags no layout do framework zend

Então eu tenho algumas meta tags padrão no layout.phtml definido usando

$this->headTitle() and $this->headMeta()->appendName() 

e é ecoado no header do layout.phtml

Minha pergunta é: como eu altero essas meta tags padrão do arquivo de exibição, de modo que sejam substituídas?

Eu tentei usar:

 $this->headMeta()->appendName() or setName() 

Em vez de replace as meta-tags padrão antigas, ele criaria uma meta-tag totalmente nova. Como posso substituí-los?

    Eu recomendaria configurar uma variável de exibição para as palavras-chave. Por exemplo, no seu bootstrap.php você pode definir as palavras-chave padrão da seguinte maneira:

     protected function _initSetDefaultKeywords() { $view = $this->bootstrap('view')->getResource('view'); $view->keywords = 'default keywords'; } 

    Em layout.phtml você teria então:

     < ?php echo $this->headMeta()->appendName('keywords', $this->keywords); ?> 

    Finalmente, em suas visualizações (ou ações), você pode alterar as palavras-chave meta simplesmente mudando a variável de exibição de palavras-chave:

     // in an action $this->view->keywords = 'new kewords'; //or in a view < ?php $this->keywords = 'new kewords'; ?> 

    Eu apenas testei isso, e setName() deveria funcionar :

     < ?php $this->headMeta()->setName('keywords', 'test'); ?> < ?php $this->headMeta()->setName('keywords', 'test'); ?> 

    Resulta em:

      

    Enquanto:

     < ?php $this->headMeta()->setName('keywords', 'test'); ?> < ?php $this->headMeta()->appendName('keywords', 'another test'); ?> 

    Resulta em:

       

    palavras-chave e descrição gerando sem controlador / ação

    registre 2 plugins no bootstrap

         // registrar navegação, $ view-> navigation () -> setContainer (novo Zend_Navigation ($ navigationArray));
         $ controller = Zend_Controller_Front :: getInstance ();
         $ controller-> registerPlugin (novo App_Controller_Plugin_PrepareNavigation ());
    
         $ controller-> registerPlugin (novo App_Controller_Plugin_SetMeta ());
    

    O plugin do Meta pode ser parecido com:

         Funcionamento público routeShutdown (Zend_Controller_Request_Abstract $ request)
         {
             $ view = Zend_Controller_Action_HelperBroker :: getExistingHelper ('ViewRenderer') -> view;
             $ activePage = $ view-> navigation () -> findOneBy ('ativo', verdadeiro);
    
             $ view-> headTitle ($ activePage-> title);
             $ view-> headMeta () -> appendName ('keywords', $ activePage-> keywords);
             $ view-> headMeta () -> appendName ('description', $ activePage-> descrição);
             $ view-> pageHeader = $ activePage-> pageHeader;
         }
    

    navigationArray seria o seguinte:

               'páginas' => matriz (
                 array ('label' => 'introduction',
                        'controlador' => 'controlador',
                        'ação' => 'introdução',
                        'route' => 'controladoraction',
                        'pageHeader' => 'h1 ou algo',
                        'title' => 'usado como meta título'
                        'palavras-chave' => 'meta keywords'
                        'descrição' => 'meta desc',
    

    do que você pode simplesmente chamar (a partir do layout / visualização) imprimir $ this-> pageHeader;

    E se:

     $keywords = 'php,zend,framework'; $this->view->headMeta($keywords,'keywords','name',array(),'SET'); 

    Encontrei isso, que funciona para mim, na melhor prática para colocar meta tags, links e estilos no zend framework?

    Aqui está o que funcionou para mim. No arquivo de layout, você deve ter certeza de que as meta tags são repetidas. Está vazio no palco, mas você marcará onde as meta tags serão enviadas. Esta única desvantagem com este método seria que não parece haver uma maneira de ter uma meta-tag padrão, então você terá que adicionar a meta-tag em cada arquivo de exibição.

    No arquivo de layout

     < ?php echo $this->headMeta(); ?> 

    No arquivo .phtml de exibição

     $this->headMeta("test description text", "description");