代码之家  ›  专栏  ›  技术社区  ›  Tom

symfony 1.4中的动态页面标题

  •  8
  • Tom  · 技术社区  · 14 年前

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

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

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

    因为我还需要翻译的标题,所以我可以在操作中调用i18n助手,使其包含在提取的XLiffs中。不需要特别的搜索引擎优化东西,只是一个干净的标题。

    但是,上面确实要求我分别调整每个动作。view.yml不适合,因为我经常在每个模块中使用多个操作/模板。

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

    谢谢您。

    4 回复  |  直到 7 年前
        1
  •  5
  •   zergu    14 年前

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

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

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

        2
  •  25
  •   NiKo    14 年前

    你应该使用 slots .

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

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

    在动作模板中:

    <?php slot('page_title', __('Action page title goes here')) ?>
    
        3
  •  3
  •   Populus    13 年前

    我个人喜欢使用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
    
        4
  •  1
  •   Stephen Rauch Afsar Ali    7 年前
    $i18n = $this->getContext()->getI18N();
    $this->getResponse()->setTitle('Your title' . ' | ' . $i18n->__('your module name'));