Расширяем возможности sfWebResponse

Дополняем sfWebResponse новым функционалом. Делаем возможность дополнять заголовки страниц фрагментами и генерировать из этих них хлебные крошки.

Я не знаю как вам, а мне никогда не нравился момент установки всяких там <title>, <meta> в Symfony, наверное потому что я просто не решил где лучше это делать. Захотелось немного дополнить имеющийся ассортимент функций для этого дела, которые имеются в классе sfWebResponse и делать это в templates. Почему templates? Там часто ренденится блок breadcrump - быстрый доступ ко всем предшествующим страницам, а-ля путь следования по сайту. Пример с сайта blackcrystal.net :

Breadcrump: Старт → Проекты → Krediitbox

Заголовок страницы: BlackCrystal / Проекты / Krediitbox

Заметно, что breadcrump почти в точности повторяет заголовок, и эту похожесть хочется использовать. Возьмём код sfWebResponse, добавим функцию addTitle и кладём модифицированый файл в lib/response/sfWebResponse.class.php:

public function addTitle( $title , $escape = true )
{
  $newtitle  =  $this->getTitle() . " / " . $title;
  $this->setTitle( $newtitle, $escape );
}

На этом можно было бы закончить, но по мне так это грубый, неотёсаный вариант, на скору-руку сляпаный. Я делаю полноценную замену классу sfWebResponse, назовём файл lib/response/myWebResponse.class.php:

class myWebResponse extends sfWebResponse {

  public function initialize(sfEventDispatcher $dispatcher, $options = array())
  {
    parent::initialize($dispatcher, $options);
    $this->options['title_separator'] = isset($options['title_separator']) ? $options['title_separator'] : ' / ';
    $this->options['title_add_where'] = isset($options['title_add_where']) ? $options['title_add_where'] : 'after';
  }

  public function addTitle( $title , $escape = true )
  {
    $separator = $this->options['title_separator'];
    $newtitle  = $this->options['title_add_where'] == 'after'
               ? $this->getTitle() . $separator . $title
               : $title . $separator . $this->getTitle();
    $this->setTitle( $newtitle, $escape );
    return $title;
  }

}

Теперь у нас есть возможность конфигурировать разделитель кусочков заголовка и порядок их складывания прямо в factories.yml. Пример файла apps/frontend/config/factories.yml:

all:
  response:
    class: myWebResponse
    param:
      title_separator: ' / '
      title_add_where: after

Использую новый функционал я вот так. Файл apps/frontend/modules/mymodule/templates/indexSuccess.php:

<div class="breadcrump">
  < ?php echo $sf_response->addTitle( 'BlackCrystal' ) ?>
  < ?php echo link_to('Старт', '@homepage'); ?> &rarr;
  < ?php echo link_to( $sf_response->addTitle('Проекты') , '@project_index');?> &rarr;
  < ?php echo $sf_response->addTitle( $project ) ?>
</div>

Составить красивые заголовки для всех страниц не стоило особого труда благодаря более удобной работе с объектом response. Хотя, это не предел удобности и здесь есть ещё над чем поработать.

Я пишу эти примеры не для того чтобы показать лучший способ уставновки заголовков, нет, скорее наставить вас на направление, где вы сможете сделать это лучше чем я. Самое главное почувствовать гибкость фреймворка и начать его под себя изменять. Дерзайте!

BlackCrystalБиблиотека → Расширяем возможности sfWebResponse

Скрипт ВКонтакте MP3

Скрипт стирания выборочных сообщений со стены ВКонтакте

Скрипт удаления из всех групп ВКонтакте

Регенерация Session Id в Symfony - фича или баг?

Скрипт стирания сообщений со стены ВКонтакте

AJAX-запросы между доменами

Найти друзей слова causes. Часть первая.

Удобное размещение папки с проектом Symfony

Подготовка мини-копий картинок (thumbs) на лету

Расширяем возможности sfWebResponse

Отображение ошибок валидации

Проверка персонального кода sfValidatorIsikukood

Правила и соглашение

1999-2009 BlackCrystal ¬|г Clan.    2007-2012 BlackCrystal Ltd.    2011-2012 BlackCrystal Club.