Динамические заголовки страниц в Symfony 1.4 - PullRequest
8 голосов
/ 27 апреля 2010

Интересно, есть ли у кого-нибудь полезные советы / опыт по настройке динамических мета-заголовков в Symfony?

В настоящее время мне известно о решении, заключающемся в использовании следующего кода для индивидуальной установки заголовка в каждом действии:

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

Поскольку мне также нужны переведенные заголовки, я мог бы вызвать помощника i18n в действии, чтобы включить их в извлеченные XLIFF. Никаких специальных SEO-вещей не требуется, просто чистый заголовок.

Однако вышесказанное требует, чтобы я настраивал каждое действие отдельно. View.yml не подходит, так как у меня часто есть несколько действий / шаблонов на модуль.

Кто-нибудь знает о лучшем подходе в Symfony или это действительно правильный / единственный путь?

Спасибо.

Ответы [ 4 ]

25 голосов
/ 02 мая 2010

Вы должны использовать слотов .

В вашем макете <head> тег:

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

И в шаблоне действия:

<?php slot('page_title', __('Action page title goes here')) ?>
5 голосов
/ 28 апреля 2010

Я думаю, что писать отдельные заголовки в каждом действии - это нормально. Но если вы хотите добавить глобальный префикс, вы можете использовать что-то вроде этого в макете:

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

Также вы, вероятно, можете манипулировать заголовком для модуля, используя метод preExecute () в действиях.

3 голосов
/ 19 августа 2011

Мне лично нравится использовать файлы 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
1 голос
/ 11 декабря 2017
$i18n = $this->getContext()->getI18N();
$this->getResponse()->setTitle('Your title' . ' | ' . $i18n->__('your module name'));
...