我在layout.phtml中设置了一些默认的meta标签,使用的是
$this->headTitle() and $this->headMeta()->appendName()
并且在layout.phtml的头部被回显。
我的问题是:我如何从视图文件更改这些默认的meta标签,以便它们被替换?
我尝试使用:
$this->headMeta()->appendName() or setName()
不要替换旧的默认元标签,而是创建一个全新的元标签。如何替换它们?
我在layout.phtml中设置了一些默认的meta标签,使用的是
$this->headTitle() and $this->headMeta()->appendName()
并且在layout.phtml的头部被回显。
我的问题是:我如何从视图文件更改这些默认的meta标签,以便它们被替换?
我尝试使用:
$this->headMeta()->appendName() or setName()
不要替换旧的默认元标签,而是创建一个全新的元标签。如何替换它们?
我刚刚测试了这个,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" >
我建议设置一个视图变量来存储关键词。例如,在你的 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'; ?>
以下是我的解决方案。在布局文件中,你必须确保meta标签被回显。这个阶段它是空的,但你将标记meta标签的输出位置。唯一的缺点是这种方法似乎没有默认的meta标签,因此你必须在每个视图文件中添加meta标签。
在布局文件中:
<?php echo $this->headMeta(); ?>
$this->headMeta("test description text", "description");
$keywords = 'php,zend,framework';
$this->view->headMeta($keywords,'keywords','name',array(),'SET');
我发现这个对我有用,在最佳实践中放置meta标签、链接和样式在Zend框架中?
生成关键字和描述而不需要控制器/操作
在引导程序中注册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;