shoorick: (Default)
Процесс перевода каталистового приложения на новый сервер что-то затягивается: после установки всего необходимого приложение наконец-то запускается, но работать не хочет: сначала ругалось на Wide characters и помирало, теперь, после бубна и напильника, не ругается и, вроде, живёт, но выводит странную кашу: данные, пришедшие из БД и из конфирурационного файла, отображаются правильно, а вот содержимое шаблонов лишний раз перекодируется и выводится примерно так: помоÑ.

Читаю Using Unicode in Catalyst Applications — вижу, что некоторые рекомендации оттуда я как-то применял, но закомментировал: наверное, они были, как минимум, не нужны, а то и вредны. Продолжаю читать и пробовать...

upd/17:40: Отключил кэширование шаблонов в TT, чтобы глаза не мозолили, сделал всё, рекомендованное в Using Unicode in Catalyst Applications — заработало.
shoorick: (Default)
Обнаружил в коде прекрасное:
[% FILTER replace('\n', '<br>') %][% FILTER replace('<', '\&lt;') %][% FILTER replace('>', '\&gt;') %][% notice.body %][% END %][% END %][% END %]
заменил на:
[% notice.body | html | html_line_break %]
Интересно, в [livejournal.com profile] ru_perlfuck примеры на Template::Toolkit принимают?
shoorick: (Default)
[livejournal.com profile] niskam написал в [livejournal.com profile] ru_perl: Кэширование подшаблонов в Template Toolkit. В посте есть ссылка на статью Рэндела Шварца «Profiling in Template Toolkit via overriding», где описан способ оценки производительности отдельных шаблонов на сайте, работающем с использованием Template::Toolkit. Я попробовал применить метод на каталистовом сайте — работает, измеряет.
shoorick: (Default)
Подсмотрел простенький пример, демонстрирующий раскраску чётных и нечётных строк таблицы средствами Template::Toolkit.
Его можно чуть-чуть упростить:
[% FOR subject = subjects %]
<tr[% IF loop.index % 2 %] class="even"[% END %]>
shoorick: (Default)
Написал собственный фильтр для TT. Это оказалось достаточно просто:
package MyApp::View::TT;

use strict;
use base 'Catalyst::View::TT';
use POSIX 'strftime';

__PACKAGE__->config({
	...
	FILTERS			=> {
		'date'		=> \&filter_date
	},
	...
});

=head2 filter_date

Фильтр.
Форматирует дату: преобразовывает её из вида, возвращаемого MySQL YYYY-MM-DD
в определяемую локалью DD.MM.YYYY

=cut

sub filter_date	{
	my $date = shift;
	return unless $date;
	my ($yyyy, $mm, $dd) = ($date =~ /(\d+)\D+(\d+)\D+(\d+)/) or return;
	return strftime('%x', 0, 0, 0, $dd, $mm-1, $yyyy-1900);
} # sub filter_date
Теперь даты выводятся в правильном виде, как ДД.ММ.ГГГГ, а не как ГГГГ-ММ-ДД. Причём вызывать фильтр гораздо удобнее, чем обычные функции:
[% some_date | date %]
shoorick: (Default)
Если при проверке длины передаваемого массива в Template Toolkit использовать
[% IF array_name %]
, то условие будет истинным даже в том случае, когда массив пуст. Во всяком случае, это справедливо для массивов, получаемых из БД:
$c->stash->{‘array_name’} = [$rs->some_values];
Но если использовать метод size — всё получается: условие
[% IF array_name.size %]
оказывается истинным лишь тогда, когда в массиве что-то есть и ложным ­— если массив пуст.
shoorick: (Default)

  1. Дока/ман/туториал по каталисту написаны сумбурно, что есть швах.
  2. Существуют примеры, что есть гут.
  3. Хозяйке на заметку: вместо того, чтобы в AppName/lib/AppName.pm писать
    __PACKAGE__->config( 'View::TT' => {'INCLUDE_PATH' => __PACKAGE__->path_to('tpl')});
    лучше в AppName.yml добавить
    View::TT:
        INCLUDE_PATH: tpl
    (при условии, что существуют и View::TT, и tpl). Щастье™ хоть и не наступает, но становится на шаг ближе.

Profile

shoorick: (Default)
shoorick

December 2016

S M T W T F S
    1 23
45678910
11121314151617
18 19 2021222324
25262728293031

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Mar. 21st, 2026 02:18 pm
Powered by Dreamwidth Studios