Наверняка кто-то из программистов недоумевает, что происходит с их сайтом при попытке печати под управлением symfony. Верстка разъезжается в разные стороны, а стили вроде бы подключены. В чем же дело?

Я сам ломал голову пару часов до тех пор, пока не посмотрел сорс страницы и не увидел что symfony автоматически добавляет атрибут media.

[code lang="html; gutter: false"] [/code]

Атрибут media указывает, для каких устройств должна использоваться указанная таблица стилей. Таким образом, во время печати стили не подхватываются, так как symfony по умолчанию ставит значение "screen" (использование для мониторов), что приводит к разъехавшейся верстке и абсолютно непредсказуемому результату на листе бумаги.

Итак, вариантов решения данной проблемы несколько:

Вариант первый

Поменять настройки symfony для существующей таблицы стилей, а именно - установить значение злополучного атрибута в "all". Это также можно сделать несколькими путями:

В настройках в /имя_Application’а/config/view.yml файле:

[code lang="css; gutter: false"] stylesheets: [main.css: { media: all }] [/code]

либо непосредственно в представлении будь то шаблон, или лейаут:

[code lang="php; gutter: false"] use_stylesheet('main.css', '', array('media' => 'all')); [/code]

либо в контроллере:

[code lang="php; gutter: false"] $this->getResponse()->addStylesheet('paper', '', array('media' => 'all')); [/code]

Вариант второй

Так как мы серьезные разработчики, нам мало просто использовать существующие стили, мы хотим чтобы наша распечатанная страница выглядела красиво. Ведь по умолчанию браузеры не печатают ни бекграундных картинок, ни бекграундных цветов, а имеющаяся верстка наверняка не предусматривает подобных вещей. Тогда к нам на помощь приходит верстальщик =) (хотя любой уважающий себя web-программист должен уметь сделать все необходимые действия сам) и, конечно же, вышеупомянутые настройки symfony. В задачи верстки входит лишь написание дополнительной таблицы css, которая будет скрывать ненужные элементы существующей верстки, а так же, при необходимости, вносить изменения в расстановку элементов на листе. Потом нам останется подключить эту новую таблицу, используя любые из перечисленных в первом варианте методов предоставляемых symfony, только установив атрибут media в значение "print". Например:

[code lang="php; gutter: false"] stylesheets: [main.css: { media: all }, print.css: { media: print }] [/code]