django

6 апреля 2010 г.

Возникла необходимость в шаблоне перевести текст на язык, отличный от языка сессии.
К сожалению, стандартный тег {% trans %} для этого не подходит. Пришлость написать свой:


from django.template import Library 
from django.utils.translation.trans_real import translation

register = Library()

def trans_to_lang(value, language):
    return translation(language).ugettext(value)

register.simple_tag(trans_to_lang)

Пример использования:


{% trans_to_lang var "ru" %}

25 января 2010 г.

Сразу оговорюсь, что речь пойдет не об интерфейсе пользователя, а о том, что называется interface в языках java, C# и php5.
Если вы ищете что-нибудь о юзабилити, здесь вы этого не найдете.

Продолжение

Работаем с symfony: получение независимого объета I18N

25 января 2010 г.

Иногда возникает необходимость обработать переменные на языке, отличном от установленного в пользовательской сессии.

Вот как это можно сделать:


$culture = 'ru';

$i18n = new sfI18N();

$i18n->initialize(new sfContext());

$i18n->setMessageSourceDir(sfConfig::get('sf_app_i18n_dir'), $culture);

21 января 2010 г.

Так сложилось, что в своей работе я использую замечательный фреймворк symfony.

В этой статье я расскажу о логировании в symfony.

Продолжение
19 января 2010 г.

Краткое описание, как можно использовать популярный php-шаблонизатор Smarty совместно с популярным php-фреймворком CodeIgniter.

Продолжение

Про хорошие исключения и плохой goto

19 января 2010 г.

Не знаю, как у вас, воображаемые читатели, а у меня довольно часто возникает ситуация, когда необходимо проверить довольно много условий с немедленным прекращением проверок и одинаковыми действиями в случае невыполнения любой из них (getMessage() в лог, редирект на страницу с сообщением об ошибке, ну вы поняли).

Это выглядит как один большой блок try с кучей if (!что-то) throw new Exception и блок catch с логгером и т.д.

Вопрос: чем это принципиально отличается от if (!что-то) error_flag = 1 и goto error, где за меткой error то же, что было в catch? Да, приходится возиться с флагом, но принципиально — чем?

Подумайте об этом :)

Про MVC, или Почему контроллер, перегруженный логикой, — это плохо

19 января 2010 г.

Есть такой известный антипаттерн в разработке настольных приложений — "magic pushbutton", когда вся работа, которая должна делаться при нажатии на кнопку, помещается в обработчик события нажатия на кнопку.

Зачем это знать применительно к web?
Контроллер в каком-то смысле тоже обработчик события-запроса к адресу.
И помещать весь код в него так же неверно, как и в случае с той кнопкой в GUI.

Так что все, что связано с моделями, помещаем в модели, например, в виде статических методов, все, что имеет независимую функциональность — в служебные классы, пакеты классов и т.д.

Про ORM

18 января 2010 г.

ORM никогда не покроет 100% задач при работе с РСУБД.
Просто потому что не все SELECT'ы сводятся к выборкам коллекций объектов предметной области