Архив за месяц: Август 2010

Yii хотелки и меньше лапше-кода

Довольно часто, при работе с сессией в Yii, приходится писать код вот такого плана:

$nickName    = Yii::app()->user->getState('nickName');
$accessLevel = Yii::app()->user->getState('accessLevel');
.........................................................

Аналогично и при установке этих значений.

Было бы здорово иметь возможность передавать методам getState и setState массив параметров:

$data = Yii::app()->user->getState(array(
       'nickName',
       'accessLevel' 
));

или

Yii::app()->user->setState(array(
       'nickName'     => 'xoma',
       'accessLevel'  => 'superAdmin' 
));

JavaScript экономим на if или очередная экономия на спичках

Чем меньше по объему внешний JavaScript-файл, тем лучше (он быстрее загружается браузером и возможно (!) быстрее выполняется).

Мало какие сценарии JavaScript обходятся без конструкции if…else.

Типично она выглядит вот так (использую jQuery):

if($(this).is(':checked')){
    $('span.noAnonym').hide();
}else{
    $('span.noAnonym').hide();
}

Как видно из примера в блоках if и else всего по одному выражению.
В этом случае, конструкцию if…else можно заменить тернарным оператором ? :.

Перепишем предыдущий пример:

$(this).is(':checked') ? 
$('span.noAnonym').hide() :
 $('span.noAnonym').show();

Экономим 10 символов !!!

Yii. Конфликт имени модуля и контроллера.

Есть Yii приложение, у которого в настройках прописан модуль ‘Page’:

'page' => array(
     'class'  => 'application.modules.page.PageModule',
     'layout' => 'application.views.layouts.column2'
),

Так же есть простой контроллер ‘PageController’, расположенный в каталоге приложения ‘controllers’.

При обращении по url типа: http://localhost/page/about — возникает ошибка, так как Yii пытается вызвать контроллер ‘about’ из модуля ‘Page’, а его нет.

При обращении по url http://localhost/Page/about (Page вместо page) — Yii вызывает контроллер Page и его экшн ‘about’ что мне и требовалось =).

Увеличиваем производительность труда =)

Всем, наверное, известно, что всякие твиттеры, жаберы, скайпы и прочие мессенджеры/социалки отнимают очень много рабочего времени. Для борьбы с этим, я в последнее время стараюсь не пользоваться всем выше перечисленным без острой необходимости. Твиттер, например, я читаю по пути домой (полтора часа в электричке способствуют этому =) ), хотя все же изредка пишу туда. Но сейчас речь не о том. Для разработки я использую Komodo Edit и он мне очень нравится, так вот, включив в нем полноэкранный режим (View->Full Screen) я заметил, что стал меньше отвлекаться на всякую ерунду, типа просмотра страниц/новостей и т.д. Все пространство занято рабочей областью редактора и ничего постороннего туда не пробивается, это помогает сосредоточиться на работе и не отвлекаться на всякий «шум».

Мораль: ИСПОЛЬЗУЙТЕ ПОЛНОЭКРАННЫЙ РЕЖИМ В ВАШИХ IDE!!!

qw — ‘Quoted Words’ или ‘Quoted by Whitespace’

my @data = qw /Mojolicious Catalyst Dancer/;

Perl интерпретирует данные в выражении qw как строки в апострофах, т.е. там нельзя использовать интерполяцию переменных и символы типа ‘\n’

qw удалет пропуски (пробелы, табуляции, символы новой строки), а все остальное преобразует в список.

Для включения в список символа ограничителя — необходимо экранировать его с помощью ‘\’

  my @data = qw !Google Yahoo \! Rambler!;