所以我在layout.phtml上使用
设置了一些默认元标记$this->headTitle() and $this->headMeta()->appendName()
并在layout.phtml的标题中回显
我的问题是:如何从视图文件中更改这些默认元标记,以便替换它们?
我尝试使用:
$this->headMeta()->appendName() or setName()
它不会替换旧的默认元标记,而是创建一个全新的元标记。我该如何更换它们?
答案 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?