20 февр. 2011 г.

Магические методы в PHP5

В PHP5 существуют следующие основные магические методы:
  • __construct () — конструктор класса. Срабатывает при создании объекта.
  • __destruct () — деструктор класса. Срабатывает при удалении объекта.
  • __clone () — срабатывает при клонировании объекта.
  • __sleep () — срабатывает при сериализации объекта.
  • __wakeup () — срабатывает при десериализации объекта.
  • __toString () — задает поведение класса при конвертировании его в строку.
  • __set_state () — статический метод срабатывает при вызове var_export().
Методы-перехватчики:
  • __get ( $property ) — перехватчик запроса к не существующему свойству.
    • __isset ( $property ) — перехватчик запроса на вызове метода isset() для не существующего свойства.
  • __set ( $property, $value ) — перехватчик запроса на присвоение некоторого значения не существующему свойству.
    • __unset ( $property ) — перехватчик запроса на вызов метода unset() для не существующего свойства.
  • __call ( $method, $arg_array ) — перехватчик запроса на вызов не существующего метода.
  • __callStatic () — перехватчик запроса на вызов не существующего статического метода(появился в PHP 5.3).
  • __invoke () — срабатывает при попытке вызова объекта как функции (появился в PHP 5.3).

15 февр. 2011 г.

Изменяем цвет строки в Grid


you can use the GridView class (Ext.grid.GridView) to manipulate the user interface of the grid.
You can also the viewConfig property of the GridPanel. Here is an example:

viewConfig: {
        //Return CSS class to apply to rows depending upon data values
        getRowClass: function(record, index) {
            var c = record.get('change');
            if (c < 0) {
                return 'price-fall';
            } else if (c > 0) {
                return 'price-rise';
            }
        }
    }

ps: Example taken from ExtJS API documentations itself

The price-fall and price-rise are CSS that have background colors set accordingly. eg:

.price-fall { 
 background-color: #color;
}
.price-rise {
 background-color: #color;
}






You can do it by using the getRowClass method of GridView (see Ext JS API).

Quoted example from API documentation:

viewConfig: {
    forceFit: true,
    showPreview: true, // custom property
    enableRowBody: true, // required to create a second, 
                         //full-width row to show expanded Record data
    getRowClass: function(record, rowIndex, rp, ds){ 
 // rp = rowParams
        if(this.showPreview){
            rp.body = '<p>'+record.data.excerpt+'</p>';
            return 'x-grid3-row-expanded';
        }
        return 'x-grid3-row-collapsed';
    }
},


src : how can i change the row colour in datagrid based on severity

10 февр. 2011 г.

Инструменты для разработки

SVN Mercurial (homepage)

TortoiseHG (Windows клиент для SVN Mercurial )

Для дальнейшего ознакомления могут быть полезны следующие ресурсы:

2 февр. 2011 г.

Плохой стиль программирования в ExtJS

После  упорного рефакторинга своего и чужого кода решил выделить несколько моментов
непрофессионального и неперспективного стиля программирования
с которыми мне пришлось неоднократно сталкиваться и исправлять:

  1. Куча входных параметров в функции

    function myfunction(node, record, xtype, subject) {
    ...
    }

    минусы:
    - трудно добавить новый параметр
    - выглядит некрасиво и не оптимально

  2. Явное задание обработчиков
    var btn = new Ext.Button({
                      xtype:'button',
                      text: 'apply',
                      handler:  function(p){
                                    ...
                                    }
    });

    минусы:
    - нельзя использовать данный обработчик в другом месте
    - выглядит громоздко

    мое предложение:

    function myfunc(p) {
               ...
    }

    var btn = {
                      xtype:'button',
                      text: 'apply',
                      handler:  myfunc(p)
    }

ps:
Если есть комментарии или прпедложения готов рассмотреть