8

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

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

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

因为我还需要翻译的标题,所以我可以在操作中调用 i18n 帮助程序以将它们包含在提取的 XLIFF 中。不需要特殊的 SEO 内容,只需一个干净的标题。

但是,以上确实需要我单独调整每个操作。View.yml 不适合,因为我经常每个模块有多个动作/模板。

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

谢谢你。

4

4 回答 4

25

你应该使用插槽

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

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

在动作模板中:

<?php slot('page_title', __('Action page title goes here')) ?>
于 2010-05-02T18:17:41.663 回答
5

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

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

您也可以在动作中使用 preExecute() 方法来操作每个模块的标题。

于 2010-04-28T07:24:45.337 回答
4

我个人喜欢使用 yml 文件,它将“配置”与代码分开

为了处理动态标题,我执行以下操作:

在应用程序/前端/配置/app.yml

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

在应用程序/前端/配置/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
于 2011-08-19T09:47:37.740 回答
1
$i18n = $this->getContext()->getI18N();
$this->getResponse()->setTitle('Your title' . ' | ' . $i18n->__('your module name'));
于 2017-12-11T02:57:51.537 回答