自定义元标记配置

时间:2011-05-19 10:09:49

标签: symfony1 symfony-1.4 meta-tags

我有2个表,pagesettings

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表中设置它。

2 个答案:

答案 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)

您可以使用插槽 - 检查布局中是否存在插槽 - 如果存在则添加自定义元字段 - 如果不添加默认元素