我有2个表,page
和settings
。
page
只是一堆字段,例如name和slug,还有3个其他字段用于元标记(标题,关键字,描述)并显示cms页面。
settings
有3个字段:default_meta_title,default_meta_keywords,default_meta_description
现在我要做的是如果我所在的页面没有来自cms页面的特定元信息集,则在HTML源代码中显示default_meta_ *标签。
除了主页之外的所有页面都以这种方式管理,因此我认为我需要在layout.php
添加一些代码才能使其正常工作。
所以主页会显示我的default_meta_ *,因为我无法在cms pages
表中设置它。
答案 0 :(得分:4)
有两种方法可以解决这个问题。
首先,使用sfYaml
类使用默认元标记更新view.yml
(请参阅documentation about view.yml)。之后,如果特定页面应使用其他元模式,则可以使用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>
默认元图将通过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->hasMetas()
,以检查您的page
对象是否有元标记。
实际上我更希望更进一步,并使用page
个代码来接受参数。模板中的代码看起来像
<?php slot('metas') ?>
<?php include_component('page', 'metas', array('metas'=>$page->getMetas())) ?>
<?php end_slot() ?>
决定应该呈现哪些元数据(默认或不存在)将在page
组件中进行(我假设您可以轻松地从数据库中检索默认设置)。如果没有传递参数(参见布局代码),那么组件也应该呈现默认元数据。
我希望这会有所帮助。
答案 1 :(得分:0)
您可以使用插槽 - 检查布局中是否存在插槽 - 如果存在则添加自定义元字段 - 如果不添加默认元素