Symfony 1.4中的动态页面标题

时间:2010-04-27 14:57:46

标签: symfony1 metadata response action title

我想知道是否有人在Symfony中设置动态元标题方面有任何好的建议/经验?

目前,我所知道的解决方案是使用以下代码在每个操作中单独设置标题:

$this->getResponse()->setTitle('This is a title');

因为我还需要翻译标题,所以我可以在动作中调用i18n助手,将它们包含在提取的XLIFF中。不需要特殊的SEO东西,只是一个干净的标题。

但是,上述内容确实需要我分别调整每个动作。 View.yml不合适,因为每个模块经常有多个动作/模板。

是否有人知道Symfony有更好的方法,或者这确实是正确/唯一的方法?

谢谢。

4 个答案:

答案 0 :(得分:25)

您应该使用slots

在您的布局<head>标记中:

<title><?php echo get_slot('page_title', __('Default page title here')) ?></title>

在动作模板中:

<?php slot('page_title', __('Action page title goes here')) ?>

答案 1 :(得分:5)

我认为在每个动作中都可以单独编写标题。但是如果你想添加一些全局前缀,你可以在布局中使用这样的东西:

<title>SITE NAME — <?= $sf_response->getTitle() ?></title>

此外,您可以在操作中使用preExecute()方法操作每个模块的标题。

答案 2 :(得分:3)

我个人喜欢使用yml文件,它将'配置'与代码

分开

为了处理动态标题,请按以下步骤操作:

在apps / frontend / config / app.yml

all:
  title_separator: ' - '
  title_default: 'TITLE'

在apps / frontend / config / view.yml

default:
  metas:
    title: %APP_TITLE_DEFAULT%

如果您需要将操作中的数据放入标题中,请使用以下内容创建文件lib / myActions.class.php:

<?php

class myActions extends sfActions
{

    protected function setTitle($string)
    {
        $this->getResponse()->setTitle($string . sfConfig::get('app_title_separator') . sfConfig::get('app_title_default'));
    }

}

?>

(注意:根据需要修改此项,例如将默认标题放在前面)

然后更改action.class.php以扩展myActions而不是sfActions

class memberActions extends myActions

每当您需要更改标题时,只需在操作中调用

即可
$this->setTitle('This is how I roll');

您将获得以下标题(如果使用与我上面相同的配置):

This is how I roll - TITLE

答案 3 :(得分:1)

$i18n = $this->getContext()->getI18N();
$this->getResponse()->setTitle('Your title' . ' | ' . $i18n->__('your module name'));