自定义meta标签配置
我有2个表,page
和settings
。自定义meta标签配置
page
只是一堆字段,如名称和slu,,还有3个其他字段用于元标记(标题,关键字,描述)并显示一个cms页面。
的settings
有3个领域:default_meta_title,default_meta_keywords,default_meta_description
现在正是我希望做的是在HTML源显示default_meta_ *标记,如果我在页面上没有具体的元从cms页面设置的信息。
所有的网页,除了主页被管理这种方式,所以我想我需要一些代码添加到layout.php
得到这个工作。
所以网页会显示我default_meta_ *,因为我不能设置在CMS pages
表。
有两种方法来解决这个问题。
首先是使用sfYaml
类更新view.yml
与默认元标记(请参阅documentation about view.yml)。之后,如果特定的页面应该使用其他METAS你可以覆盖默认与addMeta
method of response object
二(如ManseUK建议)是声明插槽放置这样的代码到布局
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<?php include_javascripts() ?>
<?php include_stylesheets() ?>
<?php include_title() ?>
<?php if (has_slot('metas')): ?>
<?php include_slot('metas') ?>
<?php else: ?>
<?php include_component('page', 'metas') ?>
<?php endif; ?>
<link rel="shortcut icon" href="/favicon.ico" />
</head>
<body>
默认METAS将通过page
components呈现。您的模板的顶部(我猜modules/page/templates/showSuccess.php
)处代码
<?php slot('metas') ?>
<?php if($page->hasMetas()):?>
<!-- code to render nondefault page metas -->
<?php echo $page->getMetas(); ?>
<?php else: ?>
<?php include_component('page', 'metas') ?>
<?php endif;?>
<?php end_slot() ?>
我认为你会与真正的代码,将检查您的page
对象有元标记替换$page->hasMetas()
。
其实我宁愿去进一步和代码page
部件接受参数。在模板代码看起来像
<?php slot('metas') ?>
<?php include_component('page', 'metas', array('metas'=>$page->getMetas())) ?>
<?php end_slot() ?>
决定哪些METAS(默认或没有)应该呈现将于page
组件(我假设你可以轻松地检索defaul;从数据库牛逼的设置)。如果没有参数传递(参见布局代码),那么组件也应该呈现默认元素。
我希望这会有所帮助。
辉煌!像魅力一样工作,现在在没有在数据库中定义元的所有页面上呈现默认元,并且当数据库存在于数据库中时,还在数据库中显示元数据。大! – terrid25 2011-05-23 08:36:24
你可以使用一个插槽 - 为您在布局插槽的存在 - 如果它存在,那么添加自定义的元字段 - 如果不添加默认的
你能指定你的问题吗? – Tom 2011-05-19 20:11:03