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

9

我在layout.phtml中设置了一些默认的meta标签,使用的是

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

并且在layout.phtml的头部被回显。

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

我尝试使用:

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

不要替换旧的默认元标签,而是创建一个全新的元标签。如何替换它们?

5个回答

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" > 

似乎没有起作用...我的第一个setname是在布局中设置的,它应该是所有页面的默认元标记...另一个setname是在视图文件中设置的,但它没有覆盖前面的设置。 - kamikaze_pilot
@kamikaze飞行员,在您的布局中调用setName()时,请确保在实际echo之前执行。占位符概念不适用于布局:它从视图中起作用。 - Aron Rotteveel
是的,我尝试过了,但这样做后视图中的setname并没有替换布局中的那个...除了这种方法,是否有更好的设置默认元标记的方式? - kamikaze_pilot
1
使用Bootstrap设置默认值。或者使用Action Helper/Plugin来动态地设置它。 - Xerkus

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'; ?>

我尝试过这样做,但是它返回错误:Fatal error: Uncaught exception 'Zend_Application_Bootstrap_Exception' with message 'Resource matching "view" not found'。当我在application.ini中添加resources.view[] = ""时,我的视图助手突然停止工作。 - kamikaze_pilot
你如何引导你的视图?这与官方Zend 快速入门教程有什么不同吗? - Marcin

3

以下是我的解决方案。在布局文件中,你必须确保meta标签被回显。这个阶段它是空的,但你将标记meta标签的输出位置。唯一的缺点是这种方法似乎没有默认的meta标签,因此你必须在每个视图文件中添加meta标签。

在布局文件中:

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

在视图.phtml文件中
$this->headMeta("test description text", "description");

1

这是一个以质量为先的 Code Amazing,谢谢! - ucefkh

1

生成关键字和描述而不需要控制器/操作

在引导程序中注册2个插件

    // 注册导航,$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'  => '介绍',
           'controller' => '控制器',
           'action' => '介绍',
           'route'  => '控制器操作',
           'pageHeader' => 'h1或其他',
           'title' => '用作元标题',
           'keywords' => '元关键词',
           'description' => '元描述',

然后您可以简单地调用(从布局/视图)print $this->pageHeader;


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接