自定义meta标签配置

问题描述:

我有2个表,pagesettings自定义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表。

+0

你能指定你的问题吗? – Tom 2011-05-19 20:11:03

有两种方法来解决这个问题。

首先是使用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将通过pagecomponents呈现。您的模板的顶部(我猜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;从数据库牛逼的设置)。如果没有参数传递(参见布局代码),那么组件也应该呈现默认元素。

我希望这会有所帮助。

+0

辉煌!像魅力一样工作,现在在没有在数据库中定义元的所有页面上呈现默认元,并且当数据库存在于数据库中时,还在数据库中显示元数据。大! – terrid25 2011-05-23 08:36:24

你可以使用一个插槽 - 为您在布局插槽的存在 - 如果它存在,那么添加自定义的元字段 - 如果不添加默认的