Печать страниц сайта под управлением symfony

Symfony framework

Автор: Александр Степанов

5 февр. 2013 г., 10:50:21  1024


Предоставлено Symfony Blog - блог о веб разработке

 

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

Атрибут media указывает, для каких устройств должна использоваться указанная таблица стилей. Таким образом, во время печати стили не подхватываются, так как symfony по умолчанию ставит значение «screen» (использование для мониторов), что приводит к разъехавшейся верстке и абсолютно непредсказуемому результату на листе бумаги. Итак, вариантов решения данной проблемы несколько: Вариант первый Поменять настройки symfony для существующей таблицы стилей, а именно – установить значение злополучного атрибута в «all». Это также можно сделать несколькими путями: В настройках в /имя_Application'а/config/view.yml файле:

stylesheets: [main.css: { media: all }]

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

use_stylesheet('main.css', '', array('media' => 'all'));

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

$this->getResponse()->addStylesheet('paper', '', array('media' => 'all'));

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

stylesheets: [main.css: { media: all }, print.css: { media: print }]