如何在zend框架布局中更改元标记

时间:2011-03-18 08:03:38

标签: php zend-framework meta-tags zend-layout

所以我在layout.phtml上使用

设置了一些默认元标记
$this->headTitle() and $this->headMeta()->appendName()

并在layout.phtml的标题中回显

我的问题是:如何从视图文件中更改这些默认元标记,以便替换它们?

我尝试使用:

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

它不会替换旧的默认元标记,而是创建一个全新的元标记。我该如何更换它们?

5 个答案:

答案 0 :(得分:14)

我刚试过这个, 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" > 

答案 1 :(得分:11)

我建议为关键字设置一个视图变量。 例如,在 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'; ?>

答案 2 :(得分:3)

这对我有用。在布局文件中,您必须确保回显元标记。它在舞台上是空的,但您将标记元标记的输出位置。这种方法的唯一缺点是似乎没有办法使用默认元标记,因此您必须在每个视图文件中添加元标记。

在布局文件中

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

在视图.phtml文件中

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

答案 3 :(得分:1)

在没有控制器/操作的情况下生成关键字和描述

在bootstrap中注册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());

Meta插件可能看起来像:

    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;
    }

navigationArray将比:

          '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',

比你可以简单的调用(从布局/视图)打印$ this-&gt; pageHeader;

答案 4 :(得分:1)

怎么样:

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

我发现这对我有用Best practice to place meta tags, links and styles in zend framework?