четверг, 17 октября 2013 г.

Если картинки на сайте темнее оригинала


Впервые столкнулся с необычным явлением - картинки на TYPO3-сайте выглядят несколько темнее, чем те оригиналы, которые я загружал. Поспешу сказать, что сама TYPO3 тут абсолютно ни при чём. Она "виновата" лишь в том, что для всех манипуляций с картинками использует графические библиотеки IM (ImageMagick) или GM (GraphicsMagick). В моём случае это был ImageMagick. Вначале я решил исследовать на эту тему все настройки TYPO3 в разделе Install/All Configuration. Там меня заинтересовал параметр - colorspace, значение которого было - RGB, а коментарий к параметру:

  1. String: Specifiy the colorspace to use. Some ImageMagick versions (like 6.7.0 and above) use the sRGB colorspace, so all images are darker then the original
  1. Possible Values: CMY, CMYK, Grey, HCL, HSB, HSL, HWB, Lab, LCH, LMS, Log, Luv, OHTA, Rec601Luma, Rec601YCbCr, Rec709Luma, Rec709YCbCr, RGB, sRGB, Transparent, XYZ, YCbCr, YCC, YIQ, YCbCr, YUV

До конца не поверив, что решение так быстро найдено, я почитал мануал по IM и наткнулся на такой текст:

...In the above example, the result is darker than the original, because the channels were separate as linear gray and subsequently combined as linear color. In order to return the channels back to sRGB, one must change the colorspace from RGB back to sRGB after the -combine step.

Т.е. все пути вели к значению sRGB. После того, как я поменял RGB на sRGB в файле конфигурации (typo3conf/LocalConfiguration.php)  появилась такая строка:
'GFX' => array(
'colorspace' => 'sRGB', 'gdlib_png' => 1,
'im_combine_filename' => 'composite',
'jpg_quality' => '80',
),
 И о чудо! Картинки стали светлее!

p.s. После смены значения параметра colorspace, TYPO3 может какое-то время заниматься переконвертацией всех картинок в соответствии с новыми графическими настройками, поэтому сайт может вести себя не совсем адекватно. В моем случае это был абсолютно белый экран, который пропал минут через 5.


вторник, 1 октября 2013 г.

Константы TYPO3 в шаблоне FLUID


При формировании меню с помощью FLUID, а точнее вьюхелпером - page.menu из пакета VHS, столкнулся с задачей передачи значения константы TYPO3 в качестве одного из параметров вьюхелпера.

Вот как выглядел viewhelper изначально:

<v:page.menu showHidden="1" doktypes="3" classCurrent="" classActive="" classFirst="" classLast="last" pageUid="26">
<ul class="socicons-container">
<f:for each="{menu}" as="menuLink" iteration="menuIterator">
<li {f:if(condition: menuIterator.isLast, then: 'class="last"')}>
<a href="{menuLink.link}" title="{menuLink.title}" target="{menuLink.target}">
<img src="fileadmin/tmpl/florian/Resources/Public/images/icons/{menuLink.subtitle}" width="30" height="30" alt="{menuLink.title}" />
</a>
</li>
</f:for>
</ul>
</v:page.menu>

тут меню формируется на основании страниц, которые содержатся в системной папке с id=26.

Понятное дело, что тупое указание id это не очень хорошо как для пользователя сайта, так и для его разработчика, который планирует использовать наработку с последующих проектах. Поэтому я решил заменить число 26 на тайповскую константу, которую всегда можно будет изменить в разделе констант шаблона. Причем сделать это будет под силу кому угодно, даже не очень эдвансед юзеру.

Итак, создаем TYPO3-константу:

socialIcons = 26


Как же ее значение использовать вьюхелпером? Для этого нужен промежуточный этап. Сначала значение данной константы помещаем в объект lib:

lib.constants.socialIcons.id = {$socialIcons}

А вот значение параметра lib внутри вьюхелпера можно получить с помощью другого вьюхелпера - var.typoscript. В итоге получаем следующую конструкцию:

<v:page.menu showHidden="1" doktypes="3" classCurrent="" classActive="" classFirst="" classLast="last" pageUid="{v:var.typoscript(path: 'lib.constants.socialIcons.id')}">
<ul class="socicons-container">
<f:for each="{menu}" as="menuLink" iteration="menuIterator">
<li {f:if(condition: menuIterator.isLast, then: 'class="last"')}>
<a href="{menuLink.link}" title="{menuLink.title}" target="{menuLink.target}">
<img src="fileadmin/tmpl/florian/Resources/Public/images/icons/{menuLink.subtitle}" width="30" height="30" alt="{menuLink.title}" />
</a>
</li>
</f:for>
</ul>
</v:page.menu>


P.S. Т.к. в примере используется пакет VHS, то не забывайте подключать его с помощью - {namespace v=Tx_Vhs_ViewHelpers} в начале html-шаблона.



О себе

Моя фотография
Вадим Гиркало
Фрилансер, веб-разработчик сайтов на базе бесплатной, мощнейшей и очень гибкой CMS системы - TYPO3.
Просмотреть профиль

Позвонить мне в Skype

TOP - 3