Combobox в ExtJS. Установка автоматической ширины выпадающего списка

При работе с интерфейсной частью (на frontend`е), часто бывает, что функциональный элемент, такой как combobox, например, не должен стилистически зависеть от данных, с которыми он работает. Но при этом пользователя нельзя ограничивать в usability.

При работе на frontend`е с фреймворком ExtJS (v4.2.2) возникла необходимость разделить определение ширины самого комбобокса (которая может быть как фиксированной, так и зависеть от соседних элементов в рамках одного блока) от ширины выпадающего списка, который появляется при нажатии на combobox. Ширина должна всегда иметь максимальное значение по содержимому, т.е. зависеть от самого длинного значения в store combobox`а. Казалось бы ничего сложного в этой задаче нету: гугл + офф. документация (а лучше наоборот) должны решить этот вопрос. Но в случае с ExtJS не все так просто :)


Читать дальше

Журнал запросов MySQL в режиме реального времени (mysql realtime log)

Задался я вопросом, как вывести лог запросов MySQL в режиме реального времени.

Тут конечно много разных решений есть, и запрос mysql realtime log выдаст целый список сайтов с целой кучей вариантов) Но, я выбрал для себя простейший и достаточный, для организации слежения за потомком запросов на MySQL сервере.

Итак, нам нужен доступ в консоль, в которой выполняем команду:
mysqladmin -u<USER_NAME> -p<PASSWORD> -i 1 processlist

где:
  • USER_NAME — имя пользователя БД
  • PASSWORD — пароль пользователя базы данных
  • "-i" — интервал обновления
  • «processlist» — команда для вывода данных SHOW PROCESSLIST

В результате, мы получаем в окне терминала результат команды SHOW PROCESSLIST с интервалом обновления — 1 секунда.

П.С. для вывода более подробных данных, нужно в конце строки указать параметр "-v".
mysqladmin -u<USER_NAME> -p<PASSWORD> -i 1 processlist -v

Работа с интерфейсом грид-панели при обработке событий его стора в ExtJS

В данной статье предоставляется один из способов получить управление интерфейсной частью грид-панели при обработке событий стора данного грида в рамках фреймворка ExtJS (v 4.2.2).
Конкретная задача состоит в том, чтобы получить доступ к управлению кнопкою в тулбаре грида при добавлении и удалении данных из его стора.


Читать дальше

Преобразование строки HEX в число INT с учётом знака

PHP
Как оказалось, преобразование строки HEX в число INT с учётом знака, не является тривиальной задачей. И для такой конвертации не предусмотрено стандартной функции)
Но, если смотреть на сайте php.net не только описание стандартных функций, но и комментарии к ним, то можно обнаружить интереснейшие решения, одно из которых я и предлагаю Вашему вниманию.
/**
     * Конвертация HEX в INT с знаком
     *
     * @param $hex
     *
     * @return number
     */
    function hex2decSigned($hex)
    {
        // очистка от символов, не входящих в HEX
        $hex = preg_replace('/[^0-9A-Fa-f]/', '', $hex);

        // конвертация в десятичное значение:
        $dec = hexdec($hex);

        // максимальное десятичное значение, основанное на длине hex + 1:
        // количество бит в шестнадцатеричное число-это 8 бит для каждого 2 hex -> max = 2^n
        // использование 'pow(2,n) -' с '1 << n' - только для целых чисел и, следовательно, ограничен integer.
        $max = pow(2, 4 * (strlen($hex) + (strlen($hex) % 2)));

        // complement = maximum - конвертированный hex:
        $_dec = $max - $dec;

        // если dec значение больше, чем complement, имеем отрицательное значение (первый бит)
        return $dec > $_dec ? -$_dec : $dec;
    }

П.С. также эта функция может использоваться как частичная реализация C функции atoi(HEX) в PHP.

Преобразование многомерного массива PHP в простой XML

Преобразование многомерного массива PHP в простой XML (без атрибутов), только пары ключ=>значение

Очень коротко и быстро, хочу представить Вашему вниманию, небольшой класс PHP для преобразования многомерных массивов PHP в простой (без атрибутов) XML.

Большое спасибо автору Кевину Ватерсону за сие творение, которое мы успешно используем в своём API.


Читать дальше

Метод разбиения промежутка времени по дням с фиксацией времени начала и конца дня для указанного периода времени

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

Для примера представим, что клиент в абстрактной системе отчетов устанавливает период времени с 01:00 15.12.2014 по 23:00 21.12.2014 (1 неделя), за который он желает получить информацию. Фабрика отчетов на сервере умеет отдавать данные за период не более 24 часов. Вот тут и встает задача разбить промежуток времени на отрезки, с которыми потом можно работать в фабрике, т.е. на дни. Для получения можно воспользоватся функцией getDateTimeStartStopByDays (см. ниже), которая принимает в качестве параметров начало и конец периода в формате Timestamp. А на выходе мы получаем массив дат с указанием начала и конца каждого дня. Больше деталей смотрите в реализации метода.

Конечно можно работать только с датами в формате Unixtime, но в случае необходимости получения именно отформатированного массива дней, данный метод может Вам пригодится.

Коментарии по улучшению кода (стилистики, подхода, реализации и пр.) приветствуются!


Читать дальше

Экспорт данных из таблицы ExtJS Grid в таблицу Excel

Как сделать экспорт данных из таблицы ExtJS Grid в таблицу Excel?

Данное решение экспериментальное и имеет место для небольших, одностраничных, таблиц типа xtype:'grid' с хранилищем типа xtype:'store'.

Для реализации функционала, нам понадобится:
  • Библиотека ExtJS — JavaScript фреймворк. Если вы слышите это впервые, статья не будет полезна.
  • PHP сервер весрии 5+
  • PHPExcel — библиотека для создание Excel документа. Ссылка на сайт производителя.


Grid таблица
Для примера берём простейшую таблицу с тремя колонками ID, Имя, Дата. В данном примера поля имеют тип string (текст).


Так как статья получилась длинная, читайте продолжение под катом...

Автоматическая ширина ячеек PHPExcel

Как сделать автоматический подбор по ширине ячеек в PHPExcel

К сожалению, у меня не получилось решить этот вопрос другими средствами, например настройками ячеек по умолчанию для всех. Итак, имеем то, что имеем)

Известные проблемы:
  • Не решена проблема с индексом ячеек, больше алфавита, например AA, AB. Но, учитывая, что документы с таким количеством колонок большая редкость, используем как локальное решение.
// определение максимальных размеров документа
$max_col = $sheet->getHighestColumn();
/* автоширина */
for ($col = 'A'; $col <= $max_col; $col++) {
   $sheet->getColumnDimension($col)->setAutoSize(true);
}

Буду рад, если кто предложит другое решение)

MySQL функция преобразование битовой маски в множество

MySQL функция преобразование битовой маски в множество, в данном случае, 10-тичного вида битовой маски.

Не так давно, я попытался написать подробную (с примерами, как для себя) инструкцию, применения битовой маски в MySQL запросах.
Сегодня мне пришлось немного расширить функционал своего модуля и дописать выборку из другой таблице по полю значений маски. Не буду увлекаться подробностями, скажу только, что кроме как разложить битовую маску на множество (строку) вида «1,3,7» для использование в условии:

WHERE `field` IN(1,3,7)

Для этих целей решил набросать маленькую MySQL функцию.
В качестве аргумента, функция принимает INT число — значение битовой маски (10 разряд).
Результатом работы функции будет строка вида «1,3,7», соответствующая номерам битов с значением 1.

Сама функция имеет комментарии и потому дополнительно описывать её не вижу смысла.

Читать дальше

Новогодняя акция «ПЛЮС ОДИН» от компании TUCHA

Все новые клиенты при первой покупке до 31.12.2014 бесплатно получают +1 месяц к оплаченному сроку контракта.


Используйте этот месяц для комфортного переезда, а мы, к тому же, бесплатно поможем в вопросах миграции (перенос, настройка, оптимизация сайтов и серверов, и т.п.).

  • Для существующих клиентов акция действует на покупку новых облачных сервисов Tucha.
  • Акция «Плюс один» не суммируется с другими специальными предложениями.
  • Акция действует для всех сервисов Tucha!