Как изменить метатеги в макете Zend Framework - PullRequest
9 голосов
/ 18 марта 2011

Итак, у меня есть некоторые метатеги по умолчанию для layout.phtml, установленные с помощью

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

, и отображаются в заголовке layout.phtml

Мой вопрос: как мне изменить эти мета по умолчаниютеги из файла представления, чтобы они заменялись?

Я попытался использовать:

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

Вместо замены старых метатегов по умолчанию, это создаст совершенно новый метатег.Как я могу заменить их?

Ответы [ 5 ]

14 голосов
/ 18 марта 2011

Я только что проверил это, и setName() должно работать :

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

Результат:

<meta name="keywords" content="another test" >  

В то время как:

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

Результаты:

<meta name="keywords" content="test" > 
<meta name="keywords" content="another test" > 
11 голосов
/ 18 марта 2011

Я бы рекомендовал установить переменную просмотра для ключевых слов. Например, в вашем bootstrap.php вы можете определить ключевые слова по умолчанию следующим образом:

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

В layout.phtml вы получите:

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

Наконец, в ваших представлениях (или действиях) вы можете изменить мета ключевые слова, просто изменив переменную представления ключевых слов:

// in an action
$this->view->keywords = 'new kewords';
//or in a view
<?php $this->keywords = 'new kewords'; ?>
3 голосов
/ 07 марта 2014

Вот что сработало для меня.В файле макета вы должны убедиться, что метатеги отражены.На этапе он пуст, но вы будете отмечать, где будут выводиться метатеги.Единственный недостаток этого метода заключается в том, что мета-тег по умолчанию, похоже, не существует, поэтому вам придется добавлять метатег в каждый файл представления.файл

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

В виде .phtml файла

$this->headMeta("test description text", "description");
1 голос
/ 30 января 2012

Как насчет:

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

Я нашел это, что работает для меня, на Наилучшая практика для размещения мета-тегов, ссылок и стилей в Zend Framework?

1 голос
/ 20 апреля 2011

генерация ключевых слов и описания без контроллера / действия

зарегистрируйте 2 плагина в начальной загрузке

    // register navigation, $view->navigation()->setContainer( new Zend_Navigation( $navigationArray ) );
    $controller = Zend_Controller_Front::getInstance();
    $controller->registerPlugin(new App_Controller_Plugin_PrepareNavigation());

    $controller->registerPlugin(new App_Controller_Plugin_SetMeta());

Мета плагин может выглядеть так:

    public function routeShutdown(Zend_Controller_Request_Abstract $request)
    {
        $view = Zend_Controller_Action_HelperBroker::getExistingHelper('ViewRenderer')->view;
        $activePage = $view->navigation()->findOneBy('active', true);

        $view->headTitle($activePage->title);
        $view->headMeta()->appendName('keywords', $activePage->keywords );
        $view->headMeta()->appendName('description', $activePage->description );
        $view->pageHeader = $activePage->pageHeader;
    }

навигационный массив будет чем:

          'pages' => array(
            array( 'label'  => 'introduction',
                   'controller' => 'controller',
                   'action' => 'introduction',
                   'route'  => 'controlleraction',
                   'pageHeader' => 'h1 or something',
                   'title' => 'used as meta title'
                   'keywords' => 'meta keywords'
                   'description' => 'meta desc',

чем вы можете просто позвонить (из макета / вида) print $ this-> pageHeader;

...